読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

Javaを書く上で意識することメモ

命名の習慣

説明
クラス名 MyClass 先頭大文字で名詞で名付ける
メソッド名 setXxxx, getXxxx 先頭小文字で動詞を使う
フィールド名 pageRange 先頭小文字で名詞で名付ける
定数名 MY_SUCCESS 全部大文字かつ単語の区切りは_


ループ

ループカウンタが必要な特殊な理由がない場合は拡張forループを使うべき

∵総称型(generics)と組み合わせることで、キャストによる失敗を気にすることなく、安全に処理を記述できる。


総称型

コレクションから値を取り出す時はキャストする必要がある。でもキャストはコンパイラではチェックできないからエラーの元になる...

総称型を使うとコンパイラに方の情報を伝えることが出来る。

→ キャストによる実行時の例外を大きく抑えることが出来る。

※ コレクション : ArrayListのような大きさが決まっていない配列のようなもの。

String text = "gihyo";
List list = new ArrayList();
list.add(text);
String result = (String) list.get(0); // キャスト

↓上記のような処理は、総称型を使うことで次のように書けます。

String text = "gihyo";
List<String> list = new ArrayList<String>();
list.add(text); // String以外はaddできない
String result = list.get(0); // キャストは不要

つまり総称型使うとキャストが不要!String 以外のオブジェクトを add しようとしたときコンパイラがエラーを出す! →安全に型を扱える!


Javaの定数は列挙型(enum)を使うべき

従来の static final を使った定数では、次のような問題を含んだコードを記述できた。

private static final int SUCCESS = 0;
private static final int FAIL = 1;
...
hoge.finish(3); // 3の定数は定義してないけど,呼び出しはエラーにならない

↓列挙型なら..

public enum FinishType { SUCCESS, FAIL } // 列挙型の定義
... そしてメソッドの定義では、引数に先ほど定義し た列挙型を受け取るようにします。
public void finish(FinishType type) {
    // 処理内容
}
hoge.finish(FinishType.SUCCESS); //メソッドを呼び出す側では、先ほど定義した列挙型を渡します。

このように列挙を使用すると、finish( ) メソッドの引数がFinishType型と明確に指定している。

→ FinishType型以外はコンパイラがエラーを出す!

→ int 型定数のときにあり得た、定数で定義していない int 値を渡すといったバグが発生しない。