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

enum พร้อมข้อมูล

แนบค่าเข้ากับแต่ละรูปแบบ

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

รูปแบบย่อยสามารถเก็บข้อมูลได้

ก่อนหน้านี้ รูปแบบย่อยของเรามีเพียงชื่อ ใน Rust รูปแบบย่อยยังสามารถ เก็บข้อมูล ไว้ภายในวงเล็บได้ด้วย

วิธีนี้ทำให้ enum เดียวสามารถอธิบายได้ทั้งชนิดของค่าและตัวค่าเอง

enum Message {
    Quit,
    Move(i32, i32),
    Write(String),
}

รูปแบบย่อยที่มีค่าหนึ่งค่า

ใส่ชนิดข้อมูลไว้ในวงเล็บเพื่อแนบข้อมูลหนึ่งชิ้นเข้ากับรูปแบบย่อย

ในที่นี้ Celsius(f64) หมายความว่ารูปแบบย่อย Celsius เก็บตัวเลขชนิด f64 ไว้ คุณต้องระบุตัวเลขนั้นเมื่อสร้างค่า

enum Temperature {
    Celsius(f64),
    Fahrenheit(f64),
}

fn main() {
    let t = Temperature::Celsius(21.5);
    println!("Created a temperature");
}

รูปแบบย่อยที่มีหลายค่า

รูปแบบย่อยสามารถเก็บค่าหลายค่า โดยคั่นแต่ละค่าด้วยจุลภาค

Move(i32, i32) เก็บจำนวนเต็มสองจำนวน ซึ่งอาจเป็นพิกัด x และ y คุณต้องส่งค่าทั้งสองเมื่อสร้างรูปแบบย่อยนี้

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

fn main() {
    let r = Shape::Rectangle(3.0, 4.0);
    println!("Made a rectangle");
}

การดึงข้อมูลด้วย match

หากต้องการอ่านข้อมูลภายในรูปแบบย่อย ให้ตั้งชื่อข้อมูลนั้นในรูปแบบ ชื่อเหล่านี้จะกลายเป็นตัวแปรที่คุณใช้ได้ในแขนงนั้น

ในที่นี้ Shape::Circle(r) จะผูกค่ารัศมีที่เก็บไว้เข้ากับ r

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

fn main() {
    let s = Shape::Circle(2.0);
    match s {
        Shape::Circle(r) => println!("radius {}", r),
        Shape::Rectangle(w, h) => println!("{} x {}", w, h),
    }
}

การใช้ค่าที่ผูกไว้

เมื่อผูกข้อมูลเข้ากับชื่อแล้ว คุณก็สามารถคำนวณกับข้อมูลนั้นได้เหมือนตัวแปรทั่วไป

โปรแกรมนี้จับคู่รูปร่างและคำนวณพื้นที่ โดยส่งคืนผลลัพธ์จาก match

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

fn main() {
    let s = Shape::Rectangle(3.0, 4.0);
    let area = match s {
        Shape::Circle(r) => 3.14 * r * r,
        Shape::Rectangle(w, h) => w * h,
    };
    println!("area = {}", area);
}

ข้อมูลที่แตกต่างกันในแต่ละรูปแบบย่อย

แต่ละรูปแบบสามารถเก็บข้อมูลที่มีโครงสร้างแตกต่างกันได้ และบางรูปแบบอาจไม่เก็บข้อมูลเลย

ความยืดหยุ่นนี้ทำให้ enum สื่อความหมายได้ดีมาก นั่นคือชนิดข้อมูลหนึ่งชนิดสามารถแทนกรณีที่แตกต่างกันได้หลายกรณี

enum Message {
    Quit,
    Move(i32, i32),
    Write(String),
}

รูปแบบคล้าย Struct

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

คุณสร้างรูปแบบนี้โดยตั้งชื่อแต่ละฟิลด์ และใช้วิธีเดียวกันเมื่อจับคู่รูปแบบ

enum Event {
    Click { x: i32, y: i32 },
    KeyPress(char),
}

