5
5
<!-- possible options. Also, conditions can get quite complex. Rust -->
6
6
<!-- has a keyword, `match`, that allows you to replace complicated `if`/`else` -->
7
7
<!-- 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 ` のグループをさらに強力なもので置き換えられます。
11
10
以下の例を見てみましょう:
12
11
13
12
``` rust
@@ -42,7 +41,7 @@ match x {
42
41
<!-- enforces ‘exhaustiveness checking’. Do you see that last arm, the one with the -->
43
42
<!-- underscore (`_`)? If we remove that arm, Rust will give us an error: -->
44
43
` match ` を使う利点は何でしょうか? いくつか有りますが、
45
- まず一つ目としては ` match ` をつかうことで, 「完全性チェック」が実施されます。
44
+ まず一つ目としては ` match ` をつかうことで、 「完全性チェック」が実施されます。
46
45
上のコードで、最後のアンダースコア( ` _ ` )を用いている分岐があるのがわかりますか?
47
46
もし、その分岐を削除した場合、Rustは以下の様なエラーを発生させます:
48
47
@@ -60,10 +59,10 @@ error: non-exhaustive patterns: `_` not covered
60
59
言い換えると、Rustは値を忘れていることを伝えようとしているのです。
61
60
なぜなら ` x ` は整数であるため、Rustは ` x ` は多くの異なる値を取ることができることを知っています。
62
61
例えば、 ` 6 ` などがそれにに当たります。
63
- もし ` _ ` がなかった場合、 ` 6 ` にマッチする分岐が存在しない異なります 、そのためRustはコンパイルを通しません。
62
+ もし ` _ ` がなかった場合、 ` 6 ` にマッチする分岐が存在しない事になります 、そのためRustはコンパイルを通しません。
64
63
` _ ` は「全てキャッチする分岐」のように振る舞います。
65
64
もし他の分岐がどれもマッチしなかった場合、 ` _ ` の分岐が実行されることになります、
66
- この全てキャッチする分岐が存在するため 、 ` x ` が取り得るすべての値について分岐を持っていることなり 、コンパイルが成功します。
65
+ この「全てキャッチする分岐」が存在するため 、 ` x ` が取り得るすべての値について対応する分岐が存在することになり 、コンパイルが成功します。
67
66
68
67
<!-- `match` is also an expression, which means we can use it on the right-hand -->
69
68
<!-- side of a `let` binding or directly where an expression is used: -->
@@ -90,7 +89,7 @@ let number = match x {
90
89
91
90
<!-- Another important use of the `match` keyword is to process the possible -->
92
91
<!-- variants of an enum: -->
93
- ` match ` の他の重要な利用方法としてはenumの取り得るバリアントを処理することがあります :
92
+ ` match ` の他の重要な利用方法としては列挙型のバリアントを処理することがあります :
94
93
95
94
``` rust
96
95
enum Message {
@@ -117,14 +116,13 @@ fn process_message(msg: Message) {
117
116
<!-- Again, the Rust compiler checks exhaustiveness, so it demands that you -->
118
117
<!-- have a match arm for every variant of the enum. If you leave one off, it -->
119
118
<!-- will give you a compile-time error unless you use `_`. -->
120
- 繰り返しますが、Rustコンパイラは完全性のチェックを行い、enumのすべてのバリアントに対して、
121
- マッチする分岐が存在することを要求します。
119
+ 繰り返しになりますが、Rustコンパイラは完全性のチェックを行い、列挙型のすべてのバリアントに対して、マッチする分岐が存在することを要求します。
122
120
もし、一つでもマッチする分岐のないバリアントを残している場合、 ` _ ` を用いなければコンパイルエラーが発生します。
123
121
124
122
<!-- Unlike the previous uses of `match`, you can’t use the normal `if` -->
125
123
<!-- statement to do this. You can use the [`if let`][if-let] statement, -->
126
124
<!-- 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 ` の短縮形と捉えることができます。
129
127
130
128
[ if-let ] : if-let.html
0 commit comments