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

คีย์เวิร์ด yield

สร้างค่าจากบล็อก switch

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

เมื่อหนึ่งบรรทัดไม่เพียงพอ

สาขาลูกศรอย่าง case 1 -> 42; จะส่งคืนค่าโดยตรง แต่ถ้าสาขาต้องมีหลายคำสั่งก่อนสร้างค่า จะทำอย่างไร นั่นคือจุดที่ yield เข้ามาช่วย

คีย์เวิร์ด yield

ภายในสาขาแบบบล็อก { } คีย์เวิร์ด yield จะกำหนดค่าที่นิพจน์ switch สร้างขึ้น ให้คิดว่าเหมือนกับ return แต่ใช้สำหรับสาขาของ switch

public class Main {
    public static void main(String[] args) {
        int n = 3;
        int result = switch (n) {
            case 3 -> {
                int squared = n * n;
                yield squared;
            }
            default -> 0;
        };
        System.out.println(result);
    }
}

yield ภายในบล็อก

คุณสามารถดำเนินตรรกะใด ๆ ภายในบล็อกก่อนเรียกใช้ yield สิ่งสุดท้ายที่บล็อกควรทำคือ yield ค่าออกมา

public class Main {
    public static void main(String[] args) {
        int amount = 250;
        String label = switch (amount / 100) {
            case 0 -> "small";
            default -> {
                System.out.println("Computing label...");
                yield "large";
            }
        };
        System.out.println(label);
    }
}

การผสมสาขาลูกศรกับสาขาแบบบล็อก

นิพจน์ switch เดียวสามารถผสมสาขาลูกศรแบบง่ายกับสาขาแบบบล็อกที่ใช้ yield ได้ เลือกใช้รูปแบบที่เหมาะกับแต่ละกรณี

public class Main {
    public static void main(String[] args) {
        int code = 2;
        String msg = switch (code) {
            case 1 -> "One";
            case 2 -> {
                String s = "T" + "wo";
                yield s;
            }
            default -> "Other";
        };
        System.out.println(msg);
    }
}

การคำนวณก่อน yield

สาขาแบบบล็อกเหมาะอย่างยิ่งเมื่อค่าต้องผ่านการคำนวณ ในที่นี้เราจะหาผลรวมของตัวเลขแต่ละหลักก่อนส่งคืนผลรวมด้วย yield

public class Main {
    public static void main(String[] args) {
        int category = 1;
        int value = switch (category) {
            case 1 -> {
                int sum = 0;
                for (int i = 1; i <= 5; i++) {
                    sum += i;
                }
                yield sum;
            }
            default -> 0;
        };
        System.out.println(value);
    }
}

การส่งค่าเทียบกับการคืนค่า

yield จะออกจากสาขาของ switch เท่านั้นและส่งค่ากลับมา ส่วน return จะออกจากเมธอดทั้งหมด ภายในบล็อกนิพจน์ switch ให้ใช้ yield

public class Main {
    static int classify(int n) {
        int rank = switch (n) {
            case 0 -> 0;
            default -> {
                yield (n > 0) ? 1 : -1;
            }
        };
        return rank;
    }
    public static void main(String[] args) {
        System.out.println(classify(-7));
    }
}

yield ในรูปแบบเดิมที่ใช้เครื่องหมายทวิภาค

switch แบบใช้เครื่องหมายทวิภาคก็สามารถเป็นนิพจน์ได้เช่นกัน โดยใช้ yield แทน break แต่ละส่วนที่มีป้ายกำกับจะส่งคืนค่าของตนเองด้วย yield

public class Main {
    public static void main(String[] args) {
        int day = 2;
        String name = switch (day) {
            case 1: yield "Mon";
            case 2: yield "Tue";
            default: yield "Other";
        };
        System.out.println(name);
    }
}

การส่งค่าตามเงื่อนไข

สาขาแบบบล็อกสามารถมีตรรกะ if และส่งคืนค่าที่แตกต่างกันในแต่ละเส้นทางได้ ทุกเส้นทางต้องส่งคืนค่า

public class Main {
    public static void main(String[] args) {
        int temp = 30;
        String advice = switch (temp / 10) {
            case 3 -> {
                if (temp > 35) {
                    yield "Very hot";
                }
                yield "Warm";
            }
            default -> "Mild";
        };
        System.out.println(advice);
    }
}

การส่งคืนออบเจกต์

yield ทำงานกับชนิดข้อมูลใดก็ได้ รวมถึงออบเจกต์ด้วย ในที่นี้สาขาจะสร้างและส่งคืนผลลัพธ์ StringBuilder ในรูปแบบ String

public class Main {
    public static void main(String[] args) {
        int count = 3;
        String stars = switch (count) {
            case 0 -> "";
            default -> {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < count; i++) {
                    sb.append("*");
                }
                yield sb.toString();
            }
        };
        System.out.println(stars);
    }
}

เคล็ดลับด้านความอ่านง่าย

ควรเลือกใช้สาขาลูกศรแบบง่ายเมื่อใช้ค่าเดียวได้ ใช้บล็อกและ yield เฉพาะเมื่อสาขานั้นต้องมีคำสั่งเพิ่มเติมจริง ๆ วิธีนี้จะทำให้ switch เป็นระเบียบ

public class Main {
    public static void main(String[] args) {
        int level = 2;
        int xp = switch (level) {
            case 1 -> 100;
            case 2 -> {
                int base = 100;
                yield base * 2;
            }
            default -> 0;
        };
        System.out.println(xp);
    }
}

ตัวอย่างฉบับสมบูรณ์

ลองนำทุกอย่างมารวมกันด้วยตัวแปลงสถานะแบบ HTTP ที่ใช้ทั้งสาขาลูกศรและสาขาแบบบล็อก

public class Main {
    public static void main(String[] args) {
        int status = 404;
        String message = switch (status / 100) {
            case 2 -> "Success";
            case 4 -> {
                String base = "Client error ";
                yield base + status;
            }
            case 5 -> "Server error";
            default -> "Unknown";
        };
        System.out.println(message);
    }
}

ตรวจสอบความเข้าใจ

ภายในสาขาของนิพจน์ switch ที่มีหลายคำสั่ง คีย์เวิร์ดใดใช้ส่งคืนผลลัพธ์

สรุป

คุณได้เรียนรู้คีย์เวิร์ด yield ดังนี้

  • yield สร้างค่าจากสาขาแบบบล็อก
  • ทำงานคล้าย return แต่ใช้กับสาขาของ switch เท่านั้น
  • สามารถผสมสาขาลูกศรกับสาขาแบบบล็อกได้อย่างอิสระ
  • ทุกเส้นทางของโค้ดในบล็อกต้องมี yield
  • ใช้บล็อกเฉพาะเมื่อจำเป็นต้องมีคำสั่งเพิ่มเติม

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

บทเรียน “คีย์เวิร์ด yield” ฟรีหรือไม่

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

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

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

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

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

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

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

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

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

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

  1. switch แบบลูกศร
  2. switch เป็นนิพจน์
  3. คีย์เวิร์ด yield
  4. กรณีที่มีหลายป้ายกำกับ
← กลับไปที่ Java Academy