Github Copilot でのクラス⽣成例(1)、(2) 12 public class StudentData { // ⽣徒データは学籍番号・⽒・名・年齢・所属研究室のフィールドを持つ // フィールドはそれぞれfinalで、値オブジェクトである。 private final StudentId id; private final FistName fistName; private final LastName lastName; private final Age age; private final Laboratory laboratory; } public class Age { //年齢をフィールドで管理する。ただし0歳以上120歳以下にして、 //それ以外は例外を投げる } public class Age { //年齢をフィールドで管理する。ただし0歳以上120歳以下にして、 // それ以外は例外を投げる private final int value; public Age(int value) { if (value < 0 || 120 < value) { throw new IllegalArgumentException("年齢は0歳以上120歳以下です。"); } this.value = value; } } 最初はNameで提案するの で、FirstNameに書き換える と、その後LastNameを 提案してくる 1行やコードブロックごと に提案 この後は既存のIDEの推測変 換でコンストラクタや値オブ ジェクトのクラスを作ったり、 さらにほしいメソッド仕様を コメントアウトで定義し、 提案してもらう 1行やコードブロックごと に提案
//それ以外は例外を投げる } public class StudentData { // ⽣徒データは学籍番号・⽒・名・年齢・所属研究室のフィールドを持つ // フィールドはそれぞれfinalで、値オブジェクトである。 } public class StudentData { private final String studentNumber; private final String lastName; private final String firstName; private final int age; private final String researchGroup; public StudentData(String studentNumber, String lastName, String firstName, int age, String researchGroup) { this.studentNumber = studentNumber; this.lastName = lastName; this.firstName = firstName; this.age = age; this.researchGroup = researchGroup; } // フィールドに対するgetterメソッドを定義する public String getStudentNumber() { return studentNumber; } ....(以下略) まとめて提案 ありがちな コンストラクタと かメソッドも 全部提案される 値オブジェクトに なってない... public class Age { private int age; public Age(int age) throws IllegalArgumentException { if (age < 0 || age > 120) { throw new IllegalArgumentException( "Age must be between 0 and 120."); } this.age = age; } public int getAge() { return age; } public void setAge(int age) throws IllegalArgumentException { if (age < 0 || age > 120) { throw new IllegalArgumentException( "Age must be between 0 and 120."); } this.age = age; } } Java17でと提案すると、recordで の実装を提案してくれることもある (プロンプト次第)
final String studentNumber; private final String lastName; private final String firstName; private final int age; private final String researchGroup; ...(略) public record StudentRecord(String studentNumber, String lastName, String firstName, int age, String researchGroup) {} Java17でStudentDataと同じ フィールドを持つレコード を同じプロンプトの流れで聞く 同じプロンプトの流れで聞くかどうかで、回答が変わる(ステートレスなイメージ) もちろん既存コードごと投げれば、考慮して生成してくれるが、プロンプトが大変かも Java17でStudentDataと同じフィール ドを持つレコード を違う流れや新規のプロンプトで聞く public record StudentRecord(String name, int age, String address) { // コンストラクタやメソッドを定義することができます }