• WebCamp_インタビュー
    「自信の持てるスキルを得たい!」内定辞退した女子大生がプログラミングを学習したワケ。
    2018.04.28
  • WebCamp_インタビュー
    「1カ月頑張ればこの先が見えてくる」地元メディアを立ち上げたママさん
    2017.07.20
  • WebCampPro_インタビュー
    自分で稼ぐ力をつけるため、新卒5年目の営業マンがエンジニアに転職!【WebCampPro転職者インタビュー】
    2018.02.02
  • WebCampPro_インタビュー
    未経験でも寿司職人からWebデザイナーになった!ホスピタリティでスクールを支える宮脇トレーナー
    2017.05.26
  • WebCamp_インタビュー
    【卒業生インタビュー】台湾で月間100万UUの訪日旅行メディアを手掛けるCEOが、プログラミングを学んで得たものとは?
    2018.01.15
  • WebCamp_インタビュー
    時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
    2018.01.26
  • WebCamp_インタビュー
    “未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
    2017.10.04
  • WebCampPro_インタビュー
    未経験31歳からエンジニア転職を実現【実際に聞いてみた】
    2017.04.01
  • WebCampPro_インタビュー
    未経験から上京し、テレビでも話題のIT企業に転職!【WebCampPro卒業生インタビュー】
    2018.03.10
  • WebCamp_インタビュー
    【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
    2018.01.15
  • WebCamp_インタビュー
    【WebCamp受講生インタビュー】起業準備中にCEOが気がついたプログラミングスキルの重要性とは?
    2017.12.25

▼当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

金王冠Web Camp【業界最安値】1ヶ月集中してプログラミングスキルを身につけられるスクール
1ヶ月通い放題・メンター常駐の教室環境でWebサービス等作りたい方
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
銅王冠Tech Camp業界最大級!教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
びっくりマークWebCampPro転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアを3ヶ月で目指すプログラミングスクールです。
7月枠も残りわずか当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
6月受入枠は満員となっております。7月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!
※プログラミングを学んでみたいけど、時間がなくて全文の記事が読めない!という方は、WebCampの無料説明会(毎日開催)に参加してみてください!

 

はじめに

サンプルプログラムに出てくる「if」が何のことだか分からない人もいるでしょう。

分かっていても、なんとなくしか知らない人もいるでしょう。

「if」は、プログラムするうえで避けることができない「条件分岐」を行う、重要なものの1つです。

ここでは、そんな「if」について詳しく解説します。

ifってなにができるの?

そもそも、プログラムの解説記事やサンプルコードを見て、「ifというのは、何だろう?」と思われてこの記事を読んでいる方もいるでしょう。

まずは、そういった方に向けて、「ifというのは、何ができるものなのか?」から説明します。

なお、最後に、Ruby独特の部分も説明しますので、すでに理解されている方も、そこだけは読まれることをおすすめします。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
2017-10-04 10:26
今回の記事では、未経験からWebCampを1ヶ月受講し、その後エンジニアとして転職をした喜田さんにお話を伺いました。 <プロフィール> 喜田 大介 さん (28歳) 大学時代はプ...

ifとelseで流れを制御する

ifというのは、すでに説明しているように、プログラムを分岐するためのものです。

そもそも、プログラムというのは、上から下へ順番に実行させるもので、記載された命令を淡々と実行しているだけにすぎません。

しかし、それでは、ある条件の場合はAという動作をして、そうでなければBという動作をする、といった条件によって動作を変えるようなことができません。

つまり、一本道しかないとても単純な動作しか表現することができないのです。

そんな「条件によって動作を変える」ためにifを利用することになります。

上述の「ある条件の場合はAという動作をして、そうでなければBという動作をする、といった条件によって動作を変える」プログラムは、ifを使えば次のように表現できるでしょう。

if ある条件a then
  (ある条件aが成立したら、)Aという動作
else
  (ある条件aが成立しなければ、)Bという動作
end

ある条件が成立すれば、ifの直下にあるAという動作が行われ、elseからendまでは無視されます。

逆に、ある条件が成立しなければ、elseまで飛んでBという動作が行われて、ifの直下にあるAという動作は無視されるわけです。

なお、「成立すれば」という部分は、多くの場合、等しいか等しくないか、大きいか小さいか、などの比較になりますので、以下の比較演算子を使うことが多いでしょう。

a == b …… aとbが等しい
a != b …… aとbが等しくない
a < b …… aがbよりも小さい
a > b …… aがbよりも大きい
a <= b …… aがb以下
a >= b …… aがb以上

また、条件が成立するかしないかではなく、3つ以上に分岐する場合は、次のように「elsif」を使ってつなげて書きます。

if ある条件 == a then
  (ある条件がaならば、)Aという動作
elsif ある条件 == b then 
  (ある条件がbならば、)Bという動作
elsif ある条件 == c then 
  (ある条件がcならば、)Cという動作 
else
  (ある条件がaでもbでもcでもなければ、)Dという動作
end

この場合でも、条件が成立しているかどうかは1度しか判断されませんので、AからDのいずれかの動作しかしないことに注意しましょう。

なお、thenは省略可能ですが、プログラムの可読性を考慮して記載しておくべき、と考えた方が良いでしょう。

例えばこんなプログラム

ifがなければ「単純な動作しかできない」と説明しましたが、具体的な例を紹介しましょう。

例えば、テレビのリモコンを考えてみましょう。

テレビのリモコンというのは、押されたボタンに合わせた波形の赤外線を送出するものです。

1chのボタンを押せば、1chを示す波形の赤外線が送出されますし、4chのボタンを押せば、4chを示す波形の赤外線が送出されます。

赤外線を受けたテレビは、受けた赤外線の波形を判断して、ボタンに合わせた局を表示することになるわけです。

このリモコンを動かすプログラムを考えてみると、「押されたボタンを判断して、それに合わせた波形の赤外線を送出する」ということになります。

もし、リモコンに1chから4chのボタンしかないとしましょう。そうなると、次のようなプログラムになります。

1chから4chのボタンを制御するリモコンのプログラム

if 1ch then
  1chの波形を送出
elsif 2ch then
  2ch の波形を送出
elsif 3ch then
  3ch の波形を送出
elsif 4ch then
  4ch の波形を送出
else
  1chから4ch以外のボタンはあり得ないので、何もしない
end

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】
2018-03-22 23:28
今回の記事では、独学でPHPを1年半学習し、その後WebCampを受講して未経験からエンジニアへと転職された佐々木さんにお話を伺いました。 <プロフィール> 佐々木 祐樹 さん(2...

もし、ifがなかったら?

前述のプログラムを、ifなしで作成するとしましょう。

どうするべきでしょうか?

ifがないわけですから、押されたボタンによって処理を分岐できません。

そのため、次のようにするしかないでしょう。

・1chのボタン用のプログラム
1chの波形を送出

・2chのボタン用のプログラム
2chの波形を送出

・3chのボタン用のプログラム
3chの波形を送出

・4chのボタン用のプログラム
4chの波形を送出

つまり、ボタンごとにプログラムを作って、あるボタンが押されたらそのボタン専用のプログラムを動かすというわけです。

これでは、ボタンの数が増えたらそれだけ多くのプログラムを作る必要がありますし、チャンネルや波形の設定変更などがあれば、すべてのプログラムを修正、テストする必要が出てきて、管理するのがたいへんになってしまうでしょう。

andとorで複数条件対応

ifの必要性が分かったところで、もう少し応用していきましょう。

例えば、最初にelsifを紹介したプログラムをもう一度見てみます。

if ある条件 == a then
  (ある条件がaならば、)Aという動作
elsif ある条件 == b then 
  (ある条件がbならば、)Bという動作
elsif ある条件 == c then 
  (ある条件がcならば、)Cという動作 
else
  (ある条件がaでもbでもcでもなければ、)Dという動作
end

このとき、じつはCという動作がAという動作と同じだった場合を考えます。

つまり、ある条件がaの場合とcの場合は同じ動作をするプログラムを作りたいわけです。

単純に考えれば、次のようになります。

if ある条件 == a then
  (ある条件がaならば、)Aという動作
elsif ある条件 == b then 
  (ある条件がbならば、)Bという動作
elsif ある条件 == c then 
  (ある条件がcならば、)Aという動作 
else
  (ある条件がaでもbでもcでもなければ、)Dという動作
end

しかしこれでは、もしAという動作にバグがあって修正する場合、2箇所の修正が必要になり、修正漏れのリスクがあります。

また、数か多くなると、どんな条件でAという動作が行われるのかが非常に分かりづらくなるでしょう。

そこで、論理演算子を使います。

論理演算子は、複数の条件を総合的に判定するもので、and(かつ)とor(もしくは)の2種類を憶えておけば、当面は問題ないでしょう。

and(かつ)は、2つの条件がともに成立した場合に成立し、or(もしくは)は、2つの条件のどちらか一方でも成立すれば、成立することを表すものです。

今回の場合、ある条件がaもしくはある条件がcの場合にAという動作を行いますので、以下のようにorを使えばうまくいきます。

if ある条件 == a or ある条件 == c then
  (ある条件がaならば、)Aという動作
elsif ある条件 == b then 
  (ある条件がbならば、)Bという動作
else
  (ある条件がaでもbでもcでもなければ、)Dという動作
end

このように、論理演算子を使うことで、ifで行う動作の記述をまとめることができますのでメンテナンス性が上がります。何より、条件分岐が分かりやすくなるため、想定外の動作やバグを防ぐことになるでしょう。この点は、プログラムを書く上で、とても重要なことなのです。

時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
2018-01-26 13:03
今回の記事では、WebCampに1ヶ月間通い、未経験からエンジニアとして転職した星野さんにお話を伺いました。 <プロフィール> 星野 智洋 さん(25) 学生時代は日本大学芸術学部...

正規表現で複数条件対応

最後に、Ruby独特とも呼べる、ifの条件に正規表現を使う方法を紹介しましょう。

正規表現というのは、文字列を扱う上で避けては通れないもので、一定の法則性のある文字列を検索する場合に重宝するものです。

例えば、次の正規表現は、「ken」という文字列を含むという意味になります。

/ken/

いくつもの名前の中から、kenを含む名前の人を探し出すような場合に有効に働くでしょう。

Rubyでは、この正規表現をifの分岐条件にできるのです。

具体的に紹介しましょう。

例えば、ユーザー名を登録するプログラムで、特定の文字(dead)が含まれるのを防ぎたい場合、userに登録したいユーザー名が入っているとすると、「=~」を使って、次のように書きます。

if user =~ /dead/ then
  print "無効な文字列が含まれています。"
end

もちろん、正規表現ではもっと複雑な文字列を扱うことができます。

いきなりでは頭が混乱するかもしれませんが、スマートにRubyを使うためにも、ぜひ、正規表現についても勉強しておきましょう。

ifのデメリットも知っておこう

プログラムの流を制御して分岐させることのできるifは、頻繁に使用するものの1つと言えます。

しかし、頻繁に使用するものだからこそ、使うべきところで使わなければいけません。

ここでは、ifを使うことによるデメリットについて、説明しましょう。

なんでもかんでも分岐すると

プログラムは、処理の流れを記述するものです。そのため、当然のように条件によって分岐します。しかし、その分岐の中には、分岐させる必要のない場合もあるのです。

例えば、次のようなプログラムを考えてみましょう。

if a > 0 then
  # 0より大きいので何もしない
elsif a < 0 then
  # 0より小さいので何もしない
else
  # 0なので処理する
end

結局、このプログラムはaが0の場合に処理がしたいわけですから、次のように書く方が分かりやすいでしょう。

if a == 0 then
  # 0なので処理する
else
  # 0なので何もしない
end

また、0でなければ何もしないのであれば、以下のようにする方が、より分かりやすくなります。

if a == 0 then
  # 0なので処理する
end

お試しでプログラムを作ると、流れを考えながら順番に作ることが多いので、最初のような冗長なものになってしまうことがよくあります。

もちろん、最初のプログラムも同じ動きをする正しいプログラムですが、読みやすさやメンテナンス性を考慮すると、余計なifを減らす方が良いものなのです。

「式が正しいかどうか」ではない

ifの条件部分には、「a == b」や「a != 0」といったものを使用することがほとんどです。

これらは、「比較演算子」を使った不等式という式であり、「a-b」や「a*b」などと同じ計算です。

ただし、比較演算子は、その結果が成り立たないのであればFalse(偽を表す値)を、そうでなければFalse以外を返すことになっている演算子です。

そのため、「条件が正しいか正しくないか」という評価を行っているように感じます。

しかし、実際はそうではありません。

ifは、ただ、条件部分の計算結果がFalseかFalse以外かによって分岐しているだけなのです。(正確には、nilという無効値を表す値も偽となります)

Rubyらしいifのコード

ここまで、ifについての詳しい解説をしてきました。ここまでの説明は、ほぼどんな言語でも同様の内容で、「Rubyのifらしい」という内容はほとんどありません。

もちろん、「Rubyのifらしい」独特なifの使い方や考え方もあります。

ここでは、そんなRubyらしいifのプログラムコードを紹介しましょう。

よくあるコード

まずは、一般的なifの使い方をしたプログラムを紹介します。

a = rand(100) # 0-99の乱数を生成

if a <= 24 then
  msg = "少ない"
elsif (a >= 25 and a <= 49) then
  msg = "ちょっと多い"
elsif (a >= 50 and a <= 74) then
  msg = "けっこう多い"
else
  msg = "すごく多い"
end

print  "#{a}は、#{msg}"

実行すると0から99までのランダムな数値が生成されます。

その数値によって、「少ない」、「ちょっと多い」などと表示する文字列を変更しているのが、ifの仕事です。

Rubyらしいコード

では次に、先ほど紹介したプログラムを、Rubyらしい書き方に変えてみましょう。

もちろん、書き方はこの一通りだけではありませんが、Rubyの特徴的なifの使い方を積極的に採用すると、以下のようなものになります。

a = rand(100)

msg = "すごく多い"
msg = "少ない" if (0..24) === a
msg = "ちょっと多い" if (25..49) === a
msg = "けっこう多い" if (50..74) === a

print  "#{a}は、#{msg}"

まったく違って見えるかもしれませんが、このプログラムは上述のプログラムと同じ動作をするのです。

結果は同じでも、ここが違う

では、相違点を説明していきましょう。

Rubyらしい書き方で大きく違っているのは、ifが代入のあとについている部分でしょう。

これは、条件が成立すれば行わせたい動作を最初に書き、その後ろにifと条件を記載しているもので、「後置if」と呼びます。もちろん、先に書いてある動作は条件の評価のあとで実行されますので、msgが意図せず上書きされることはありません。

もう1点の違いは、後置ifの条件部分でしょう。

値の範囲を指定するために比較演算をandで結んでいるところが、とてもシンプルに書けていると思います。

この、範囲を表している「(0..24)」といった部分は「範囲式」と呼ぶもので、値の範囲を表すときに使用します。実際はRangeクラスのインスタンスなのですが、複雑になりますので、今のところは「範囲を指定するための式」と憶えておけば良いでしょう。

同様に、比較演算子が「===」と=が1つ余分についていますが、これも「範囲式を比較するために使っている比較演算子」という程度の理解で大丈夫です。

実際のところ、「===」は、左辺の型によって適切な比較をしてくれる演算子で、主にCase文で使用されるものです。

ifを使いこなすためには?

Rubyであれなんであれ、プログラムを組む上で、if(条件分岐)は必ず必要なものです。

そんなifを使いこなすためには、プログラムの流れを考える=あり得る条件をすべて考えるという癖をつけなければいけません。

そのための基本的な考え方を説明します。

ifを使いこなすために、少しずつできることをやっていきましょう。

プログラムの状態を想像しよう

プログラムを作るとき、最初に作るのは正常な流れです。ユーザーが正しく操作した(正常な値が入力された)場合に、望む結果を出力する「正常系」と呼ばれる流れです。

もちろん、「正常系」だけでも、これまでに紹介したプログラムのようにifによる分岐は多数発生します。そのため、正常な状態における入力値のパターンとそれぞれの場合の動きをきちんとまとめておく必要があります。

そして、「正常系」の状態をはっきりとさせたあと、ユーザーがおかしな操作をする(異常な値が入力される)パターンを想像し、その場合にどう動けばプログラムが正常に動き続けられるか(正常に終了できるか)を考えておかなければいけません。

これらの状態を考え、明確にしておくことではじめて、ifを使いこなしていると言えます。そして、それは同時に、想定外がなくバグのないプログラムを作ることができているということなのです。

すべての状態をまとめて表にしよう

前述の通り、考え得る限りの状態を想像して明確にすることは重要です。

それらを1つ1つ場合分けし、ifに落とし込むことで、強固なプログラムを作り上げることができます。

しかし、場合分けを1対1でプログラムにするというのは、冗長で読みにくいプログラムになってしまうリスクが非常に高いと言えるでしょう。

そのため、プログラムの状態の洗い出しが終わったら、それらを表にまとめて単純化できないかを確認しておかなければいけません。

前述したa、b、c、それ以外の場合分けで、A、B、Dの動作をしたプログラムのようなものです。ifをただ羅列するのではなく、まとめられる分岐をまとめることで、プログラムがすっきりと分かりやすく、メンテナンスもやりやすくなるのです。

具体的なまとめ方を1つ紹介すると、以下のような表になります。

条件 a b c その他
動作 A
B
D

動作する条件と動作が交差する部分に○をつけています。
この表を見ると、Aの動作をするのはaとcのとき、Bはbのときだけというのが明確に分かります。

中見出し:Rubyのifの特徴的なポイント

ifはほとんどのプログラムにあるものですが、使いこなすにあたっては、言語ごとの特徴も踏まえておかなければいけません。
そのため、Rubyのifの特徴についても、まとめておきましょう。

thenを省略できるがendは必須

Rubyのifは、基本的に以下のようなブロック構造で記述します。

if 条件 then
  動作
end

ただし、以下のような記述も許されています。

if 条件
  動作
end

thenについては、言語によって不要なものも多く、それらの言語からの移行をスムーズにするためという意図があるのかもしれません。

なんにしろ、Rubyの教材や解説サイトによっては記載のない場合もありますので、憶えておきましょう。

しかし、同様に他言語では記載のないことのあるendについては、ifによって動作する部分を明確にするため省略することはできませんので、注意が必要です。

Rubyのifは式である

勉強したばかりの場合は文なのか式なのかを意識することはほとんどないでしょう。

しかし、数多くのプログラムを作って、バグと対峙することになると、奇々怪々な現象に遭遇することがあります。そんなときに、Rubyは「if文」ではなく「if式」であるということを知っておくことで、すんなりと解決することがあるのです。

具体的には、「if式は式なので値を返す」のです。

前述した後置ifを例にして、次の2つのプログラムを試してみましょう。

a = 10
b = (if a == 10 then a = 15 else a = 100 end)
print "#{b}"

a = 10
b = (if a == 20 then a = 15 else a = 100 end)
print "#{b}"

上のプログラムでは「15」と表示され、下のプログラムでは、「100」と表示されます。

上の例では、「a == 10」が成立しますので「a = 15」が実行され、その「15」がbに代入されています。そして、下の例はifの条件が成立しませんので「a = 100」が処理がされて、if式の結果として「100」がbに代入されているわけです。

まとめ

Rubyのifについて解説しました。

何度も書いていますが、ifはプログラムの流れを制御する重要なものです。そして、これから先、どんなプログラム言語を勉強するにしてもほぼ必ず必要になるものです。

そのため、Rubyのifの特徴以前に、ifの考え方、使い方を習得していきましょう。そうすれば、Ruby独特な特徴も掴みやすいと思います。

・ifはプログラムの流れを制御(場合分け)する
・ifを使うことで、プログラムの状態にそった複雑な動きを表現できる
・場合分けを制御するため、プログラムがどんな状態になるか、把握する必要がある
・場合分けには、想定外の操作も含まれる
・表にしてまとめることで、条件を整理してプログラムも見やすくメンテナンスしやすくなる
・Rubyのifは式である
・Rubyのifでは範囲式や正規表現を使える

WebCamp・WebCamp Proについて

WebCampは1ヶ月でプログラミング・Webデザインスキルを学ぶ通い放題のプログラミングスクールです。WebCamp Proは3ヶ月間で未経験から即戦力エンジニアを育成するプログラミングスクールです。

2つのサービスを運営するインフラトップでは、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

7月枠も残りわずか当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
6月受入枠は満員となっております。7月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

▼未経験から1ヶ月でWebデザイン・プログラミングを学びたい方はこちら!

▼ついに開講!オンラインでWebデザインを学びたい方はこちら!

 

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
2018-01-15 13:23
今回の記事では、WebCampで1ヶ月間Rubyを学習し、Webエンジニアとして転職した卒業生の田中さんにお話を伺いました。 <プロフィール> 田中 デニス 昭彦さん(...
関連キーワード
Rubyの関連記事
  • 【Ruby 入門者説明書!】ifを使いこなすポイントはここ!解説
  • 【Ruby入門説明書】ruby caseについて解説
  • 【Ruby入門説明書】オブジェクトの理解について解説
  • 【Ruby入門説明書】変数と定数について解説
  • 【Ruby入門説明書】数値と四則計算について解説
  • 【Ruby入門説明書】日本語と文字列、コードについて解説

当サイトで人気のオススメ転職サービスTOP3

1位 マイナビエージェント×IT

おすすめポイント

・平日忙しい人も、土曜日開催の個別キャリア相談会に参加できる

・職種や仕事内容(要件定義、上流工程から携わる仕事など)の要望が細かくできる
・マイナビの規模を活かした豊富で幅広い求人数

マイナビエージェント×ITの登録はこちら

2位 レバテックキャリア

おすすめポイント

・求人登録数4,000件以上

・エンジニア未経験、経験者両方に対応

・有名企業の採用担当者インタビューがみれる

・一次面接NGからの内定実績もあるほど、内定率が高い

レバテックキャリアの登録はこちら

 3位 type転職エージェント

おすすめポイント

転職者の71%が年収アップ

・IT系企業、特にエンジニアに限らず営業職の求人も充実している

各職種専門の転職アドバイザーが援助

type転職エージェントの登録はこちら

おすすめの記事