以下のプログラムを見て感じたことを教えてください。
#include <stdio.h>
int main(void){
int age;
printf("あなたの年齢を入力してください:");
scanf("%d", &age);
if( age <= 5 ) {
printf("あなたは令和生まれですね\n");
}
if( 5 <= age && age <= 35 ) {
printf("あなたは平成生まれですね\n");
}
if( 35 <= age && age <= 98 ) {
printf("あなたは昭和生まれですね\n");
}
if( 98 <= age && age <= 112 ) {
printf("あなたは大正生まれですね\n");
}
return 0;
}
想定回答と判定
まぁ見ればわかる程度のプログラムだが、コードレビューしてもらうことで採用面接にちょうどいい課題なのではと思ったので、想定回答と判定を挙げてみた。
たったこれだけのプログラムなのに、いろいろ指摘できるもんですね。
「この言語は使ったことがないので」
C言語を使ったことがあるかどうかは、仕方のないことなので減点はしないが、概要は読み取れると思う。
「使ったことがない」だけだと減点対象。
「仕様書ありますか?」
念のための確認であれば問題なし。
このレベルで仕様書がないと何もできないようであれば減点対象。
「このプログラムは動くんですよね?」
そういう試験問題(コンパイルエラーになることが理解出来ているかどうか、という試験問題)もあるが、そういう問いではない。
判定者によっては減点されそう。
「age変数が初期化されていないです」
その通り。加点。
仕事であれば、気付いてほしいところ。
「数字以外を入力した際の動作が気になります」
実際、数字以外を入力するとまともに動作しない。加点。
「scanf関数の復帰値がどうのこうの」
正しい。が、そこだけだと加点も減点もなし。
「scanf関数はセキュリティ的にまずいのでは」
理由まで説明できるのなら加点。理由が説明できない場合は減点。
雉も鳴かずば撃たれまい。
「if文ではなく、else-if文のほうがいいのではないか」
要求仕様次第なので else-if にしてはいけない可能性もあるが、複数のif文条件に該当してしまうことを気付いてくれているので加点対象。
「例えば35って入力したら、2行出力されてしまいますね」
同上。加点対象。
「例えば113って入力したらどうなるんですかね」
このプログラムだと何も出力されない。よくある「設計漏れ」に気付いているので加点。
「if文の判定でAND条件するときはカッコで囲わないとだめです」
「個人的な好み」の問題。強制してくるようであれば減点もやむなし。
「カッコで囲むと間違いがない」のは確かにそうで、そこに異論はない。
であっても、全世界で絶対に守るべきルールかどうかは微妙。
「if文の判定は、変数を右側(左側)に揃えるべき」
「比較のためのイコールが、ミスって代入になるのを防ぐ」とか「日本語読みするときに、変数が左側にあったほうがよい」とか、わからんではないが、これも「個人の趣味」の問題。
「if文のマジックナンバーはやめておいたほうが」
「マジックナンバーは避けたほうがよい」はセオリーだが、マジックナンバーにしか気が付いていないようだと減点対象。馬鹿の一つ覚え。
「if文の判定条件の数値が共通なので、定数として切り出します」
正しい意見だが、加点するほどではない。
そこまで気付いたのなら、次項までいってほしい。
「if文の判定条件、毎年書き換えるんですかね」
運用時の問題まで見えているので加点。
個人的には、これに気付いてくれただけで合格にしたい。
「年齢だと正確な判定はできないんじゃないでしょうか」
その通り、年月日まで含めて判定しないと本当に正しい結果にはならない。
これも要求仕様次第ではあるんのだが、そこに気付いているので加点対象。
「判定をテーブルに切り出したほうがいいのではないでしょうか」
わからんではないが、今回のケースでは冗長。くどいようなら減点対象。
「判定結果の文章を共通化して、元号の部分だけ入れ替えられるように」
わからんではない。加点も減点もなし。
「特にコメントはないです」
経験者だとゴメンナサイかな。