0Pricing
Java Academy · บทเรียน

รูปแบบเรคคอร์ด

แยกโครงสร้างเรคคอร์ดด้วยรูปแบบ

รูปแบบเรคคอร์ด เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

รูปแบบเรคคอร์ด

รูปแบบเรคคอร์ดใช้จับคู่กับเรคคอร์ดและแยกโครงสร้าง โดยผูกองค์ประกอบของเรคคอร์ดเข้ากับตัวแปรในขั้นตอนเดียว ไม่ต้องเรียกตัวเข้าถึงแต่ละตัวด้วยตนเองอีกต่อไป

เรคคอร์ดสำหรับแยกโครงสร้าง

เริ่มต้นด้วยเรคคอร์ดอย่างง่าย องค์ประกอบของเรคคอร์ดคือสิ่งที่รูปแบบสามารถดึงออกมาได้

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Point p = new Point(3, 4);
        System.out.println(p.x() + ", " + p.y());
    }
}

การแยกโครงสร้างด้วยการตรวจสอบชนิด

แทนที่จะใช้ instanceof Point p แล้วเรียก p.x() ให้เขียน instanceof Point(int x, int y) เพื่อผูก x และ y โดยตรง

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Object obj = new Point(3, 4);
        if (obj instanceof Point(int x, int y)) {
            System.out.println("Sum: " + (x + y));
        }
    }
}

องค์ประกอบกลายเป็นตัวแปรเฉพาะที่

ชื่อภายในรูปแบบ (x, y) คือตัวแปรเฉพาะที่ตัวใหม่ซึ่งเก็บค่าขององค์ประกอบในเรคคอร์ด คุณเลือกชื่อเองได้ และชื่อเหล่านั้นไม่จำเป็นต้องตรงกับชื่อในเรคคอร์ด

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Object obj = new Point(10, 20);
        if (obj instanceof Point(int a, int b)) {
            System.out.println("a=" + a + " b=" + b);
        }
    }
}

การใช้การอนุมานชนิดในรูปแบบ

คุณสามารถเขียน var สำหรับองค์ประกอบเพื่อให้คอมไพเลอร์อนุมานชนิดให้ได้ ซึ่งมีประโยชน์เมื่อชนิดมีชื่อยาว

public class Main {
    record Pair(String key, Integer value) {}

    public static void main(String[] args) {
        Object obj = new Pair("age", 30);
        if (obj instanceof Pair(var key, var value)) {
            System.out.println(key + " = " + value);
        }
    }
}

รูปแบบในคำสั่งสวิตช์

รูปแบบเรคคอร์ดยังใช้ในคำสั่งสวิตช์ได้ ทำให้แขนงของแต่ละกรณีอ่านคล้ายรูปร่างของข้อมูล

public class Main {
    record Point(int x, int y) {}

    static String classify(Object obj) {
        return switch (obj) {
            case Point(int x, int y) when x == y -> "on diagonal";
            case Point(int x, int y) -> "at " + x + "," + y;
            default -> "not a point";
        };
    }

    public static void main(String[] args) {
        System.out.println(classify(new Point(5, 5)));
        System.out.println(classify(new Point(1, 2)));
    }
}

การจับคู่ด้วยการอนุมานชนิด

ชนิดขององค์ประกอบในรูปแบบต้องเข้ากันได้กับชนิดที่ประกาศไว้ในเรคคอร์ด การใช้ชนิดที่ตรงกันหรือ var เป็นทางเลือกที่ปลอดภัย

การใช้ร่วมกับเงื่อนไขกำกับ

เพิ่มเงื่อนไขกำกับ when หลังรูปแบบเรคคอร์ด เพื่อจับคู่เฉพาะเมื่อค่าที่แยกโครงสร้างแล้วเป็นไปตามเงื่อนไข

public class Main {
    record Temperature(double celsius) {}

    static String alert(Object o) {
        if (o instanceof Temperature(double c) && c > 38.0) {
            return "fever: " + c;
        }
        return "normal";
    }

    public static void main(String[] args) {
        System.out.println(alert(new Temperature(39.5)));
        System.out.println(alert(new Temperature(36.6)));
    }
}

การเข้าถึงข้อมูลที่กระชับขึ้น

รูปแบบเรคคอร์ดมีประโยชน์มากเมื่อคุณต้องการเพียงไม่กี่ฟิลด์ ช่วยตัดการเรียกตัวเข้าถึงที่ต่อกันเป็นทอด ๆ และทำให้เห็นข้อมูลที่เกี่ยวข้องได้ชัดเจนตรงจุดจับคู่

ค่าว่างกับรูปแบบเรคคอร์ด

เช่นเดียวกับรูปแบบ instanceof ทั้งหมด รูปแบบเรคคอร์ดจะไม่จับคู่กับค่าว่าง การแยกโครงสร้างจะเกิดขึ้นต่อเมื่อยืนยันแล้วว่าค่านั้นเป็นอินสแตนซ์ที่ไม่ใช่ค่าว่างของเรคคอร์ด

ตัวอย่างการใช้งานจริง

แยกโครงสร้างเพื่อคำนวณค่าจากองค์ประกอบโดยตรง

public class Main {
    record Rectangle(int width, int height) {}

    static int area(Object o) {
        if (o instanceof Rectangle(int w, int h)) {
            return w * h;
        }
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(area(new Rectangle(4, 5)));
        System.out.println(area("not a rect"));
    }
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับรูปแบบเรคคอร์ด

สรุปทบทวน

คุณได้เรียนรู้รูปแบบเรคคอร์ด

  • ตรวจสอบชนิดเรคคอร์ดและแยกโครงสร้างองค์ประกอบในครั้งเดียว
  • ชื่อองค์ประกอบเป็นตัวแปรเฉพาะที่ตัวใหม่ที่คุณเลือกเอง ส่วน var ใช้สำหรับอนุมานชนิด
  • ใช้ได้ทั้งใน instanceof และ switch
  • เช่นเดียวกับรูปแบบทั้งหมด รูปแบบเหล่านี้จะไม่จับคู่กับค่าว่าง

คำถามที่พบบ่อย

บทเรียน “รูปแบบเรคคอร์ด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “รูปแบบเรคคอร์ด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบเรคคอร์ด”

แยกโครงสร้างเรคคอร์ดด้วยรูปแบบ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “รูปแบบเรคคอร์ด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การจับคู่รูปแบบสำหรับ instanceof
  2. รูปแบบเรคคอร์ด
  3. รูปแบบเรคคอร์ดซ้อน
  4. รูปแบบใน switch
← กลับไปที่ Java Academy