utamaro’s blog

誰かの役に立つ情報を発信するブログ

Javaの個人的読みやすいコードフォーマット

個人的読みやすいコードフォーマット【Java版】

このサイトがわかりやすく、見やすいかと思いました。

future-architect.github.io

↑のページにかかれていること以外で、自分なりに気をつけていることをまとめます。

変数の定義時には型を省略しない

int val1 = 1,
    val2 = 2;

ではなく、型を付けて宣言する。

int val1 = 1;
int val2 = 2;

ifの括弧と中括弧について

if(val==1)
{
    //
}
else
{
    //
}

ではなく、↓のように書く

if (val == 1) {
    // 
} else {
    //
}

for

for(int i=0; i<2; i++)
{
    //
}

ではなく、↓のように書く。(=,<等の前後にスペースを入れています)

for (int i = 0; i < 2; i++) {
    //
}

builder

SampleModel model = new SampleModel.builder()
    .val1(1)
    .val2(2)
    .build();

SampleModel model = new SampleModel.builder()でbuilderを使ってインスタンスを生成することを表す。

↓の例のように、builder()で改行すると、SampleModel model = new SampleModelで何をするのか分かりづらい。 (次の行を読んで、builderと初めて分かるため)

SampleModel model = new SampleModel
    .builder()
    .val1(1)
    .build();

コメントの内容について

コメントは、その処理で何をやっているかではなく、どのような処理をしているのかを書く。

if (val == 1) {
    // valが1の場合の処理
}

ではなく、↓のように書く。

if (val == 1) {
    // valが1の場合、〇〇の処理を行う
}

if (!result) {
    // 前処理で〇〇かXXの処理が失敗している場合
}

このようにすれば、コメント部分をヒントに後続処理を読むことができる。

1行に書きすぎない

sampleModel.setVal(Integer.parseInt(sameModel.getVal()));
Integer sameModelVal = Integer.parseInt(sameModel.getVal());
sampleModel.setVal(sameModelVal);

デバッグする場合、2つの処理に分けたほうがやりやすいと考えているからです。

空行はインデントを入れる

if (true) {
    int a = 1;
    // このような空行にはインデントを入れる.
    int b = 2;
}
class Sample() {
    public void method1() {
        //
    }
    // こことか
    public void method2() {
        //
    }
}

インデントを入れなかった場合は、何か処理を入れようとした場合にタブを打つことになる。

とても面倒というわけでも無いけど、コーディング時に気をつけれるところなので気をつける。

タブはスペース4にする

タブでもいいんじゃない?と思う人がいると思うけど、環境によってタブがスペースに変えられたり、タブ1がスペース8で表示されることがある。

そうすると、とても読みづらい。

かなり読みづらい。

gitのcommit時に無駄なdiffが発生したりもする。

スペース2にすると、インデントでの区切りが分かりづらく、どこからどこまでがforのブロックなのかなど分かりづらい。

個人的にはスペース4が良いと考えています。

同じ行にコメントを書く場合

int val = 1;  // hoge

スペース2つ開けて//を入れる。

そのあとにスペース1つ入れて、コメント本文を書く。

これはpythonのコメント方法を参考にしました。

省略名を使う場合は必ずコメントを入れる

int mkdir = "mkdir";  // make directory

/** name converter. nをXXに変換する  
 * @param nm 
 *  n: name. 名前
*/
public void nmConv(String n) {
    //
}

省略しなければならない場合は無いと思いますが、省略する場合は必ずコメントを入れる。

後で見たときや、別の人が読んだときに必ずわからなくなるから。

どのように利用するフィールドなのかコメントする

例えば↓のようなModelクラスでidnumberというフィールドがあるとします。

class SampleModel() {
    private String id;
    private String number;
}

このクラスだけではidとnumberがどのように使われるのかわかりません。

つまり、このクラスを使用してgetId()と書くのか、getNumber()と書くのかわからないのです。

ですが、それぞれにコメントがついていれば判断ができるというわけです。