|
この記事は、翔泳社で実施する独習ゼミの研修を紙上で再現したものです。
使用したプログラミング言語はJavaです。プログラミング経験の有無から「初級コース」と「中級コース」に分かれて、それぞれ4問ずつプログラミングの課題に取り組んでいただきました。講師を務めた私の役目は、赤ペンでソースコードを添削することでした。提出されたプログラムは、どれもきちんと動作しましたが、誰にも共通した問題がありました。それは「プロらしくない」ということです。
実際に内定者さん(学生さん)から提出していただいたソースコードと添削結果を掲載しますので、皆さんも一緒にプロらしさとは何かを考えてみてください。また、指導する立場の人は、連載で指摘していく項目を意識しながら、後輩指導に取り組んでみるのもよいでしょう。今回は、中級コース第3回の課題を紹介します。なお、提出者の名前は匿名であり、ソースコードも一部を抜粋したものを掲載しています。
☆ ☆

指定された年月のカレンダーを表示するプログラムを作成してください。
その年が閏年の場合は「閏年です」、そうでない場合は「閏年ではありません」と表示してください。
|


[プログラムを見る]

プロらしい書式になりました!
コメントの付け方や、インデント(字下げ)など、とても見やすいプログラムになりました。ご自身でも、第1回の提出課題と見比べてみてください。大いに進歩したことがわかるでしょう。自信を持ってください。
極力マジックナンバーをなくしましょう
マジックナンバー(magic number、魔法の数字)とは、123や456のように直接数値で記述されているデータのことです。マジックナンバーは、自分にはわかっても他人にはわかりににくいものです。しばらく時間が経つと、自分でも数値の意味を思い出せない場合もあります。
1は1月、12は12月のことでしょう。28は2月の末日、29はうるう年の場合の2月の末日のことでしょう。これらの数値の意味は、何となくわかりました。どれをマジックナンバーとみなすかは「他人が見てわかるかどうか」で判断してください。プログラムを見てすぐに意味がわからなかった数値はマジックナンバーです。これらには、finalキーワードで名前(数値の意味を表す名前)を付けておくとよいでしょう。
else if(i < 10){ ・・・この10は何でしょう?
for(int i = 1 ; i < 32 ; i++){ ・・・この32は何でしょう?
// finalキーワードで名前を付ける
final int FUTAKETA = 10; // 10以上は2桁である
final int MATUJITUGOE = 32; // 32日なら末日を越えている
|
例外処理をしましょう
極端なことを言えば、プロが書くプログラムの50%は例外処理(エラー処理)なのです。何か1行処理をしたら、次の1行でエラーチェックをするからです。ただし、Javaではtry〜catch文によって、例外処理が効率的に記述できるようになっています。
現状のプログラムには、例外処理が一切ありません。キー入力があるからには、例外が発生する可能性があります。練習プログラムなら少しぐらい抜けがあっても構いませんが、考えられるあらゆる例外に対処したプログラムがプロの完成品プログラムです。
1つのメソッドの処理を短くしましょう
mainメソッドの中ですべての処理を行っているため、処理が長くて解読しにくくなっています。処理のまとまりごとにメソッドを分けるとよいでしょう。メソッド単位で処理が理解しやすくなります。また、同じメソッドを他のプログラムで再利用できる場合もあります。たとえば、以下の処理を行うメソッドを作り、それらをmainメソッドから呼び出すようにするとよいでしょう。どのメソッドも「再利用できそうだ」と感じるでしょう。ここでは省略していますが、状況に応じて適切な引数や戻り値を考えてください。
・キー入力を行うメソッドkeyInput()
・閏年の判定を行うメソッドisUruDoshi()
・カレンダーを表示するメソッドshowCalendar()
// mainメソッドの内容
public static void main(String args[]) {
keyInput();
isUruDoshi();
showCalendar(); } |
|