55<!-- possible options. Also, conditions can get quite complex. Rust -->
66<!-- has a keyword, `match`, that allows you to replace complicated `if`/`else` -->
77<!-- groupings with something more powerful. Check it out: -->
8- しばしば、2つ以上の可能な処理が存在するために単純な [ ` if ` ] [ if ] /` else ` では充分でない時があります。
9- また、条件が非常に複雑になる場合が有ります。
10- Rustはキーワード ` match ` を持っており、複雑な ` if ` /` else ` のグループをもっと強力なもので置き換えることができます。
8+ しばしば、2つ以上の可能な処理が存在するためや、分岐条件が非常に複雑になるために単純な [ ` if ` ] [ if ] /` else ` では充分でない場合があります。
9+ Rustにはキーワード ` match ` が存在し、複雑な ` if ` /` else ` のグループをさらに強力なもので置き換えられます。
1110以下の例を見てみましょう:
1211
1312``` rust
@@ -42,7 +41,7 @@ match x {
4241<!-- enforces ‘exhaustiveness checking’. Do you see that last arm, the one with the -->
4342<!-- underscore (`_`)? If we remove that arm, Rust will give us an error: -->
4443` match ` を使う利点は何でしょうか? いくつか有りますが、
45- まず一つ目としては ` match ` をつかうことで, 「完全性チェック」が実施されます。
44+ まず一つ目としては ` match ` をつかうことで、 「完全性チェック」が実施されます。
4645上のコードで、最後のアンダースコア( ` _ ` )を用いている分岐があるのがわかりますか?
4746もし、その分岐を削除した場合、Rustは以下の様なエラーを発生させます:
4847
@@ -60,10 +59,10 @@ error: non-exhaustive patterns: `_` not covered
6059言い換えると、Rustは値を忘れていることを伝えようとしているのです。
6160なぜなら ` x ` は整数であるため、Rustは ` x ` は多くの異なる値を取ることができることを知っています。
6261例えば、 ` 6 ` などがそれにに当たります。
63- もし ` _ ` がなかった場合、 ` 6 ` にマッチする分岐が存在しない異なります 、そのためRustはコンパイルを通しません。
62+ もし ` _ ` がなかった場合、 ` 6 ` にマッチする分岐が存在しない事になります 、そのためRustはコンパイルを通しません。
6463` _ ` は「全てキャッチする分岐」のように振る舞います。
6564もし他の分岐がどれもマッチしなかった場合、 ` _ ` の分岐が実行されることになります、
66- この全てキャッチする分岐が存在するため 、 ` x ` が取り得るすべての値について分岐を持っていることなり 、コンパイルが成功します。
65+ この「全てキャッチする分岐」が存在するため 、 ` x ` が取り得るすべての値について対応する分岐が存在することになり 、コンパイルが成功します。
6766
6867<!-- `match` is also an expression, which means we can use it on the right-hand -->
6968<!-- side of a `let` binding or directly where an expression is used: -->
@@ -90,7 +89,7 @@ let number = match x {
9089
9190<!-- Another important use of the `match` keyword is to process the possible -->
9291<!-- variants of an enum: -->
93- ` match ` の他の重要な利用方法としてはenumの取り得るバリアントを処理することがあります :
92+ ` match ` の他の重要な利用方法としては列挙型のバリアントを処理することがあります :
9493
9594``` rust
9695enum Message {
@@ -117,14 +116,13 @@ fn process_message(msg: Message) {
117116<!-- Again, the Rust compiler checks exhaustiveness, so it demands that you -->
118117<!-- have a match arm for every variant of the enum. If you leave one off, it -->
119118<!-- will give you a compile-time error unless you use `_`. -->
120- 繰り返しますが、Rustコンパイラは完全性のチェックを行い、enumのすべてのバリアントに対して、
121- マッチする分岐が存在することを要求します。
119+ 繰り返しになりますが、Rustコンパイラは完全性のチェックを行い、列挙型のすべてのバリアントに対して、マッチする分岐が存在することを要求します。
122120もし、一つでもマッチする分岐のないバリアントを残している場合、 ` _ ` を用いなければコンパイルエラーが発生します。
123121
124122<!-- Unlike the previous uses of `match`, you can’t use the normal `if` -->
125123<!-- statement to do this. You can use the [`if let`][if-let] statement, -->
126124<!-- which can be seen as an abbreviated form of `match`. -->
127- 上で説明した値に対する ` match ` の利用とはことなり、enumに対するマッチに ` if ` を用いることはできません。
128- enumに対するマッチに [ ` if let ` ] [ if-let ] 文を用いることが可能です、 ` if let ` を ` match ` の短縮形と捉えることができます。
125+ 上で説明した値に対する ` match ` の利用とは異なり、列挙型のバリアントに基いた分岐に ` if ` を用いることはできません。
126+ 列挙型のバリアントに基いた分岐に [ ` if let ` ] [ if-let ] 文を用いることが可能です、 ` if let ` を ` match ` の短縮形と捉えることができます。
129127
130128[ if-let ] : if-let.html
0 commit comments