はじめに
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に準拠して修正してください。
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);
}
}
問題2
以下のコードをGoogle Java Style Guideに準拠して誤りを指摘してください。
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.");
}
}
問題3
以下のコードをGoogle Java Style Guideに準拠して修正してください。
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
以下のコードをGoogle Java Style Guideに準拠して修正してください。
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.");
}
}
問題5
以下のコードをGoogle Java Style Guideに準拠して修正してください。
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());
}
}
問題6
以下のコードをGoogle Java Style Guideに準拠して修正してください。
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.");}
}
}
問題7
以下のコードをGoogle Java Style Guideに準拠して修正してください。
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.");
}
}
}
問題8
以下のコードをGoogle Java Style Guideに準拠して修正してください。
package com.Example_Company;
public class PackageNameMistake {
public static void main(String[] args) {
System.out.println("This is an example.");
}
}
問題9
以下のコードをGoogle Java Style Guideに準拠して修正してください。
package com.example;
public class myClass {
public static void main(String[] args) {
System.out.println("This is an example.");
}
}
問題10
以下のコードをGoogle Java Style Guideに準拠して修正してください。
public class ConstantNamingIssue {
public static final String myConstant = "This is a constant";
}
問題1 回答
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 ワイルドカードインポートは禁止
問題2 回答
同じファイルにトップレベルのクラスを2つ作ってはいけない。
(トップレベルのクラスはファイルを分ける。)
該当ルール
3.4.1 1個だけのトップレベルクラスの宣言
問題3 回答
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文字
問題4 回答
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 回答
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 垂直の空白
問題6 回答
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 水平の空白
問題7 回答
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 必要なときに宣言する
問題8 回答
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 パッケージ名
問題9 回答
package com.example;
public class MyClass { // クラス名は大文字で始める
public static void main(String[] args) {
System.out.println("This is an example.");
}
}
該当ルール
5.2.2 クラス名
問題10 回答
public class ConstantNamingIssue {
public static final String MY_CONSTANT = "This is a constant";
}
該当ルール
5.2.4 定数名
最後に
誤り・ご指摘など頂けましたら嬉しいです。
必要に応じて修正対応させていただきます。