skillup

技術ブログ

Java

Javaのコーディングルール

投稿日:2015年6月9日 更新日:

私自身、Javaで仕事をするようになってから3ヶ月ちょっとがたちました。

もともとPHPで仕事はしていましたが、我流でやっていたこともあり、コーディングのルールとかがいい加減だったんですよね・・

ボス(社長)はガチのJavaエンジニアなのでその点を見てもらえるのがすごくありがたいです。

またオフィスにもEffective Javaなど著名な雑誌があります。

ここではJavaの基本的なルールについて振り返ってみたいと思います。

命名系

クラス名、メソッド名、変数名の基礎

基本全てキャメルケース。

こういうとこも意外といい加減でした。速く直したいですね・・

またクラス名は役割をあらわす名前にすることです。

社長には職業といわれました。生徒情報だったらStudent,顧客情報だったらCustomerみたいなつけ方ですね。

抽象クラスの名称はabstract

こうしないと探すときに大変です。

似たものとして、以下のようなルールがあります。

例外クラスはExceptionを末尾

テストクラスはTestを末尾

メソッドの名称

ここ超大切です。いまだに適切なものの使い分けに苦労します。

get+属性名

基本的に元からあるオブジェクトなり、プロパティを取得するときに使います。戻り値は属性の型と一緒です。

あくまで元からあるものを取得するときに使うので何かを生成する場合にはcreate,makeをつけます。

 set+属性名

1つのフィールドの1つの値を設定することで、上書き。原則として戻り値なし。

put~

コレクションにKeyとValueを対にして設定することで、やはり上書き。原則として戻り値なし

add~

1つのフィールドに加算(追加)していくもの。

boolean系

true/falseがわかるものにすべき。下記が具体例です。

  • is +形容詞 isEmpty
  • can +動詞 canRemove
  • has+過去分詞 hasChanged
  • 三単元 exists
  • 三単元+名詞 existsStock

isCheckなどは「チェックか?」などの意味不明の命名は使わない。

メソッド名だけでなくboolean型の変数も同様。

ちなみにflgはあまり使われないようですね。ガリガリ使ってました・・・

インスタンス変数、クラス変数

引数と同じ名称はなるべく避けるのがよいようです。知りませんでした・・・

同じ場合は、インスタンス(クラス)変数にthisを使うことが一般的ですが、引数にはa,anなど冠詞をつけて区別することがよいです。

定数

大文字+アンスコ。どの言語でも一緒ですね。

コーディング規約

アクセス修飾子

private

自クラスからしか呼ばれない場合と変数。

protected

親子関係があり、そのなかで呼び出されるとき

public

外部から自由に呼び出したいとき。基本的にメソッドと定数のみ。

修飾子なし

パッケージ内のみから呼び出すとき

インポートは*を使わない

これめんどくさいときに結構やってました。

ダメな理由としては、可読性が落ち、どのパッケージを使っているかわからなくなるから

ラッパークラス型とプリミティブ型

Integerとintが一番有名ですね。どちらでも利用可能な場合は消費メモリ、処理性能を考慮し、原則プリミティブ型を使います。

ラッパークラスを使うのはコレクションへの保持などです。ラッパークラスは等号が==ではなくequalsになります。

インデントなど

インデントは半角4つ、またスペースは意味のあるところであけ、統一すること。

{は末尾に、}は単独で使わないなど。

ここら辺IDEを使っている方はフォーマット機能などを活用しましょう。

比較演算子

<か<=を使うのがルールだそうです。知らなかった・・・

意図としては右側が大きければtrueということを統一すべきだから、というのが背景にあります。

クラス定義

finalの使用

継承させたくない、再利用させない、オーバーライドさせたくない場合はfinalです。

ちなみに定数はstatic finalで定義します。

toStringの実装

オブジェクトのデバッグなどで保持している情報を変換させるためにあると便利。

これやっとかないと後々大変です(汗)将来の自分を助けるためにも書いときましょう。

戻り値

配列やコレクションを返す場合、nullを返さずにsize0の配列やコレクションを返すようにします。

こうしないと呼び出し元でnullPointExceptionが発生します。

オブジェクト同士の比較

==ではなくequalsを使います。==の場合、値の比較ではなく、メモリの場所になります。

制御構文

オブジェクトの生成と破棄

ループの中でオブジェクトを生成し、廃棄するとメモリと処理時間が大きくなります。

文字列の結合などでStringを使わず、StringBuilderを使うのもこのためです。

その場合、ループの外でnewをして、内側ではオブジェクトを再利用する必要がでてきます。

以上、ざっと気になったもの自分が関心があり、注意すべきものをリストアップしました。

ちなみに下記書籍を参考にしました。

「実践javaコーディング作法」

-Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

依存ライブラリを含むプログラムのjar化に関して

以前、jar化する場合のpomの記述方法について書いたのですが、一部記述が正しくなかったようです。 mavenでのjarファイル作成 この方法でやってもjarファイルを単独で取り出すとNoClassD …

no image

StreamのMap処理

Javaのstreamですが知れば知るほどいろいろな機能がありますね。 基本的にプログラムって配列(コレクション含む)とオブジェクトの処理が中心になるので、配列の処理をいかにうまくできるかは非常に大事 …

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

no image

例外処理について その2

以前、「例外処理について」で例外処理について記述をしたんですが、漠然としていたのともう1回まとめなおしたかったため、メモしておきます。 Contents1 例外とは?2 例外のクラス分け2.1 Thr …

no image

データベース文字コード対策他

Contents1 JDBC文字化け対策2 BigDecimal2.1 ソース2.2 参考リンク3 CreateQuery4 jsfのconvertNumber JDBC文字化け対策 データベースがu …

アーカイブ