fn main() {
    let e = Event::Click { x: 10, y: 20 };
    match e {
        Event::Click { x, y } => println!("click at {},{}", x, y),
        Event::KeyPress(c) => println!("key {}", c),
    }
}

สตริงในรูปแบบต่าง ๆ

รูปแบบต่าง ๆ สามารถเก็บข้อมูลที่เป็นเจ้าของเอง เช่น String ได้ การจับคู่จะทำให้คุณเข้าถึงข้อความได้

หมายเหตุ: การจับคู่ตามค่าจะย้ายข้อมูลออกมา ซึ่งไม่เป็นปัญหาในที่นี้ เพราะเราใช้งานข้อมูลนั้นทันที

enum Message {
    Write(String),
    Quit,
}

fn main() {
    let m = Message::Write(String::from("hello"));
    match m {
        Message::Write(text) => println!("text: {}", text),
        Message::Quit => println!("bye"),
    }
}

Enum Option มาตรฐาน

Option<T> ที่มีมาให้ใน Rust เป็น enum ที่เก็บข้อมูลได้ โดย Some(T) เก็บค่าไว้ ส่วน None ไม่เก็บอะไรเลย

นี่คือวิธีที่ Rust ใช้แทนความหมายว่า "อาจมีค่า" โดยไม่ใช้ null คุณจับคู่รูปแบบนี้ได้เช่นเดียวกับ enum ที่สร้างเอง

fn main() {
    let maybe: Option<i32> = Some(5);
    match maybe {
        Some(n) => println!("got {}", n),
        None => println!("nothing"),
    }
}

นำทุกอย่างมารวมกัน

โปรแกรมสมบูรณ์นี้จำลองอุณหภูมิ จากนั้นแปลงค่าอุณหภูมิ Celsius เป็น Fahrenheit ภายใน match

ลองเปลี่ยนรูปแบบหรือค่าของรูปแบบ แล้วเรียกใช้โปรแกรมอีกครั้ง

enum Temperature {
    Celsius(f64),
    Fahrenheit(f64),
}

fn main() {
    let t = Temperature::Celsius(25.0);
    let f = match t {
        Temperature::Celsius(c) => c * 9.0 / 5.0 + 32.0,
        Temperature::Fahrenheit(f) => f,
    };
    println!("{} F", f);
}

เมื่อใดควรใช้รูปแบบที่มีข้อมูล

เลือกใช้รูปแบบที่เก็บข้อมูลเมื่อแต่ละกรณีมีข้อมูลเพิ่มเติมประกอบอยู่อย่างเป็นธรรมชาติ

  • Circle ต้องมีรัศมี
  • ข้อความ Write ต้องมีข้อความ
  • Move ต้องมีพิกัด

การรวมข้อมูลไว้กับรูปแบบช่วยให้ข้อมูลที่เกี่ยวข้องอยู่ด้วยกันและปลอดภัยตามชนิดข้อมูล

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

ตรวจสอบความเข้าใจเกี่ยวกับ enum ที่เก็บข้อมูล

สรุปทบทวน

คุณได้เรียนรู้ว่าแต่ละรูปแบบของ enum สามารถ เก็บข้อมูล ได้ ไม่ว่าจะเป็นค่าเดียว หลายค่า ฟิลด์ที่มีชื่อคล้าย struct หรือไม่เก็บข้อมูลเลย

คุณได้เรียนรู้การอ่านข้อมูลโดยตั้งชื่อข้อมูลนั้นในรูปแบบของ match เช่น Circle(r) ชนิดข้อมูลมาตรฐานอย่าง Option ก็ทำงานในลักษณะเดียวกัน ต่อไปคุณจะปรับการจับคู่ให้ละเอียดขึ้นด้วยตัวกรองและการผูกค่า

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

บทเรียน “enum พร้อมข้อมูล” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “enum พร้อมข้อมูล”

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

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

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

บทเรียน “enum พร้อมข้อมูล” ใช้เวลานานแค่ไหน

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

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

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

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

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