Google Java Style Guide問題集（全10問:初級編）

# はじめに
Google Java Style Guideを定着させるために、実際のコードでの問題集を作成しました。
特に開発で出会う頻度が高い項目に絞っています。

こちらをきっかけにぜひ↓のページを実際にご自身で参照してください。

※注記:コードはChatGPTを活用して作成しています。

### 参考記事
Google Java Style Guide
https://google.github.io/styleguide/javaguide.html

Google Java Style Guide(非公式和訳) - 2023年8月31日現在、本家と内容が変わらないのでおすすめです。
https://kazurof.github.io/GoogleJavaStyle-ja/

# 対象者
Java初級者（コーディングスタイルに不安がある人）

# 形式
全10問です。各問題に回答のリンクをつけています。

# 問題1
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
import java.util.*;

public class StyleMistakes {

  public static void main(String[] args) {
    List<String> myList = new ArrayList<>();
    myList.add("Hello");
    myList.add("World");
    System.out.println(myList);
  }
}
```

[回答へ(内部リンク)](#問題1-回答)

# 問題2
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">誤りを指摘してください</font>。
```Java
public class MainClass {
  public static void main(String[] args) {
    System.out.println("This is the main class.");
  }
}

class AnotherClass {
  public void printMessage() {
    System.out.println("This is another class.");
  }
}
```

[回答へ(内部リンク)](#問題2-回答)

# 問題3
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
public class ColumnLimitViolation {
    public static void main(String[] args) {
        String result = "Hello".concat(" ").concat("World").concat("!").toUpperCase().replace("HELLO", "HI").substring(0, 5);
        System.out.println(result);
    }
}
```

[回答へ(内部リンク)](#問題3-回答)

# 問題4
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
public class IndentationMistake {
    public static void main(String[] args) {
        System.out.println("This is a very long line that definitely exceeds the column limit and is not indented properly"
        + "which makes it hard to read and understand.");
    }
}
```

[回答へ(内部リンク)](#問題4-回答)

# 問題5
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
public class VerticalWhitespaceMistake {

    private int x;
    private int y;


    public VerticalWhitespaceMistake(int x, int y) {
        this.x = x;
        this.y = y;
    }


    public int sum() {
        return x + y;
    }


    public static void main(String[] args) {
        VerticalWhitespaceMistake obj = new VerticalWhitespaceMistake(5, 10);
        System.out.println("Hello, world!");

        System.out.println("Sum: " + obj.sum());
    }
}
```

[回答へ(内部リンク)](#問題5-回答)

# 問題6
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
public class HorizontalWhitespaceMistake{
    public static void main(String[]args){
        int x=5,y=10;
        int sum=x+y;
        if(sum>10){System.out.println("Sum is greater than 10.");}
        else{System.out.println("Sum is less than or equal to 10.");}
    }
}
```

[回答へ(内部リンク)](#問題6-回答)

# 問題7
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
public class VariableDeclarationTiming {
    public static void main(String[] args) {
        int x = 5;
        int y = 10;
        int sum;

        System.out.println("Doing some other tasks...");

        sum = x + y;
        
        if (sum > 10) {
            System.out.println("Sum is greater than 10.");
        } else {
            System.out.println("Sum is less than or equal to 10.");
        }
    }
}
```

[回答へ(内部リンク)](#問題7-回答)

# 問題8
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
package com.Example_Company;

public class PackageNameMistake {
    public static void main(String[] args) {
        System.out.println("This is an example.");
    }
}
```

[回答へ(内部リンク)](#問題8-回答)

# 問題9
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
package com.example;

public class myClass {
    public static void main(String[] args) {
        System.out.println("This is an example.");
    }
}
```

[回答へ(内部リンク)](#問題9-回答)

# 問題10
以下のコードをGoogle Java Style Guideに準拠して<font color="blue">修正してください</font>。
```Java
public class ConstantNamingIssue {
    public static final String myConstant = "This is a constant";
}
```

[回答へ(内部リンク)](#問題10-回答)

# 問題1 <font color="green">回答</font>
```Java
import java.util.ArrayList;  // 3.3.1 ワイルドカード・インポートの禁止を解消
import java.util.List;  // 同上

public class StyleMistakes {

  public static void main(String[] args) {
    List<String> myList = new ArrayList<>();  // ワイルドカードインポートを修正
```

### 該当ルール

3.3.1 ワイルドカードインポートは禁止

[問題へ戻る(内部リンク)](#問題1)

# 問題2 <font color="green">回答</font>
同じファイルにトップレベルのクラスを２つ作ってはいけない。
（トップレベルのクラスはファイルを分ける。）

### 該当ルール

3.4.1 1個だけのトップレベルクラスの宣言

[問題へ戻る(内部リンク)](#問題2)

# 問題3 <font color="green">回答</font>
```Java
public class ColumnLimitViolation {
    public static void main(String[] args) {
        // 修正後：メソッドチェーンを適切に改行して、列数制限を守る
        String result = "Hello"
            .concat(" ")
            .concat("World")
            .concat("!")
            .toUpperCase()
            .replace("HELLO", "HI")
            .substring(0, 5);
        
        System.out.println(result);
    }
}
```

### 該当ルール

4.4 1行の文字数制限 100文字

[問題へ戻る(内部リンク)](#問題3)

# 問題4 <font color="green">回答</font>
```Java
public class IndentationMistake {
    public static void main(String[] args) {
        System.out.println("This is a very long line that definitely exceeds the column limit "
                + "and is now indented properly, which makes it easier to read and understand.");
    }
}
```

### 該当ルール

4.5.2 連続する行は少なくとも４文字インデントする

[問題へ戻る(内部リンク)](#問題4)

# 問題5 <font color="green">回答</font>
```Java
public class VerticalWhitespaceMistake {
    // 先頭の空白行はオプションです。

    // フィールド間に空白行を入れても入れなくても構いません。
    // 論理的にフィールド同士が関係していればグループ化することも可能です。
    private int x;
    private int y;

    public VerticalWhitespaceMistake(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int sum() {
        return x + y;
    }

    public static void main(String[] args) {
        VerticalWhitespaceMistake obj = new VerticalWhitespaceMistake(5, 10);
        System.out.println("Hello, world!");
        System.out.println("Sum: " + obj.sum());
    }
}

```

### 該当ルール

4.6.1 垂直の空白

[問題へ戻る(内部リンク)](#問題5)

# 問題6 <font color="green">回答</font>
```Java
public class HorizontalWhitespaceMistake {
    public static void main(String[] args) {
        int x = 5, y = 10;
        int sum = x + y;
        if (sum > 10) {
            System.out.println("Sum is greater than 10.");
        } else {
            System.out.println("Sum is less than or equal to 10.");
        }
    }
}
```

### 該当ルール

4.6.2 水平の空白

[問題へ戻る(内部リンク)](#問題6)

# 問題7 <font color="green">回答</font>
```Java
public class VariableDeclarationTiming {
    public static void main(String[] args) {
        // 適切なタイミングで変数を宣言
        int x = 5;
        int y = 10;

        // 他の処理
        System.out.println("Doing some other tasks...");

        // sumはこのタイミングで初めて使用されるため、ここで宣言
        int sum = x + y;  // 4.8.2.2 必要なときに宣言する
        
        if (sum > 10) {
            System.out.println("Sum is greater than 10.");
        } else {
            System.out.println("Sum is less than or equal to 10.");
        }
    }
}
```

### 該当ルール

4.8.2.2 必要なときに宣言する

[問題へ戻る(内部リンク)](#問題7)

# 問題8 <font color="green">回答</font>
```Java
package com.examplecompany;  // 5.2.1 パッケージ名（大文字とアンダースコアが除去されている）

public class PackageNameMistake {
    public static void main(String[] args) {
        System.out.println("This is an example.");
    }
}
```

### 該当ルール

5.2.1 パッケージ名

[問題へ戻る(内部リンク)](#問題8)

# 問題9 <font color="green">回答</font>
```Java
package com.example;

public class MyClass {  // クラス名は大文字で始める
    public static void main(String[] args) {
        System.out.println("This is an example.");
    }
}
```

### 該当ルール

5.2.2 クラス名

[問題へ戻る(内部リンク)](#問題9)

# 問題10 <font color="green">回答</font>
```Java
public class ConstantNamingIssue {
    public static final String MY_CONSTANT = "This is a constant";
}
```

### 該当ルール

5.2.4 定数名

[問題へ戻る(内部リンク)](#問題10)

# 最後に
誤り・ご指摘など頂けましたら嬉しいです。
必要に応じて修正対応させていただきます。