กรณีที่มีหลายป้ายกำกับ
จัดกลุ่มป้ายกำกับหลายรายการเข้าด้วยกัน
กรณีที่มีหลายป้ายกำกับ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การจัดกลุ่มป้ายกำกับ
บ่อยครั้งที่หลายค่าควรเรียกใช้การทำงานเดียวกัน Java สมัยใหม่อนุญาตให้คุณระบุป้ายกำกับหลายรายการในกรณีเดียว โดยคั่นด้วยเครื่องหมายจุลภาคและใช้สาขาร่วมกัน
ป้ายกำกับคั่นด้วยจุลภาค
เขียนค่าต่าง ๆ ต่อกันโดยคั่นด้วยเครื่องหมายจุลภาคก่อน -> หากค่าใดค่าหนึ่งตรงกัน สาขานั้นจะทำงาน
public class Main {
public static void main(String[] args) {
int day = 7;
switch (day) {
case 1, 2, 3, 4, 5 -> System.out.println("Weekday");
case 6, 7 -> System.out.println("Weekend");
}
}
}การตรวจจับสระ
ตัวอย่างการใช้งานแบบคลาสสิกคือการจัดกลุ่มสระทั้งหมดไว้ในสาขาเดียว แทนการเขียนกรณีแยกกันห้ากรณี
public class Main {
public static void main(String[] args) {
char c = 'o';
switch (c) {
case 'a', 'e', 'i', 'o', 'u' -> System.out.println("Vowel");
default -> System.out.println("Consonant");
}
}
}หลายป้ายกำกับในนิพจน์
กรณีที่มีหลายป้ายกำกับใช้ในนิพจน์ switch ได้เช่นกัน โดยจะส่งคืนค่าเดียวกันสำหรับป้ายกำกับใด ๆ ที่ระบุไว้
public class Main {
public static void main(String[] args) {
int month = 7;
String season = switch (month) {
case 12, 1, 2 -> "Winter";
case 3, 4, 5 -> "Spring";
case 6, 7, 8 -> "Summer";
default -> "Autumn";
};
System.out.println(season);
}
}การจัดกลุ่มป้ายกำกับ String
ค่าประเภท String ก็สามารถจัดกลุ่มได้เช่นกัน ในที่นี้การเขียนคำสั่งหลายรูปแบบจะถูกจับคู่กับการทำงานเดียว
public class Main {
public static void main(String[] args) {
String cmd = "quit";
switch (cmd) {
case "quit", "exit", "q" -> System.out.println("Closing");
case "help", "h" -> System.out.println("Showing help");
default -> System.out.println("Unknown command");
}
}
}การจัดกลุ่มป้ายกำกับชนิดแจกแจง
ค่าคงที่ของชนิดแจกแจงสามารถใช้สาขาร่วมกันได้เช่นกัน ทำให้ตรรกะการจัดหมวดหมู่กระชับขึ้น
public class Main {
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
public static void main(String[] args) {
Day d = Day.SAT;
String kind = switch (d) {
case SAT, SUN -> "Rest";
default -> "Work";
};
System.out.println(kind);
}
}ไม่มีป้ายกำกับซ้ำ
ป้ายกำกับแต่ละรายการปรากฏได้เพียงครั้งเดียวใน switch ทั้งหมด การระบุค่าเดียวกันในสองสาขาจะทำให้เกิดข้อผิดพลาดขณะคอมไพล์ เพราะคอมไพเลอร์ไม่สามารถตัดสินใจได้ว่าควรทำงานในสาขาใด
public class Main {
public static void main(String[] args) {
int n = 2;
switch (n) {
case 1, 2 -> System.out.println("Low");
case 3, 4 -> System.out.println("High");
default -> System.out.println("Other");
}
}
}เปรียบเทียบกับการไหลต่อในรูปแบบเดิม
ในรูปแบบเดิมที่ใช้เครื่องหมายทวิภาค การจัดกลุ่มต้องใช้กรณีว่างที่ไหลต่อกันหลายกรณีวางไว้เหนือเนื้อหาสาขาร่วม เครื่องหมายจุลภาคอ่านเข้าใจได้ชัดเจนกว่ามากและช่วยหลีกเลี่ยงการไหลต่อโดยไม่ตั้งใจ
public class Main {
public static void main(String[] args) {
int code = 3;
switch (code) {
case 1, 3, 5, 7, 9 -> System.out.println("Odd");
case 0, 2, 4, 6, 8 -> System.out.println("Even");
}
}
}การจัดกลุ่มร่วมกับบล็อก
กรณีที่จัดกลุ่มสามารถใช้เนื้อหาแบบบล็อกได้เช่นกัน ป้ายกำกับใด ๆ ที่ตรงกันจะเรียกใช้บล็อกทั้งหมด
public class Main {
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A', 'B' -> {
System.out.println("Pass");
System.out.println("Well done");
}
default -> System.out.println("Try again");
}
}
}การใช้ร่วมกับ yield
ป้ายกำกับที่จัดกลุ่มและ yield สามารถทำงานร่วมกันได้เมื่อสาขาที่ใช้ร่วมกันต้องมีการคำนวณ
public class Main {
public static void main(String[] args) {
int n = 4;
int points = switch (n) {
case 1, 2, 3 -> 10;
case 4, 5, 6 -> {
int bonus = n * 2;
yield 20 + bonus;
}
default -> 0;
};
System.out.println(points);
}
}ช่วยให้อ่านง่ายขึ้น
กรณีที่มีหลายป้ายกำกับช่วยย่อรายการสาขาที่ยาวและซ้ำซากให้เหลือกลุ่มที่ชัดเจนไม่กี่กลุ่ม ทำให้เข้าใจเจตนาได้ทันที
public class Main {
public static void main(String[] args) {
int http = 204;
String group = switch (http / 100) {
case 1, 2, 3 -> "OK-ish";
case 4, 5 -> "Error";
default -> "Unknown";
};
System.out.println(group);
}
}ตรวจสอบความเข้าใจ
ใน Java สมัยใหม่ คุณจะทำให้หลายค่าเรียกใช้สาขา switch เดียวกันได้อย่างไร
สรุป
คุณได้เรียนรู้กรณีที่มีหลายป้ายกำกับดังนี้
- ระบุค่าต่าง ๆ โดยคั่นด้วยเครื่องหมายจุลภาคก่อน
-> - ใช้ได้กับจำนวนเต็ม อักขระ String และชนิดแจกแจง
- ไม่มีการไหลต่อโดยไม่ตั้งใจเหมือนในรูปแบบเดิม
- ป้ายกำกับแต่ละรายการปรากฏได้เพียงครั้งเดียว
- ใช้ร่วมกับบล็อกและ
yieldได้เมื่อจำเป็น
คำถามที่พบบ่อย
บทเรียน “กรณีที่มีหลายป้ายกำกับ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กรณีที่มีหลายป้ายกำกับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กรณีที่มีหลายป้ายกำกับ”
จัดกลุ่มป้ายกำกับหลายรายการเข้าด้วยกัน คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “กรณีที่มีหลายป้ายกำกับ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- switch แบบลูกศร
- switch เป็นนิพจน์
- คีย์เวิร์ด yield
- กรณีที่มีหลายป้ายกำกับ