プログラマーとして、あなたは常に自分や他人が書いたコードを判断しています。理想的な世界では、コードを見ればその動作を簡単に理解できるはずです。もちろん、簡潔で明確で読みやすいことが、そのための大きな要因です。
しかし、もっと重要なのは、そのコードが本来やるべきことをしているかを確信できることです。プログラミングをしているとき、あなたは常にコードの正確性について考え、頭の中にある小さなコンパイラがエラーや間違いがないかチェックしています。
では、プログラミング言語はこの点でどのように役立つのでしょうか?
C#のような現代の命令型言語は、すでにおなじみの多くの方法を提供しています。型チェック、スコープとネーミングルール、アクセス修飾子などです。最近のバージョンでは、静的コード解析やコード契約も加わりました。
これらの技術のおかげで、コンパイラが正確性チェックの多くを担当できます。間違いがあれば、コンパイラが警告してくれます。
しかし、F#にはさらに正確性を確保するのに大きな効果を発揮する機能がいくつかあります。これから数回の投稿では、その中の4つについて詳しく見ていきます:
- イミュータビリティ(不変性):コードの振る舞いをより予測しやすくします。
- 網羅的パターンマッチング:多くのよくあるエラーをコンパイル時に捕捉します。
- 厳格な型システム:これは敵ではなく、味方です。静的型チェックをほぼ瞬時の「コンパイル時ユニットテスト」として活用できます。
- 表現力豊かな型システム:「不正な状態を表現不可能にする」*のに役立ちます。これを示す実世界の例を設計して見ていきます。
* この表現は、Jane StreetのYaron Minsky氏に感謝します。