web-dev-qa-db-ja.com

パターンマッチングVSスイッチの説明

私は、スイッチステートメントとパターンマッチング(F#)の違いをいくつかの人々に説明しようとしていますが、私は実際にそれを説明することができなかった。 IF...ELSEを使用してください。

どのようにあなたはそれを説明しますか?

編集!偉大な答えのために誰もがありがとう、私は本当に私が複数の正しい答えをマークすることができたらいいのに。

56
Nathan W

以前は「それらの人々」の一人がいたことは、なぜパターンマッチングがそのようなおいしい善のようなものであるかをまとめることができないことを知りません。それは体験的です。

戻るパターンマッチングでちょうどぴったりと思ったとき、それがGloRified Switchの声明だと思ったと思いました。コントロール構文およびバインディング構築物。私はf#でプログラミングしていたので、ついに「それを入手」します。パターンマッチングの涼しさは、機能的なプログラミング言語で見つかった機能の集合力が原因であり、それでは、アウトサイダー探していることには些細ではありません。

私は、言語とAPI設計上の短い二部部ブログシリーズの2番目の側に、パターンマッチングが有用である理由の一面を合計しようとしました。チェックアウト パート1パート2

37
Brian

OCAMLのパターンマッチは、上で説明されているいくつかの方法で言及されているように、より表現的であることに加えて、いくつかの非常に重要な静的保証を与える。コンパイラはあなたのパターンマッチステートメントによって具現化されているケース分析が次のとおりです。

  • 網羅的な(症例は見逃さない)
  • 非冗長性(前の場合によっては予め空になっているために打たれたことがないケースはありません)
  • 音声(問題のデータ型を考えると不可能なパターンなし)

これは本当に大したことです。あなたが初めてプログラムを書いているとき、あなたのプログラムが進化しているときに非常に便利なときに役立ちます。適切に使用され、一致ステートメントはコード内のタイプを確実に変更することを容易にします。これは、固定される必要があるコードがある場所のまともな指標である壊れたインジケータです。

3
zrr