Scala-pattern-matching
Scala-パターンマッチング
パターンマッチングは、関数値とクロージャに次いで、Scalaで2番目に広く使用されている機能です。 Scalaは、メッセージの処理において、パターンマッチングの優れたサポートを提供します。
パターンマッチには、キーワード case で始まる一連の選択肢が含まれます。 それぞれの選択肢には*パターン*と1つ以上の*式*が含まれ、パターンが一致した場合に評価されます。 矢印記号⇒は、パターンを式から分離します。
次のサンプルプログラムを試してください。これは、整数値と照合する方法を示しています。
例
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
出力
caseステートメントを含むブロックは、整数を文字列にマップする関数を定義します。 matchキーワードは、関数(上記のパターンマッチング関数など)をオブジェクトに適用する便利な方法を提供します。
異なるタイプのパターンに対して値を照合する次のプログラム例を試してください。
例
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
出力
ケースクラスを使用したマッチング
- caseクラス*は、case式とのパターンマッチングで使用される特別なクラスです。 構文的には、これらは特別な修飾子を持つ標準クラスです:ケース。
以下を試してください。これは、ケースクラスを使用した単純なパターンマッチングの例です。
例
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
出力
caseキーワードを追加すると、コンパイラーは多くの便利な機能を自動的に追加します。 このキーワードは、パターンマッチングにおけるケース式との関連付けを示唆しています。
まず、コンパイラーはコンストラクター引数を不変フィールド(vals)に自動的に変換します。 valキーワードはオプションです。 可変フィールドが必要な場合は、varキーワードを使用します。 したがって、コンストラクター引数リストはより短くなりました。
第二に、コンパイラは、コンストラクタ引数として指定されたフィールドを使用する* equals、hashCode、および *toString メソッドをクラスに自動的に実装します。 したがって、独自のtoString()メソッドは必要なくなりました。
最後に、定義する必要のあるメソッドがないため、 Person クラスの本体も空になります!