คีย์เวิร์ด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- switch แบบลูกศร
- switch เป็นนิพจน์
- คีย์เวิร์ด yield
- กรณีที่มีหลายป้ายกำกับ