<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>【case】タグの記事一覧｜Haskell Tech</title>
	<atom:link href="https://haskell-tech.nkhn37.net/tag/case/feed/" rel="self" type="application/rss+xml" />
	<link>https://haskell-tech.nkhn37.net</link>
	<description>Haskell学習サイト</description>
	<lastBuildDate>Fri, 19 Jan 2024 20:30:40 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://haskell-tech.nkhn37.net/wp-content/uploads/2023/12/cropped-lion-normal-clear-32x32.png</url>
	<title>【case】タグの記事一覧｜Haskell Tech</title>
	<link>https://haskell-tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Haskell】関数におけるcase式</title>
		<link>https://haskell-tech.nkhn37.net/haskell-function-case/</link>
					<comments>https://haskell-tech.nkhn37.net/haskell-function-case/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 19 Jan 2024 20:00:00 +0000</pubDate>
				<category><![CDATA[関数]]></category>
		<category><![CDATA[case]]></category>
		<guid isPermaLink="false">https://haskell-tech.nkhn37.net/?p=291</guid>

					<description><![CDATA[Haskellの関数におけるcase式の使い方の基本について解説します。 関数におけるcase式 Haskellは、純粋関数型のプログラミング言語のひとつです。Haskellでのプログラミングでは関数が中心となります。H]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Haskellの関数における<span class="marker"><strong><code>case</code>式</strong></span>の使い方の基本について解説します。</p>



<h2 class="wp-block-heading">関数におけるcase式</h2>



<p class="wp-block-paragraph">Haskellは、純粋関数型のプログラミング言語のひとつです。Haskellでのプログラミングでは関数が中心となります。Haskellの関数の基本については「<a href="https://haskell-tech.nkhn37.net/haskell-function-basic/" target="_blank" rel="noreferrer noopener">関数の基本</a>」でまとめていますので参考にしてください。</p>



<p class="wp-block-paragraph">Haskellの関数の実装の際に、条件分岐するために便利な式として<span class="marker"><strong><code>case</code>式</strong></span>というものがあります。C/C++等の他の言語を知っている人であれば<code>switch case</code>のような条件分岐の構文が出てきますが概念としては同じようなものです。</p>



<p class="wp-block-paragraph">ただし、Haskellの<code>case</code>式はそれよりも強力なものです。C/C++の<code>switch case</code>では、主に整数値や列挙型との一致で分岐させることに限定されていますが、Haskellの<code>case</code>式では値によって評価して分岐するだけではなく、パターンによってマッチさせることも可能であり、より表現力が高くなります。</p>



<p class="wp-block-paragraph">本記事では、Haskellの関数における<span class="marker"><strong><code>case</code>式の使い方の基本</strong></span>について紹介します。</p>



<h3 class="wp-block-heading"><code>case</code>式の基本的な使い方</h3>



<h4 class="wp-block-heading"><code>case</code>式の構文</h4>



<p class="wp-block-paragraph"><code>case</code>式の構文は以下のようになります。</p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box4"><div class="kaisetsu-box4-title"><code>case</code>式</div><div class="wp-block-syntaxhighlighter-code "><pre class="brush: haskell; gutter: false; title: ; notranslate">
case expression of
    pattern1 -&gt; result1
    pattern2 -&gt; result2
    ...
</pre></div></div>



<p class="wp-block-paragraph">構文自体は非常に分かりやすいかと思います。<code>expression</code>が<code>pattern1</code>に該当する場合には、式の評価結果としては<code>result1</code>となります。</p>



<h4 class="wp-block-heading"><code>case</code>式の使用例</h4>



<p class="wp-block-paragraph"><code>case</code>式の簡単な例で使い方を見てみましょう。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: haskell; title: ; notranslate">
data Fruit = Apple | Orange | Banana

fruitColor :: Fruit -&gt; String
fruitColor fruit = case fruit of
    Apple  -&gt; &quot;Red&quot;
    Orange -&gt; &quot;Orange&quot;
    Banana -&gt; &quot;Yellow&quot;
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
【関数使用結果例】
ghci&gt; fruitColor Apple
&quot;Red&quot;
ghci&gt; fruitColor Orange
&quot;Orange&quot;
ghci&gt; fruitColor Banana
&quot;Yellow&quot;
</pre></div>


<p class="wp-block-paragraph">上記例では、<code>Fruit</code>型という型を定義して、その値としては<code>Apple</code>, <code>Orange</code>, <code>Banana</code>というものを持っています。<code>fruitColor</code>関数は、<code>Fruit</code>型の引数を受け取り、その色を返却するような関数です。</p>



<p class="wp-block-paragraph"><code>case</code>式では、関数が引数として受け取った<code>fruit</code>の値をその後に記載したパターンに合わせて、文字列が変化していることが分かるかと思います。</p>



<p class="wp-block-paragraph">Haskellの<code>case</code>式では、パターンにマッチさせることも可能であることに冒頭で少し触れました。少し複雑な例を見てみましょう。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: haskell; title: ; notranslate">
data Shape = Circle Float | Rectangle Float Float

area s = case s of
    (Circle r) -&gt; pi * r * r
    (Rectangle w h) -&gt; w * h
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
【関数使用結果例】
ghci&gt; area (Circle 5)
78.53982
ghci&gt; area (Rectangle 2 5)
10.0
</pre></div>


<p class="wp-block-paragraph">上記例の<code>Shepe</code>型は、 円(<code>Circle</code>)または矩形(<code>Rectangle</code>)を表すようなデータ型になっており、どちらであるかで持っている値の数が異なります。<code>case</code>式のパターンでは、円であれば<code>(Circle r)</code>、<code>(Rectangle w h)</code>といったようにパターンによってマッチさせて、値を使った計算式とすることが可能です。</p>



<p class="wp-block-paragraph">このように、Haskellの<code>case</code>式では値の一致やパターンマッチにより条件分岐させることが可能です。</p>



<h3 class="wp-block-heading">関数の引数に対するパターンマッチと<code>case</code>式の違い</h3>



<p class="wp-block-paragraph">Haskellの関数では、引数に対してパターンマッチさせて実装することが可能です。関数の引数に対するパターンマッチについては「<a href="https://haskell-tech.nkhn37.net/haskell-function-pattern-match/" target="_blank" rel="noreferrer noopener">関数におけるパターンマッチ</a>」でまとめていますので参考にしてください。</p>



<p class="wp-block-paragraph">例えば上記で紹介した<code>area</code>関数は、関数の引数のパターンマッチとして以下の<code>area'</code>関数のように書くことも可能です。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: haskell; title: ; notranslate">
data Shape = Circle Float | Rectangle Float Float
 
area&#039; :: Shape -&gt; Float
area&#039; (Circle r) = pi * r * r
area&#039; (Rectangle w h) = w * h
</pre></div>


<p class="wp-block-paragraph">関数の引数のパターンマッチと<code>case</code>式の違いは、引数に対してパターンを定義するのか、関数内の特定の式に対して行うかという点です。では、どちらを使用するかということになると思いますが、これは解決したい問題によりよく検討する必要があります。</p>



<p class="wp-block-paragraph">関数のパターンマッチは、引数の型や構造に密接に関連して関数の振る舞いが決まるような場合に特に有用です。汎用的で再利用可能な関数を作成するのに適しています。一方で、<code>case</code>式は特定の関数内でのみ必要な複雑な条件分岐のロジックを実装する場合に適しています。</p>



<p class="wp-block-paragraph">最終的にどちらの方法を選択するかは、特定の問題の文脈やコードの可読性、保守性などを十分に考慮して決める必要があります。よりシンプルで直感的な方法を選択できると良いでしょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">Haskellの関数における<span class="marker"><strong><code>case</code>式</strong></span>の使い方の基本について解説しました。</p>



<p class="wp-block-paragraph">Haskellの<code>case</code>式は、C/C++等の<code>switch case</code>のような条件分岐に近い概念ですが、より強力なものです。<code>case</code>式では値によって評価して分岐するだけではなく、パターンによってマッチさせることも可能であり、より表現力が高くなります。</p>



<p class="wp-block-paragraph">本記事では、<code>case</code>式の使い方の基本を例を使って紹介しました。また、関数の引数におけるパターンマッチとの違いや使い分けについても説明しています。</p>



<p class="wp-block-paragraph"><code>case</code>式は、Haskellの関数定義の表現力を上げるために重要なものになるため、是非使い方を覚えてもらえたらなと思います。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-haskell-tech wp-block-embed-haskell-tech"><div class="wp-block-embed__wrapper">
https://haskell-tech.nkhn37.net/haskell-introduction/
</div></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://haskell-tech.nkhn37.net/haskell-function-case/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: haskell-tech.nkhn37.net @ 2026-07-26 09:17:01 by W3 Total Cache
-->