プログラミング入門(2017年度前期)
第一回の演習の総評です.
全般 †
再提出の基準 †
- 必修課題が解けていない場合は再提出としました.
- 任意課題が解けていない場合はその旨をコメントし,任意で再提出できることとしました.
README †
- プログラムを読む人の立場に立ってわかりやすく書きましょう
- 良い例として,どの課題がどのプログラムに対応するかを明記している人がいました.
コーディングスタイル †
- Javaでは,クラス名の先頭は大文字から始め,要素語毎に最初の文字を大文字にするのが一般的です.
(キャメルケースと呼ばれています)
- クラス名はプログラムの内容が感じられるような分かりやすいものにしましょう
- 例えば Ex1 や Saiteisyutu といったクラス名は好ましくありません
- ソースコードが整形されていない例が多く見られました.まずはインデントを揃えることを意識しましょう.下のコードのように,ブロック{ }の中の文やメソッドの宣言は,それぞれ同じ高さのインデントに揃えることが望ましいです.
import objectdraw.*;
import java.awt.*;
public class CrossedLines extends WindowController {
public void onMousePress( Location point ) {
new Line( 40, 40, 60, 60, canvas );
new Line( 60, 40, 60, 40, canvas );
}
public void onMouseRelease( Location point ){
canvas.clear();
}
}
逆に良くない例は,次のような形です.
import objectdraw.*;
import java.awt.*;
public class CrossedLines extends WindowController {
public void onMousePress( Location point ) {
new Line( 40, 40, 60, 60, canvas );
new Line( 60, 40, 60, 40, canvas ); // 同じブロック中の文のインデントが不揃い.
}
public void onMouseRelease( Location point ){
canvas.clear();
} // ブロックを閉じる際は,インデントを戻したい.
}
BlueJでは,文の先頭でTabキーやShift+Tabキーを押すことで楽に整形できる機能や,メニューの Edit → Auto-layout を選択するとファイル全体のインデントを整える機能が付いています.活用してみましょう.BlueJ の機能については Week 06 の資料も参考にして下さい.
- (上級者向け) インデント以外のスタイルについても,自分の中でルールを決めて統一してかけるようになると良いでしょう.このようなルールはスタイルガイドなどと呼ばれ,一般に公開されているものもあるため,それらに従うのが簡単です.
- コーディングスタイルについては Week01 の資料 pp. 49–50 にも説明があります
@Override †
- onMouseXXX のような既存のメソッドの定義を上書きするようなメソッドを定義する場合,@Override アノテーション (注釈) をつけておくとメソッド名の打ち間違いに気づきやすくなります.詳細は Week01 の資料 p. 46 を参照のこと.
自動テストについて †
課題提出時に自動的に行われるコンパイルテストの少し分かりにくい仕様について説明します.
- コンパイルテストは提出されたすべての Java のソースコードがコンパイルできるかをチェックします
- 1つでもエラーが発生する場合は,「要再提出」となり,テスト結果にエラーの内容が出力されます.
- それぞれの課題ごとにテスト結果が表示されますが,実は上に書いた仕様のためすべての課題に同じ結果が出力されます.
- つまり,すべての問題がコンパイルテストに通るか,すべての問題がコンパイルテストに失敗するかの2通りになります.
- 個別の課題ごとにコンパイルテストを行うためには課題ごとにクラス名を定める必要があるのですが,課題では具体的に指定していないものもあるため,個別の課題ごとにチェックすることが出来ません.
- プログラムのファイル名に日本語 (アルファベット以外) を使用することが出来ません.
- 日本語などが使用されている場合は自動テストでエラーになりますが,個別に確認して対応しています.
- Java の仕様上は日本語のファイル名にすることも可能ですが,変数名等と同様に英語 (アルファベット) で書くことを推奨します.
1-1 †
- README.TXT に動作説明がないものは再提出になっています.
- 動作説明とはプログラムがどのような動作をするのか(例: 「マウスをクリックすると〜〜〜する」) のことで,プログラムを変更した内容 (例: 「canvas.clear() を何行目に移動した」) ではありません.
1-2 †
1-3 †
- 多くの人が正解していました
- CrossedLines から全く変更を加えずに提出している人は再提出としました
1-4 †
1-5 †
- この課題ではどのような変更を加えたら,どのようなエラーが出るかを README.TXT に記述することを求めており,エラーが発生するプログラムの提出は求めていませんでした.
- エラーが出るプログラムを含めて提出した場合,自動テストでエラーになっていましたが,TA 側で個別に自動テストのエラーを無視して対応しています.
1-6 †
- この課題に取り組んだ多くの人が正解していました.
- 座標の計算に誤りがある人もいました.落ち着いて問題を読み直すと,描画する図形が一意に定まるはずです.
1-7 †
- この課題に取り組んだほとんどの人が正解していました.