#enum
列挙型とは、複数の変数の内、どれか一つをとるデータ型です。
enumの中身によって処理を分岐させるmatch演算子もセットで覚えましょう。
// プログラミング言語の選択肢
enum Language {
Rust,
C,
VBA,
Python,
Haskell,
LISP,
}
fn main(){
let my_language = Language::Rust; // Rustを選択する。
// これはmatch構文。
// my_languageの値によって異なる文字列を返す。
let output = match my_language {
Language::Rust => "Rustは私が勉強しているプログラミング言語です。",
Language::C => "Cは以前使ったことがあるプログラミング言語です。",
Language::Python => "Pythonはとても便利だという噂だが、私は電卓以外の用途で使ったことがありません。",
_ => "その言語はよくわかりません",
};
println!("{}", output); // "Rustは私が勉強しているプログラミング言語です。"が表示される。
}
列挙型の定義は以下のように書きます。
enum
列挙体の名前
{
ヴァリアント
}
ヴァリアントはカンマで区切って複数回書くことが出来ます。
#match
上記コードのこの部分に注目してください。
// これはmatch構文。
// my_languageの値によって異なる文字列を返す。
let output = match my_language {
Language::Rust => "Rustは私が勉強しているプログラミング言語です。",
Language::C => "Cは以前使ったことがあるプログラミング言語です。",
Language::Python => "Pythonはとても便利だという噂だが、私は電卓以外の方法で使ったことがありません。",
_ => "その言語はよくわかりません",
};
ここでmatch演算子を使って処理を分岐させています。
Language::Rustの場合、Language::Cの場合・・・と順番にmy_languageとマッチするか判定し、マッチしたら=>
の右側に書かれているコードを実行します。
matchは式なので、値を返します。関数と同じように、最後に書かれた式やデータが戻り値となります。
まとめると、my_language
の中身によって異なる文字列をoutput
に束縛するコードということになります。
matchは以下のように書きます。
match
分岐の判定に使うデータ
{
パターン
=>
マッチした場合のコード
パターン
=>
マッチした場合のコード
・・・
}
パターンとコードの組(アームといいます)はいくつあっても良いのですが、すべてのパターンを網羅する必要があります。
そのため、すべてのパターンを列挙するか、あらゆるデータにマッチするパターンを末尾に書かなければいけません。