Rubyにおけるif文の書き方やよくあるミスについて紹介
Rubyは近年注目が集まっているプログラミング言語です。
日本人にとっても扱いやすいというのがひとつの特徴ですが、if文が存在することなど、基本的な構文について他の言語と大幅に異なるというものではありません。まずはif文の基本的な書き方から始め、注意点や応用方法についても紹介していきます。
Rubyで使うif文の基本
if文は条件を指定して処理の内容を分岐させることができます。
Rubyならでは記述方法を守らなければ思い通りの処理を実行することはできませんが、ifの持つ意味については他のプログラミング言語で使用されているものと違いはありません。
まずは最も基本的な書き方から紹介していきます。
if文の記述方法
ifではまず条件の指定を行います。条件を満たしtrueを得られた場合には内部の処理を行うという流れになります。
以下が基本的なifの使い方です。
if (条件式) then
処理
end
これに具体的な条件や処理を加えてみます。
color = "red"
if (color == "red") then
print("赤です")
end
上のプログラムを実行すると、まず変数colorに文字列redが入り、その後if文の条件式で判定が行われます。
変数colorが「red」ならばtrue、それ以外であればfalseを返します。
そしてこの場合にはtrueになるため内部の処理が実行され「赤です」と表示されます。
ちなみに条件式の後ろにあるthenに重要な意味はなく、省略することもできます。カッコについても同様です。そのためカッコとthenを省略して書き換えて、以下のようにすっきりとさせることができます。
color = "red"
if color == "red"
print "赤です"
end
また、あまり使われることはありませんが、thenの使い方としてifの処理を1行に押し込むというものもあります。
color = "red"
if (color == "red") then print ("赤です") end
if文でできるようになること
ifを使えば、例えばユーザーに入力してもらった値に応じて処理内容を変えるといったことが可能になります。
上の例では色の判別でしたが、ユーザーの年齢を聞く処理を事前に行い、入力した内容を変数に代入。その変数を条件式で判定し未成年であれば処理をスルー、20歳以上なら酒類を購入できるページに遷移させる、というプログラムも組めるでしょう。
ifの中でさらに条件を定めて複雑に分岐させることなどもでき、様々な場面で応用していくことができます。複数分岐については後述します。
if文を使う際に気を付けること
ifは非常に便利で、Rubyをマスターする上で欠かすことのできないものです。基本的な構文ですが、間違いのないように使用しなければなりません。
条件の指定方法
条件式の記述ではミスが起こりやすいです。
上の例では、変数colorに入れた値がredと「等しいかどうか」が判定されています。この場合には「==」が用いられ、「=」とは記述しません。しかし「等しくないかどうか」については「!=」と記述します。さらに「以下かどうか」の判定では「<=」と記述しなければならず「=<」としてはいけません。「以上かどうか」についても同様に「=>」ではなく「>=」と記述しましょう。
論理演算子の使用
次は配列の任意の場所に要素を挿入する方法です。
条件式に論理演算子を使うとifを応用的に使うことができるようになります。||や&&、orやandを使うことで「かつ」「または」を表現でき、複数の条件をまとめることができます。ただし、演算子によって優先順位が決まっておりorよりも||、andよりも&&が優先されるため注意して使う必要があります。
また、&&と||の関係においても&&が優先されるというと特徴があります。そのため、
a && b || c
これは、
( a && b ) || c
と解釈することになります。
Rubyでのif文で複数分岐させる
ifを使う際、単独の条件分岐だけでなく、複数の条件分岐を使って処理を分けたい場面があります。
そこでelsifやelseなどを使っていきます。他の多くのプログラミング言語で使われている「elseif」とは異なり「elsif」である点に注意して記述しましょう。elseのeがなくなっています。基本的な使用例は以下のようになります。
if 条件式1 then
処理1
elsif 条件式2 then
処理2
else
処理3
end
最初に条件式1で判定が行われます。
ここでtrueの場合には処理1が行われます。しかし最初の判定でfalseとなって場合にはelsifの後ろにある条件式2で判定をするようになります。
ここでtrueなら処理2へと進むことができますが、falseであれば同様に下へと流れていきます。
そしてelseまで到達すると条件式が指定されていないことが分かると思います。
これは何の判定も行われずどのケースであっても処理3が実行されることを意味します。具体的な値を入れてみましょう。
color = "red"
if color == "white" then
print "白"
elsif color == "blue" then
print "青"
else
print "白と青ではありません"
end
この場合、変数colorにはredが入り、条件式のいずれにも該当しません。そのためひとつめの処理、ふたつめの処理はスルーされ、最終的にelseの下にある処理が実行され「白と青ではありません」が出力されます。
処理終了のタイミングを理解する
上記の複数分岐の処理をさせるプログラムにおいて、colorにwhiteが代入されていた場合にはどのような挙動を起こすのでしょうか。当然、最初の条件式でtrueが得られすぐに真下の処理が実行、「白」という文字が出力されます。
しかし、その後の処理において再び条件式で判定が行われることはありません。trueになり処理が行われた時点でifからは抜けることとなります。
もしtrueとなった後もifから抜け出すことができなければ、続くelsifの判定ではfalseになるものの最後のelse直下の処理は実行されてしまいます。
まとめ
forは条件を設定して実行する処理を分岐することができます。複数の条件をひとつにまとめることや、複数の分岐をさせることも可能です。Rubyにおけるifではカッコやthenが省略できるなど、シンプルに記述ができるという特徴があります。しかしelsifなど、細かな記述方法でミスのないようよく確認しながらプログラムを組んでいくようにしましょう。
TECH PLAYでは、エンジニアの方向けに勉強会・イベント情報を提供しています。
ご興味のある方はぜひご参加ください。