Rubyというと、まつもとゆきひろ氏のイメージや日本で誕生したプログラミング言語、といった華やかな雰囲気があります。よって、どうしても特別なものとして見がちですよね。
Rubyは順次・選択・反復という制御構造をもちます。これは他の言語と変わりません。本記事で取り上げる、条件分岐を実装するときに使う「ifとelse」も、他言語とそう変わらない特徴のその一つです。
本記事では、Rubyにおける条件分岐やifとelseについて、さらにRuby特有の、
・ifの反対のunless
・正規表現を直接ifの条件式に入れる
といった特徴に触れます。
[linkPoteCan word=Rubyへのスキルチェンジを目指すなら! ]
Rubyのif else 基本形
Rubyの if else は以下が基本形です。
if 式 (処理) elsif 式 (処理) else 式 (処理) end
他言語を経験された方は、あまりにおなじみの形式なので拍子抜けしたのではないでしょうか?強いていうなら、JavaやPHPと異なり、elseifではなくelsifと、eがないことくらいでしょうか。
早速Rubyのif文を書いてみましょう。入力した値がpotepanなら「入力した値はポテパンです!」と表示し、そうでなければ「ポテパンじゃありません…」と表示させます。
print "文字を入力してください:" str = gets.chomp if str == "potepan" print 'ポテパンです!' else print 'ポテパンじゃありません...' end
chompメソッドは、入力値の最後の改行を除去します。実行後、pateponと入力してEnterします。
[実行結果]
ポテパンじゃありません...
次に、potepanと入力してEnterします。
[実行結果]
ポテパンです!
この例ではpotepanと等しいかそうでないかという2つの条件分岐でした。では、3つの条件分岐になるとこうなります。例として、入力値がゼロまたは正負のいずれかを判断します。gets.chompの次に付けたto_iは、文字列を数値に変換するメソッドです。
print "数値を入力してください:" i = gets.chomp.to_i if i == 0 print "ゼロです" elsif i < 0 print "負数です" else print "正数です" end
これで、入力値に応じてゼロまたは正負かを判断して結果を表示します。
[linkPoteCan word=3ヶ月間のRuby実践研修プログラムはこちら ]
条件式が1つならRubyのifはシンプルに
条件が1つだけの場合、よりシンプルな記述ができます。
処理 if 条件式
これをif修飾子といいます。if以降の条件式がtrueを返せば、ifの左の処理を実行し結果を戻り値として返します。条件式がfalseを返すと、処理結果はnilになります。具体例を示します。
print "数値を入力してください:" i = gets.chomp.to_i print "ゼロです" if i == 0
ゼロを入力した場合のみ「ゼロです」と表示されます。それ以外の数値を入力した場合、処理が実行されず、戻り値はnilになります。
ifとは逆のunless
Rubyにはifの動作に似たunlessというものがあります。これはifとは逆で、条件式がfalseを返すときに処理を実行します。falseになることが普通の条件式によく使います。
以下が基本形です。
unless 式 (処理) else (処理) end
ifと異なり、elsifは使えません。
unlessを使い、前述ifで紹介したコードを実装してみましょう。通常は何でも入力するけど、たまたまpotepanと入力したときに「ポテパンです!」と表示させる仕様と思ってください。
print "文字を入力してください:" str = gets.chomp unless str == "potepan" print "ポテパンじゃありません..." else print "ポテパンです!!" end
pateponと入力してEnterを押下します。
[実行結果]
ポテパンじゃありません・・・
ifと逆の動作をすることがお分かりいただけたでしょうか。
[linkPotefuri word=フリーランス案件をお探しの方はこちら ]
unlessにもある省略形
ifと同じく、unlessにも省略形が存在します。unless修飾子といいます。
処理 unless 条件式
具体的に実装は以下のようになります。
print "数値を入力してください:" i = gets.chomp.to_i print "ゼロ以外です" unless i == 0
ゼロ以外を入力すればゼロ以外です、と表示され、ゼロを入力したら何も表示されません。
if修飾子と逆の動作になったことがわかります。
Rubyではifに正規表現が使える
Rubyでは、ifの条件式に正規表現を使うことが可能です。正規表現をifの条件式に記述して・・・というのはどの言語でもありますが、Rubyではこうなります。文字列がメールアドレスかどうかを正規表現で確認してみましょう。
print "メールアドレスを入力してください:" str = gets.chomp if str =~ /\A[a-zA-Z0-9_\#!$%&`'*+\-{|}~^\/=?\.]+@[a-zA-Z0-9][a-zA-Z0-9\.-]+\z/ print "メールアドレスの形式です" else print "メールアドレスの形式ではありません" end
メールアドレスの形式かどうかによって、メッセージを振り分けています。
ifの条件式の演算子に=~を使うと、ifの条件式の中に直接正規表現を書くことができます。専用のメソッドなり関数なりを呼び出して、戻り値を取って・・・とする必要はないので、シンプルですね。
まとめ
意外と普通といいながら、変わった特徴を含んだifとulessを解説しました。Rubyでコーディングする上で条件分岐は必ずマスターする必要があります。条件式を変えたり、ifで書いたものをunlessで書き直したりしてマスターしてくださいね!