ตัวป้องกันและการผูกค่าใน match
เพิ่มเงื่อนไขและดึงค่ามาเก็บ
ตัวป้องกันและการผูกค่าใน match เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
ตัวกรอง Match คืออะไร
ตัวกรอง match คือเงื่อนไข if เพิ่มเติมที่ใส่ในแขนงของ match แขนงนั้นจะทำงานก็ต่อเมื่อรูปแบบตรงกัน และเงื่อนไขเป็นจริง
ตัวกรองนี้ช่วยแบ่งรูปแบบหนึ่งรูปแบบออกเป็นกรณีย่อยที่ละเอียดขึ้นตามข้อมูลของรูปแบบนั้น
match number {
Some(n) if n > 0 => println!("positive"),
Some(n) => println!("zero or negative"),
None => println!("no number"),
}ไวยากรณ์ของตัวกรอง
เขียนรูปแบบก่อน จากนั้นเขียน if condition แล้วตามด้วย => เงื่อนไขสามารถใช้ตัวแปรใด ๆ ที่รูปแบบผูกค่าไว้ได้
หากตัวกรองเป็นเท็จ Rust จะไปลองแขนงถัดไป
fn main() {
let n = 4;
match n {
x if x % 2 == 0 => println!("even"),
_ => println!("odd"),
}
}ตัวกรองกับข้อมูลใน Enum
ตัวกรองมีประโยชน์มากที่สุดเมื่อใช้กับ enum ที่เก็บข้อมูล คุณผูกค่าภายในไว้กับชื่อ แล้วจึงตรวจสอบค่านั้น
ในตัวอย่างนี้ ยอดคงเหลือที่เป็นบวกและลบจะแสดงข้อความต่างกัน แม้ว่าทั้งคู่จะเป็นรูปแบบเดียวกัน
enum Account {
Balance(i32),
Closed,
}
fn main() {
let a = Account::Balance(-5);
match a {
Account::Balance(b) if b < 0 => println!("overdrawn"),
Account::Balance(b) => println!("balance {}", b),
Account::Closed => println!("closed"),
}
}ลำดับยังคงสำคัญ
เนื่องจากแขนงต่าง ๆ จะถูกลองจากบนลงล่าง ให้ใส่แขนงที่มีตัวกรองและ เฉพาะเจาะจงกว่า ไว้ก่อนแขนงทั่วไป
หากแขนง Balance(b) ธรรมดาอยู่ก่อน มันจะจับคู่ได้กับทุกกรณี และแขนงที่มีตัวกรองจะไม่มีโอกาสทำงาน
การจับคู่ค่าคงที่
คุณสามารถจับคู่กับค่าคงที่เฉพาะเจาะจงได้โดยตรงในรูปแบบ โดยไม่ต้องใช้ตัวกรอง
ในที่นี้ 0 และ 1 จะจับคู่แบบตรงตัว ส่วน _ จะจัดการค่าที่เหลือ
fn main() {
let n = 1;
match n {
0 => println!("zero"),
1 => println!("one"),
_ => println!("many"),
}
}การจับคู่ช่วงค่า
รูปแบบสามารถจับคู่กับช่วงของค่าได้ด้วย ..= ซึ่งรวมค่าที่ปลายทั้งสองด้าน
นี่เป็นทางเลือกที่อ่านง่ายแทนการใช้ตัวกรองเปรียบเทียบหลายรายการ
fn main() {
let score = 85;
match score {
0..=59 => println!("fail"),
60..=100 => println!("pass"),
_ => println!("out of range"),
}
}การผูกค่าด้วยตัวดำเนินการ @
ตัวดำเนินการ @ ช่วยให้คุณตรวจสอบค่ากับรูปแบบ และผูกค่านั้นไว้กับชื่อในเวลาเดียวกัน
ในที่นี้ id @ 1..=5 ตรวจสอบว่าค่าอยู่ในช่วงหรือไม่ และเก็บค่าจริงไว้ใน id เพื่อให้คุณพิมพ์ค่าได้
fn main() {
let n = 3;
match n {
id @ 1..=5 => println!("small id {}", id),
other => println!("other {}", other),
}
}การผูกค่าทั้งหมด
ชื่อธรรมดาในรูปแบบ เช่น other ด้านบน จะผูกค่าทั้งหมดไว้กับชื่อนั้น ทำหน้าที่เป็นรูปแบบที่จับได้ทุกกรณีและยังนำไปใช้ต่อได้
ใช้ _ เมื่อต้องการไม่สนใจค่า และใช้ชื่อเมื่อต้องการนำค่าไปใช้
fn main() {
let n = 99;
match n {
0 => println!("zero"),
value => println!("got {}", value),
}
}ใช้ตัวกรองร่วมกับการผูกค่า
คุณสามารถรวมการผูกค่าเข้ากับตัวกรองเพื่อควบคุมได้อย่างแม่นยำ โดยผูกข้อมูลไว้ก่อนแล้วจึงเพิ่มเงื่อนไข
โปรแกรมนี้จะแยกยอดคงเหลือที่เป็นเลขคู่และมีค่ามากออกมาเป็นกรณีพิเศษ
enum Account {
Balance(i32),
}
fn main() {
let a = Account::Balance(200);
match a {
Account::Balance(b) if b > 100 && b % 2 == 0 => println!("big even {}", b),
Account::Balance(b) => println!("normal {}", b),
}
}ตัวกรองเหนือหลายรูปแบบ
ตัวกรองจะมีผลกับแขนงทั้งหมด แม้แขนงนั้นจะรวมหลายรูปแบบด้วย |
เงื่อนไขจะถูกตรวจสอบหลังจากมีรูปแบบใดรูปแบบหนึ่งที่ระบุไว้จับคู่สำเร็จ
fn main() {
let n = 6;
match n {
2 | 4 | 6 if n > 3 => println!("big even"),
_ => println!("other"),
}
}นำทุกอย่างมารวมกัน
โปรแกรมสุดท้ายนี้รวมรูปแบบที่มีข้อมูล การผูกค่า ตัวกรอง และรูปแบบที่จับได้ทุกกรณี เพื่อจัดประเภทค่าการอ่านอุณหภูมิ
เปลี่ยนค่าแล้วเรียกใช้โปรแกรมอีกครั้งเพื่อดูว่าแขนงต่าง ๆ ทำงานแตกต่างกันอย่างไร
enum Reading {
Temp(i32),
Missing,
}
fn main() {
let r = Reading::Temp(38);
match r {
Reading::Temp(t) if t >= 38 => println!("fever: {}", t),
Reading::Temp(t) => println!("normal: {}", t),
Reading::Missing => println!("no reading"),
}
}ตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจเกี่ยวกับตัวกรองและการผูกค่า
สรุปทบทวน
คุณได้เรียนรู้การปรับการจับคู่ให้ละเอียดขึ้นด้วย ตัวกรอง (pattern if condition) การจับคู่กับค่าคงที่และช่วงค่า (..=) รวมถึงการสร้างการผูกค่าด้วยชื่อหรือตัวดำเนินการ @
เมื่อรวมกับเนื้อหาก่อนหน้า ตอนนี้คุณสามารถจำลองชุดสถานะที่กำหนดไว้ล่วงหน้า เพิ่มข้อมูลให้สถานะเหล่านั้น และตอบสนองต่อแต่ละกรณีได้อย่างแม่นยำ ขอแสดงความยินดีกับความก้าวหน้าในการเรียนรู้ enum และ match
คำถามที่พบบ่อย
บทเรียน “ตัวป้องกันและการผูกค่าใน match” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวป้องกันและการผูกค่าใน match” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวป้องกันและการผูกค่าใน match”
เพิ่มเงื่อนไขและดึงค่ามาเก็บ คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวป้องกันและการผูกค่าใน match” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม
ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กำหนด enum แรกของคุณ
- จับคู่กับรูปแบบของ enum
- enum พร้อมข้อมูล
- ตัวป้องกันและการผูกค่าใน match