プログラミングの始め方 その4

条件判定を知ろう

説明

今回の授業は前回の続きです。
まだ前回の課題を終えていない方は、以下のリンクより、先に課題を終了させてください。
プログラミングの始め方-その3

それでは、VSCodeを起動し、「loop.sh」を開いて、前回のプログラムをもう一度実行してみましょう。

bash loop.sh
ターミナル

elephantは8文字です
gorillaは7文字です
wolfは4文字です
horseは5文字です
appleは5文字です
bananaは6文字です
grapeは5文字です
kiwiは4文字です
ターミナル

4行目のhorseより下は、みなさんが書いた果物の名前とその文字数が表示されたのではないでしょうか。

今回は、動物の繰り返し処理に条件判定を加えて、単語が5文字だった時に、「kiken_ni_hyoji」関数を呼び出すように変更してみましょう。

条件判定の基本的な書き方は次の通りです。

if [ ここに自由な条件を記述 ]
then
  # 条件に一致する場合
else
  # 条件に一致しない場合
fi
bash

上の条件判定の書き方の説明で、”ここに自由な条件を記述”がありますね。
その部分に記述する条件の書き方は次の通りです。

  • 数値が一致するかどうかを判定する時。($hensuには何らかの数値の値が入っている)

$hensu -eq 数値
bash

  • 文字列(単語)が一致するかどうかを判定する時。($hensuには何らかの文字列の値が入っている)

$hensu == "文字列"
bash

今回は、判定する変数が「mojisu」で、その中に数値が入っているので前者ですね。

課題

それでは課題です。
5文字だった時に「kiken_ni_hyoji」関数を呼び出すように動物の繰り返し処理を変更してください。
それ以外の場合は「futuu_ni_hyoji」関数を呼び出すようにしてください。
変更がウマくいくと、以下のように表示されます。(馬だけに)

bash loop_2.sh
elephantは8文字です
gorillaは7文字です
wolfは4文字です
horseはウマすぎてヤバいです。(゚д゚)ウマー
appleは5文字です
bananaは6文字です
grapeは5文字です
kiwiは4文字です
ターミナル

好きな果物だったときも同様に「kiken_ni_hyoji」関数を呼び出すように変更してください。
(文字列(単語)が同じかどうかを判定するには「==」でしたよね。)
「kiwi」が好きな場合は、以下のように表示されるはずです。

elephantは8文字です
gorillaは7文字です
wolfは4文字です
horseはウマすぎてヤバいです。(゚д゚)ウマー
appleは5文字です
bananaは6文字です
grapeは5文字です
kiwiはウマすぎてヤバいです。(゚д゚)ウマー
ターミナル

条件判定の文法や書き方はプログラミング言語によって様々ですが、プログラムを書くときには必ず使います。
どれだけ正しく条件を記述できるかが、プログラマーの腕の見せ所でもあるわけです。
実際のシステム開発の現場でも、例えば以下のような条件が存在していて、プログラムを書いてそれを表現しています。

  • ユーザーがログインしていなかったら、ログイン画面を表示すること。
  • ユーザーが入力した値が整数でなければ、エラーメッセージを表示すること。
  • 10万件の顧客のメールアドレスに順次メールを送信すること。ただし、午前0時になったら残りは翌朝の9時まで待機すること。
  • 壁に当たったらキャラクターをその方向へ進めなくすること。

今回は単純な条件判定でしたが、将来もっと大きなプログラムを書く時のための重要なステップです。

さて、余談ですが、もし繰り返しのループを使わずに単語を全て処理しなければならないとしたらどうでしょうか?
(少しネタバレを含みますので、課題を解いていない方は解いてから読んでください)

animal="elephant"
mojisu=`printf $animal | wc -c`
if [ $mojisu -eq 5 ]
then
   kiken_ni_hyoji $animal
else
   futuu_ni_hyoji $animal $mojisu
fi

animal="gorilla"
mojisu=`printf $animal | wc -c`
if [ $mojisu -eq 5 ]
then
   kiken_ni_hyoji $animal
else
   futuu_ni_hyoji $animal $mojisu
fi

animal="wolf"
mojisu=`printf $animal | wc -c`
if [ $mojisu -eq 5 ]
then
   kiken_ni_hyoji $animal
else
   futuu_ni_hyoji $animal $mojisu
fi

animal="horse"
mojisu=`printf $animal | wc -c`
if [ $mojisu -eq 5 ]
then
   kiken_ni_hyoji $animal
else
   futuu_ni_hyoji $animal $mojisu
fi
bash

プログラムが圧倒的に長くなりますよね。
また、「animal」という変数に単語を保存する箇所以外は、全く同じ内容が書かれています。
(次の部分は全て同じ)

mojisu=`printf $animal | wc -c`
if [ $mojisu -eq 5 ]
then
   kiken_ni_hyoji $animal
else
   futuu_ni_hyoji $animal $mojisu
fi
bash

もし単語のリストが100個だったらどうでしょうか。
もし、関数の名前を「kiken_ni_hyoji」から「display_as_warning」に変えなければならない場合、100箇所も修正が必要になりますよね。

答え合わせ

条件判定とはどういうことなのか、繰り返し処理がどれだけ有効かということが理解出来たところで、今回の授業は終了です。
お疲れ様でした。
最終的なプログラムはこのようになっていることを確認してください。

文字だけ表示されるプログラムは、そろそろ飽きた頃でしょう。
次回からは電卓を作っていきます。
それでは!