導入
コーディングルール
コーディングルールを決めて守ることで、
唯一絶対のコーディングルールはありませんが、
今回はコーディングルールの一つ、
展開
大前提:意味のある名前をつける
大前提でありながら、
例えば、ChokeYourself.
を見てください。
class House{
House(){
println("House object created.");
}
void open(int n){
println("No. " + n + " Door opened!");
}
} // end of class House
House h = new House();
int temp = 0; // 典型的な無意味名称。何に使ってるんだっけ?
void setup(){
temp = 5; // あれ?tempって何の意味だっけ?
h.open(temp); // open?何を?窓を?ドアをだっけ?
} // end of void setup
メソッドopen
は窓を開けるのか、openDoor
メソッドやopenWindow
メソッドを作ることになるでしょう。あるいはopen(DOOR)
やopen(WINDOW,3)
などとしてもよいでしょう。単にopenだけでは何をどうしたかったのか、
また、doorNumber
などと目的をはっきり記述した名前にするべきです。open(doorNumber)
とメソッドを呼べばコードの意図が明確になります。
変数やメソッド、
英語を使おう
プログラミング言語の各命令は、
String name = "Taro";
int age = 16;
float height = 173.5;
print("Hello " + name +
". You are " + age + " years old! "
+ height + " cm tall.");
String
はprint
は
ところで、

しかし、
String shimei = "Taro";
int toshi = 16;
float 身長 = 173.5;
println("Hello " + shimei + ". You are " + toshi + " years old! "
+ 身長 + " cm tall.");
変数名ならまだしも、
私たち日本人には、
しかし、

なるべくメンテナンス性の高いソースコードを書くためにも、
ソフトウエアの世界では英語が必須です。
もし、
double taijyuu = 75.4; // [kg]
double shintyou = 174.3 * 0.01; // [m]
double bmi = taijyuu / (shintyou * shintyou);
println("あなたのBMIは" + bmi + "です。");
複数の単語から成る名前の組み立て方
複数の単語で成り立つ名前を使う場合、
3つの綴り方
綴り方の名称は次のとおりです。
ローワーキャメルケース |
先頭の単語以外の単語の頭文字が大文字 |
---|---|
アッパーキャメルケース |
単語の頭文字が大文字。別名Pascalケース |
スネークケース |
単語の間の区切りがアンダーバー_ ) |
場合に応じた綴り分け
以下に、
分類 | 例 | 解説 |
---|---|---|
変数名 | hasGirlFriend | ローワーキャメルケース |
定数変数 | GIRL_ |
すべて大文字のスネークケース |
クラス名 | FileReader | アッパーキャメルケース |
インタフェイス名 | IFileReader | I + UCC |
インタフェイスを実装するクラス | FileReaderImpl | UCC + Impl |
抽象クラス | AbstractFileReader | Abstract + UCC |
テストクラス | FileReaderTest | UCC + Test |
パッケージ名 | programmingnextstep | すべて小文字 |
メソッド | createFileReader | LCCで先頭の単語は動詞 |
大文字と小文字の違いで名前を区別しない
Java言語はC言語と同じく、
例えば名前を扱うために、
- 在校生名:
name
- 保護者:
Name
すると、
このような区別が必要な場合には、
- 在校生名:
studentName
- 保護者名:
parentName
大文字と小文字で区別できて便利だとは考えない癖をつけてください。
省略しない
単語は極力省略せずに記述しましょう。Student's Name
からSN
と省略したとしましょう。仮にどこかにSN
は生徒名の略」SN
が生徒名であることを容易に想像できるとは限りません。
例外的に、
例えば、diameter
が良いでしょうか。d
が良いでしょうか。この場合はどちらでも良いでしょう。省略形のd
は直径寸法の変数として一般に認知されています。むしろdiameter
と書かれていると、
double a = 0.0;
double d = 10.0;
a = PI * d * d;
println("直径" + d + "の円の面積は" + a);
double area = 0.0;
double diameter = 10.0;
area = PI * diameter * diameter;
println("直径" + diameter + "の円の面積は" + area);
for
文等のループ構造のカウンタ変数名には、i
, j
, k
,…とアルファベット1文字を使うことがあります。長過ぎず、
以上のことから、
変数名をつける場合には、
演習
演習1(難易度:easy)
以下の変数・
- 白い靴の数
(number of white shoes):変数 - 下駄箱に入れられる靴の最大数
(capacity of shoes closet):定数 - 下駄箱
(shoes closet):クラス - 収納
(closet):インタフェイス - 収納インタフェイスを実装した下駄箱クラス:クラス
- 収納:抽象クラス
- 下駄箱に靴をしまう
(put shoes back):メソッド
演習2(難易度:middle)
以下のそれぞれの場合について、
- ランチメニュー注文の文字列を入れる変数名
- カツカレーセットの値段を持つ整数定数名
- 食券自動販売機の役割を担うクラス名
- 食堂で提供するメニュー品目のインタフェイス名
- 食堂で提供する親子丼の、
食堂で提供するメニュー品目のインタフェイスを実装するクラス名 - 食堂で提供するメニュー品目の抽象クラス
- 食券自動販売機の役割を担うクラスのテストクラス
- 食堂システムのパッケージ名
- 食券自動販売機の発券メソッド名
演習3(難易度:middle)
台形の面積を求めるメソッドを作ってください。引数の変数名は意味の分かりやすい名前にしましょう。
void setup(){
double a = 10.0; //上底の長さ
double b = 20.0; //下底の長さ
double c = 15.0; //高さ
println("上底 = " + a);
println("下底 = " + b);
println("高さ = " + c);
println("面積 = " + areaTrapezoid(a,b,c));
}
// ここからメソッドareaTrapezoidを書いてください
まとめ
- Java言語/Processingの基本的なコーディングルールであるネーミングルールを学習しました。
学習の確認
それぞれの項目でAを選択できなければ、
- 変数名やクラス名などに英語を使用する目的が理解できましたか?
- 理解できて、
有効性を認めた。 - 理解できたが、
納得はしていない。 - 理解できないし、
有効だとも思えない。
- 理解できて、
- 演習問題をスムーズに解くことができましたか?
- できた。
- テキストを見ながら何とかできた。
- できなかった。
参考文献
- 『Javaルールブック ~読みやすく効率的なコードの原則』
(大谷晋平、 米林正明、 片山暁雄、 横田健彦 共著、 電通国際情報サービス 監修、 技術評論社) - コンパクトな書籍で、
効率良くJava言語の標準的なコーディングルールを学習できます。
- コンパクトな書籍で、
- 『プログラミング作法』
(Brian W. Kernighan, Rob Pike 著、 福崎俊博 訳、 KADOKAWA) - 第1章
「スタイル」 にコーディングルールとその重要性がコンパクトにまとめられています。
- 第1章
演習解答
演習1 書き分け
- numberOfWhiteShoes
- CAPACITY_
OF_ SHOES_ CLOSET - ShoesCloset
- ICloset
- ShoesClosetImpl
- AbstractCloset
- putShoesBack
演習2 名前付け
- orderdDish
- NUGGET_
CURRY_ PRICE - VendingMachine
- ICafeteriaMenu
- OYAKO_
DONCafeteriaMenuImpl - AbstractCafeteriaMenu
- VendingMachineTest
- cafeteriasystem
- VendingMachine.
issue