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

|
以下の仕様の「じゃんけんゲーム」を作成してください。
・コンピュータと人間(プレイヤー)が勝負する。
・コンピュータの手は、乱数で決定する。
・人間の手は、キーボード入力で選択する。
・1回勝負するごとに、勝敗の結果を画面に表示する。
・勝負回数は全部で5回とし、その時点のプレイヤーの勝敗数を画面に表示する。
|



/*
クラス:Kadai2
機能:じゃんけんゲーム(コンピュータとユーザー)
作成日:xxxx年xx月xx日
作成者:XXXXXXXX
*/
import java.io.*;
public class Kadai2 {
public static void main(String args[]) {
// 1次元配列、変数の宣言と初期化。
String te[] = {"グー", "チョキ", "パー"};
int Com, You, Kaisu, Sho, Hai, Hiki;
Sho = Hai = Hiki = 0;
try {
// InputStreamReaderクラスのインスタンスを生成する。
InputStreamReader reader = new InputStreamReader(System.in);
// BufferedReaderクラスのインスタンスを生成する。
BufferedReader bufreader = new BufferedReader(reader);
System.out.println("☆じゃんけんゲーム☆");
for(Kaisu = 1; Kaisu <= 5; Kaisu++) {
// 0〜2の範囲の乱数を1つ作成する。
Com = (int)(Math.random() * 2 + 1);
System.out.print("あなたの手(0:グー、1:チョキ、2:パー)");
// キー入力を行う。
You = Integer.parseInt(bufreader.readLine());
if ((You - Com == 2) || (You - Com == -1)) {
System.out.println(" コンピュータ:" + te[Com] +
"プレイヤー:" + te[You] + "あなたの勝ちです!");
Sho++;
}
else if (Com == You) {
System.out.println(" コンピュータ:" + te[Com] +
"プレイヤー:" + te[You] + "引き分けです!");
Hiki++;
}
else {
System.out.println(" コンピュータ:" + te[Com] +
"プレイヤー:" + te[You] + "あなたの負けです!");
Hai++;
}
}
}
catch (Exception e) {
// 例外処理を行う。
System.out.println(e + "という例外が発生しました!");
}
// キー入力回数を表示する。
System.out.println("プレイヤーの勝敗数:" + Sho + "勝" + Hai + "負" +
Hiki + "引き分け");
}
}
|

コメントの付け方がよくなりました
プログラムの先頭や内部に適切なコメントが付けられるようになりましたね。プログラムを読みやすいと感じました。実際の現場では、チームで開発します。同僚や先輩に、あなたが作ったプログラムを使ってもらうこともあります。「どのような説明があれば分かりやすいだろう」と考え、思いやりの気持を込めてコメントを付けてください。
無駄な空行を置かないようにしましょう
空行(コードが何も記述されていない改行だけの行)は、プログラムを見やすくするために置きます。プログラムを見る人は、空行を処理の区切りだと感じます。ただし、置くタイミンが悪いと、空行の効果が薄れてしまいます。現状では、空行がちょっと多すぎます。コメントを入れるタイミングで空行を置くとよいでしょう。ifとelse、tryとcatchのように対応するブロックは、空行で区切らないでください。別の処理に見えてしまうからです。
// ifとelseの間に空行を置く
if (a > 0) {
・・・
}
else { ←このelseがifに対応することが分かり難くなる!
・・・
}
|
Javaの名前付け規約をできるだけ守りましょう
Javaプログラマは、クラス、メソッド、フィールド、変数、定数などに名前を付けることになります。この際、以下の名前付け規約を守るようにしてください。それによって、プログラムがより読みやすいものとなります。
・クラスは、大文字で始まる名前にする(例:Janken) ・メソッド、フィールド、変数は、小文字で始まる名前にする(例:kaisu) ・定数は、すべて大文字にする(例:PI) ・2つの単語からなる名前は、区切りを大文字にする(例:drawString)
Javaのクラスライブラリが提供するさまざまなクラスとそのメンバは、 上記の名前付け規約を守っています。あなたも名前付け規約を守れば、 全体として統一の取れたコーディングができます。
たとえば、あなたは変数の宣言で以下のように宣言していますが
int Com, You, Kaisu, Sho, Hai, Hiki;
これらの変数名は、com、you、kaisu、sho、hai、hikiという 小文字から始まる名前にしたほうがよいでしょう。 大文字からはじまるとクラスに見えてしまいます。
|
勝ち負けの判定をコンパクトにしている部分は素晴らしいです
2人の手の組み合せは3×3=9通りあります。何も工夫をしなければ、9つのifブロックを使うことになりますが、とても簡単な演算だけで判定しているのは素晴らしいです。オリジナルのプログラムを作れる実力が付いてきたと感じました。
プログラムができるようになるとは、Javaの構文を100%暗記することではありません。たとえ50%の知識であっても、それを活用して自分の考えをプログラムとして具現化できることです。あなたには、そのセンスが十分にあると思いました。これからも、自信を持って学習を続けてください!
|