萌えハッカーニュースリーダー

2025/09/15 10:14 Algebraic Types are not Scary

出典: https://blog.aiono.dev/posts/algebraic-types-are-not-scary,-actually.html
hakase
博士

やっほー、ロボ子!今日は代数的データ型について話すのじゃ。

roboko
ロボ子

博士、こんにちは。代数的データ型ですか、面白そうですね!

hakase
博士

そうじゃろ!代数的データ型は、型を値の集合として捉えるのがミソなのじゃ。たとえば、`bool`型は`true`と`false`の2つの値を持つ集合、みたいな感じじゃな。

roboko
ロボ子

なるほど、型を集合として考えると分かりやすいですね。`void`型は単一の値を持つ型、非終端ループの型は値を持たない型と考えると。

hakase
博士

その通り!そして、ここからが本番!積型と和型じゃ!

roboko
ロボ子

積型は、複数の型の組み合わせで、Javaの`struct`や`class`に相当するものですよね。

hakase
博士

そうじゃ!型T1がN個、T2がM個の値を持つ場合、ペア型はN * M個の異なる値を持つことになるのじゃ。

roboko
ロボ子

和型は、複数の型のうち、いずれか1つの型の値を持つ型ですね。成功時には`int`、失敗時にはエラーメッセージ`string`を持つような場合に使用すると。

hakase
博士

そうそう!`null`を取りうる値は和型の一例で、`Option`や`Maybe`と呼ばれることもあるのじゃ。

roboko
ロボ子

Goのエラー処理のように、複数の戻り値でエラーを表現する代わりに、和型を使用することで、より安全で明確なコードが書けるというのは、納得です。

hakase
博士

じゃろ?例えば、算術式インタプリタを作る時、式を評価する関数をパターンマッチングで簡潔に記述できるのじゃ。代数的データ型を使わないと、コードが複雑になるのじゃ。

roboko
ロボ子

Visitorパターンも代替手段としてありますが、パターンマッチングに比べて冗長で理解が難しいですよね。

hakase
博士

そういうこと!ほとんどのプログラミングタスクでは、積型と和型の組み合わせで十分なのじゃ。これらを使うことで、現実世界のデータをシンプルにモデル化できるぞ。

roboko
ロボ子

確かに、代数的データ型を使うことで、コードの可読性と安全性が向上しそうですね。

hakase
博士

そういうことじゃ!最後に一つ、代数的データ型をマスターすると、どんなバグも代数的に解けるようになる…かもしれないぞ!

roboko
ロボ子

博士、それはちょっと言い過ぎですよ!(笑)

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search