前回の記事では、PythonとRustで「四則演算と変数の基礎」を比較しました。今回はその続きとして、「比較演算子」と「条件分岐(if文)」をテーマにします。

Pythonのif文については、以前Pythonでif文を使うという記事で詳しく書きました。今回はそちらの内容を土台にしつつ、「同じ処理をRustで書くとどう変わるのか」という比較に重点を置いていきます。Pythonのif文の基本をじっくり確認したい方は、先に上の記事を読んでいただくとスムーズです。

また、この記事は算数の「等式・不等式」の復習も兼ねています。せっかくなので基礎から確認していきます。

算数の復習:等式と不等式

まずは記号の確認をします。

読み方算数、数学の記号プログラムの記号
AはBより大きい\(A > B\)a > b
AはBより小さい\(A < B\)a < b
AはB以上\(A \ge B\)a >= b
AはB以下\(A \le B\)a <= b
AとBは等しい\(A = B\)a == b
AとBは等しくない\(A \neq B\)a != b

ここで注意すべき点は「等しい」の記号です。算数では\(A = B\)とイコールを1つ書きますが、プログラムでは a == b とイコールを2つ書きます。これはプログラミングの世界でイコール1つは、「代入する」という意味で使われるからです。

そしてもう一つ大事なのが、これらの比較を行った結果です。\(10 > 3\) は正しいので「真(True)」、\(3 > 10\)は間違っているので「偽(False)」という値が返ってきます。この2種類しかない値を真偽値(ブール値)と呼びます。

プログラムはこの真偽値を見て、「真ならこっちの処理、偽ならこっちの処理」と道を分けています。これが条件分岐(if文)の仕組みです。

では、実際にやってみましょう。

Pythonでの比較演算子と条件分岐

Google Colaboratory (Colab)を開いて新しいノートブックを作り、次のコードを入力します。

# 比較演算子の確認
a = 10
b = 3

# 比較の結果は True(真)かFalse(偽)で返ってくる
print(a == b) # False: a と b は等しいか
print(a != b) # True: a と b は等しくないか
print(a > b) # True: a は b より大きいか
print(a < b) # False: a は b より小さいか
print(a >= b) # True: a は b 以上か
print(a <= b) # False: a は b 以下か

# if文による条件分岐
score = 85 # テストの点数

# 最初に満点かどうかを確認する
if score == 100:
  print("満点です")
# そうでなく90点以上ならSランク
elif score >= 90:
  print("Sランクです")
# そうでなく80点以上ならAランク
elif score >= 80:
  print("Aランクです")
# どれにも当てはまらない場合
else:
  print("もう少し頑張りましょう")

とセルに入力して実行してみましょう。すると結果は

False
True
True
False
True
False
Aランクです

のように表示されます。

プログラムの解説(Python)

比較演算子(2~11行目): 変数a に10、 b に3を代入し、6種類の比較演算子を試しています。比較の結果は必ず TrueFalse のどちらかになります。なお、 = が代入で == が比較という違いは前述のとおりです。
条件分岐(14~27行目): score に85を代入し、上から順に条件式を判定していきます。まず score == 100 は偽なので飛ばされ、次のscore >= 90 も偽なので飛ばされ、score >= 80が真になるので「Aランクです」と出力されます。ここで判定は終了するので、 else の処理は実行されません。
条件式の順番(17行目): score == 100 を一番上に書いてあるのは理由があります。もし elif score >= 90 より後ろに書くと、score が100のときに先に score >= 90 が真になってしまい、score == 100 の行は永遠に実行されません。条件式は上から順に判定されるので、順番そのものが処理結果を変えます。

Rustでの比較演算子と条件分岐

同じ処理をRustで書くとこのようになります。

fn main() {
    // 比較演算子の確認
    let a: i32 = 10;
    let b: i32 = 3;
    
    // 比較の結果は true か false で返ってくる
    // PythonのTrue/Falseと違い、Rustではすべて小文字で書く
    println!("{}", a == b); // false
    println!("{}", a != b); // true
    println!("{}", a > b); // true
    println!("{}", a < b); // false
    println!("{}", a >= b); // true
    println!("{}", a <= b); // false
    
    let score: i32 = 85; // テストの点数
    
    // 比較の結果をそのまま変数に入れることができる
    // この時の型は bool(ブール)型になる
    let is_perfect: bool = score == 100;
    println!("満点かどうか: {}", is_perfect); // false
    
    // if文による条件分岐
    // 最初に満点かどうかを確認する
    if score == 100 {
        println!("満点です");
    // そうでなく90点以上ならSランク
    } else if score >= 90 {
        println!("Sランクです");
    // そうでなく80点以上ならAランク
    } else if score >= 80 {
        println!("Aランクです");
    // どれにも当てはまらない場合
    } else {
        println!("もう少し頑張りましょう");
    }
    
    // Rustのifは式なので、判定結果を変数に入れられる
    let rank = if score >= 80 { "合格" } else { "不合格" };
    println!("判定: {}", rank); // 合格
}


実行すると結果は

false
true
true
false
true
false
満点かどうか: false
Aランクです
判定: 合格

のように表示されます。

プログラムの解説(Rust)

比較演算子(3~13行目): 比較演算子の記号(== !=><>=<=)はPythonと共通なので、新しく覚えることはありません。違うのは真偽値の書き方で、PythonはTrue/Falseと頭文字が大文字ですが、Rustはtrue/falseとすべて小文字です。
bool型(19~20行目): let is_perfect: bool = score == 100; では、score == 100という比較の結果をそのままbool型の変数に入れています。
条件分岐(24~35行目): Pythonと比べて違う点が2つあります。
1つ目はelifelse if かという書き方の差です。Pythonでは elif と省略しますが、Rustではelse if と2語に分けて書きます。
2つ目は処理のまとまりの表し方です。Pythonはインデントで範囲を示しますが、Rustは波括弧{}で囲みます。
ifは式(38行目): 最後のlet rank = if score >= 80 { "合格" } else { "不合格" }; はRustならではの書き方です。Rustではif が式として扱われるので、if文の結果をそのまま変数に代入できます。波括弧の中の"合格" の末尾にセミコロン; が付いていないのがポイントで、これが「この値を返す」という意味になります。

まとめ

今回分かった一番の違いは elifelse if です。処理の中身は全く同じなのに書き方だけが違うので、Pythonから移ってくるときは気を付けたい部分です。

  • 比較演算子はPythonとRustで全く同じ記号。
  • = は代入、 == は比較。算数とは違うので注意。
  • 真偽値の表記はPythonが True/False、Rustが true/false (小文字)
  • 条件分岐はPythonが elif 、Rustが else if (2語)
  • Pythonはインデントで処理のまとまりを示し、Rustでは {} で示す。
open-in-colab

今回はこれで終了です。
今回のサンプルを用意したので、もし必要な場合は上の「Open in Colab」と書いてあるボタンをクリックしてください。なおそのままだと編集不可なので編集をしたい場合は「ドライブにコピー」をクリックしてコピーしてください。
なおGoogle ColaboratoryについてわからなかったらGoogleColaboratoryを使ってみよう_導入編をご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA