MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Rustの基礎 - 条件分岐のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Rustの基礎 - 条件分岐
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Rustのif文は式 (expression) であり、値を返すことができる。<br> 条件式は波括弧{}で囲まれたブロックで記述する。<br> <br> 条件式に括弧()を付ける必要はないが、条件式は必ずbool型でなければならない。<br> <br><br> == if式 / if-else式の条件分岐 == 条件式Aが成立するなら実行コードAが実行され、成立しないならば実行コードBが実行される。<br> <syntaxhighlight lang="rust"> if 条件式A { 実行コードA } else { 実行コードB } </syntaxhighlight> <br> <syntaxhighlight lang="rust"> fn main() { let hungry = true; if hungry { println!("I want to eat something!"); } else { println!("I am full."); } } // 出力 I want to eat something! </syntaxhighlight> <br> Rustのif式は値を返すことができるため、let文で変数に代入することができる。<br> <syntaxhighlight lang="rust"> fn main() { let hungry = true; let message = if hungry { "I want to eat something!" } else { "I am full." }; println!("{}", message); } // 出力 I want to eat something! </syntaxhighlight> <br><br> == else if式を使用した条件分岐 == 条件式Aが成立すれば実行コードA、成立していなければ条件式Bが検証され成立していれば実行コードB、いずれの条件も成立していなければ実行コードCが実行される。<br> 検証したい条件が更に必要であれば、else if式を必要な分だけ記述する。<br> <br> <u>Rustにはswitch文の代わりにmatch式という強力なパターンマッチング機能がある。</u><br> <u>複数の値を比較する場合は、match式の使用を推奨する。</u><br> <syntaxhighlight lang="rust"> if 条件式A { 実行コードA } else if 条件式B { 実行コードB } else { 実行コードC } </syntaxhighlight> <br> <syntaxhighlight lang="rust"> fn main() { let code = "Swift"; if code == "Python" { println!("I want to learn Django!"); } else if code == "PHP" { println!("I want to learn WordPress!"); } else if code == "Swift" { println!("I want to learn how to make iPhone apps."); } else { println!("I'm going out for a walk."); } } // 出力 I want to learn how to make iPhone apps. </syntaxhighlight> <br><br> == match式を使用した条件分岐 == Rustでは、switch文の代わりに <code>match</code> 式を使用する。<br> match式は、全てのパターンを網羅する必要がある。<br> 全てのパターンを列挙しない場合は、ワイルドカードパターン(<code>_</code> : C/C++のdefault)を使用する。<br> <syntaxhighlight lang="rust"> fn main() { let code = "Swift"; match code { "Python" => println!("I want to learn Django!"), "PHP" => println!("I want to learn WordPress!"), "Swift" => println!("I want to learn how to make iPhone apps."), _ => println!("I'm going out for a walk."), } } // 出力 I want to learn how to make iPhone apps. </syntaxhighlight> <br> match式も値を返すことができる。<br> <syntaxhighlight lang="rust"> fn main() { let code = "Swift"; let message = match code { "Python" => "I want to learn Django!", "PHP" => "I want to learn WordPress!", "Swift" => "I want to learn how to make iPhone apps.", _ => "I'm going out for a walk.", }; println!("{}", message); } // 出力 I want to learn how to make iPhone apps. </syntaxhighlight> <br> 複数のパターンを同時にマッチさせる場合は、<code>|</code> 演算子を使用する。<br> <syntaxhighlight lang="rust"> fn main() { let code = "Python"; match code { "Python" | "Ruby" => println!("Script language!"), "C" | "C++" | "Rust" => println!("Systems programming language!"), _ => println!("Other language!"), } } // 出力 Script language! </syntaxhighlight> <br> 範囲を使用したパターンマッチも可能である。<br> <syntaxhighlight lang="rust"> fn main() { let number = 13; match number { 1..=10 => println!("1から10の範囲内"), 11..=20 => println!("11から20の範囲内"), _ => println!("範囲外"), } } // 出力 11から20の範囲内 </syntaxhighlight> <br><br> == if文の入れ子構造 == 条件の変数を2つ用意(複数条件)して、if式を入れ子構造で記述することができる。<br> <br> <u>Rustでは波括弧{}でブロックが明確に定義されているため、インデントは任意だが、可読性のために適切にインデントすることが推奨される。</u><br> <syntaxhighlight lang="rust"> fn main() { let code = "Swift"; if code == "Python" { println!("I want to learn Django!"); } else { if code == "PHP" { println!("I want to learn WordPress!"); } else { if code == "Swift" { println!("I want to learn how to make iPhone apps."); } else { println!("I'm going out for a walk."); } } } } // 出力 I want to learn how to make iPhone apps. </syntaxhighlight> <br> ただし、入れ子構造が深くなる場合は、else if式を使用した方が可読性が高い。<br> <syntaxhighlight lang="rust"> fn main() { let code = "Swift"; if code == "Python" { println!("I want to learn Django!"); } else if code == "PHP" { println!("I want to learn WordPress!"); } else if code == "Swift" { println!("I want to learn how to make iPhone apps."); } else { println!("I'm going out for a walk."); } } // 出力 I want to learn how to make iPhone apps. </syntaxhighlight> <br><br> == 論理演算子を使用した複数条件 == 複数の条件を組み合わせる場合は、論理演算子を使用する。<br> * && *: AND演算子 (両方の条件が真の場合に真) * || *: OR演算子 (いずれかの条件が真の場合に真) * ! *: NOT演算子 (条件を反転) <syntaxhighlight lang="rust"> fn main() { let hungry = true; let has_money = true; if hungry && has_money { println!("レストランに行きましょう!"); } else if hungry && !has_money { println!("家で食事をしましょう。"); } else { println!("まだ食事の時間ではありません。"); } } // 出力 レストランに行きましょう! </syntaxhighlight> <br> <syntaxhighlight lang="rust"> fn main() { let age = 20; let has_license = true; if age >= 18 || has_license { println!("運転できます。"); } else { println!("運転できません。"); } } // 出力 運転できます。 </syntaxhighlight> <br><br> == if let式による簡潔なパターンマッチ == Option型やResult型などの値を扱う場合、<code>if let</code> 式を使用すると簡潔に記述できる。<br> <syntaxhighlight lang="rust"> fn main() { let some_value: Option<i32> = Some(10); if let Some(x) = some_value { println!("値は{}です", x); } else { println!("値はありません"); } } // 出力 値は10です </syntaxhighlight> <br> これは、以下に示すmatch式と同等である。<br> <syntaxhighlight lang="rust"> fn main() { let some_value: Option<i32> = Some(10); match some_value { Some(x) => println!("値は{}です", x), None => println!("値はありません"), } } // 出力 値は10です </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Rust]]
Rustの基礎 - 条件分岐
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse