どうも、エンジニアブロガーのウェブ系ウシジマくんです。
今回は、if文を使ったプログラミング問題 の解き方について書いていきます。
ベテランエンジニアなら1分で解ける問題ですが、さて、あなたはいったい何分で解けるかな?
まずは問題を確認
あなたは学力テストの集計を行うため、総合得点とその結果を分類するプログラムを作成しています。
得点は2桁の数字で表されておりそれぞれ、十の位の数値で大まかな分類が決まっています。
以下のルールで分類の名称が決められています。
- 十の位が 6 であれば “合格”
- 十の位が 1 であれば “再試”
- それ以外全ての数字は “もうちょっとがんばりましょう”
数字が入力されるので、この3つのルールにしたがって分類の名称を出力してください。
この問題、あなたならどう解きますか?
3つの条件式があるので、if文を使用するというのはすぐに思いつくと思います。
でも、if文を使うといってもどのメソッドを組み合わせるかによって可読性が変わってきますよね。
今回この問題を解くのにあたって、3つのパターンを考えてみました。
解き方その1:caseメソッドを使う
caseで指定したオブジェクトがwhenの後に記述する処理と一致するかどうかを比較しているのが特徴です。条件を分岐させるときはwhenでつなげることになります。
このプログラムの流れをみてみると、次のようになりますね。
- caseで指定したline変数が60~100までの値なら文字列”合格”を出力
- line変数が0から10までの値なら文字列”再試”を出力
- いずれの条件にも当てはまらない場合は”もうちょっとがんばりましょう”を出力
解き方その2:後置ifを使う
Rubyを学び始めてからまもないと、不思議に感じる書き方かもしれませんね。この書き方をrubyでは、後置 if と呼んでいます。1 行だけで完結するような場合は、if を文末に置くことができるんですよ。
コードの行数がぐっと減るので可読性が高めるための工夫ですね。ちなみに、定義したメソッド名に?をつけているのは、boolean(真偽値)を返すことを明示的にするためです。Rubyではよくある表現なので、覚えておくといいでしょう。
このプログラムの流れは、次のとおりです。
- sixメソッドとoneメソッドを定義する
(line変数をto_sメソッドで文字列に変換して、最初の一文字目をとってくるようなメソッドにする) - resultメソッドを定義する。(後置ifを使って条件を分岐させる)
- resultメソッドをputsして結果を出力させる
解き方その3:between?メソッドを使う
betwenn?メソッドを知っていれば、Rubyビギナーでも「こいつわかってんな」感を出すことができるかもしれません(笑)このメソッドは、変数の値が引数の間に含まれていればtrueを返し、そうでなければfalseを返します。また、変数の値が引数と等しい場合でもtrueを返すので、覚えておきましょう。
このプログラムの流れは、次のとおりです。
- between?メソッドの引数に60と100を指定してline変数の値と比較させる
- elseifで同じように、between?メソッドの引数に60と100を指定してline変数の値と比較させる
- いずれの条件にも当てはまらなかったら、elseの値を出力させる
最後に
このほかにも条件分岐の組み合わせはたくさんあります。Rubyは丸暗記するよりも実際にサービスなどを作りながらの方が自然と覚えやすいですよ。
それでは良いRubyライフを!