0Pricing
Learn Rust Coding · บทเรียน

ตัวป้องกันและการผูกค่าใน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. กำหนด enum แรกของคุณ
  2. จับคู่กับรูปแบบของ enum
  3. enum พร้อมข้อมูล
  4. ตัวป้องกันและการผูกค่าใน match
← กลับไปที่ Learn Rust Coding