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

การใช้ enum สำหรับชนิดข้อมูลแบบกำหนดเอง

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

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

Enum: ตัวเลือกของชนิดข้อมูลแบบกำหนดเอง

ยินดีต้อนรับสู่Enum สำหรับชนิดข้อมูลแบบกำหนดเอง ใน Rust enum (enumerations) ช่วยให้คุณกำหนดชนิดข้อมูลที่อาจเป็นหนึ่งในตัวเลือกหลายแบบที่แตกต่างกันได้

ให้คิดว่า enum เป็นวิธีบอกว่า "รายการนี้อาจเป็น A, OR B, OR C" ซึ่งมีประโยชน์อย่างยิ่งสำหรับการแทนสถานะหรือตัวเลือกต่าง ๆ

การกำหนด Enum แบบง่าย

หากต้องการกำหนด enum ให้ใช้คีย์เวิร์ด enum ตามด้วยชื่อและวงเล็บปีกกาที่บรรจุตัวเลือกต่าง ๆ แต่ละตัวเลือกเป็นทางเลือกที่แตกต่างกัน

ต่อไปนี้คือตัวอย่างง่าย ๆ สำหรับทิศหลัก:

enum Direction {
  North,
  South,
  East,
  West,
}

fn main() {
  let my_direction = Direction::North;
  println!("My direction is {:?}", my_direction);
}

Enum พร้อมข้อมูลประกอบ

ตัวเลือกของ enum ไม่ได้มีเพียงรูปแบบเรียบง่าย แต่ยังสามารถเก็บข้อมูลได้ด้วย ทำให้ enum ทรงพลังมาก เพราะแต่ละตัวเลือกสามารถเก็บชุดข้อมูลเฉพาะของตนเอง

ข้อมูลอาจเป็นทูเพิล (เช่น (i32, String)) หรือโครงสร้าง (เช่น { x: i32, y: i32 })

การใช้ข้อมูลประกอบจริง

มาดู enum ที่แต่ละตัวเลือกแทนชนิดข้อความที่แตกต่างกัน โดยบางตัวเลือกมีข้อมูลและบางตัวเลือกไม่มี

สังเกตว่า Move ใช้โครงสร้าง Write ใช้ String และ ChangeColor ใช้ทูเพิล

enum Message {
  Quit,
  Move { x: i32, y: i32 },
  Write(String),
  ChangeColor(i32, i32, i32),
}

fn main() {
  let m1 = Message::Quit;
  let m2 = Message::Move { x: 10, y: 20 };
  let m3 = Message::Write(String::from("hello"));
  let m4 = Message::ChangeColor(255, 0, 128);

  // We can't directly print enums with associated data using {:?}
  // without deriving Debug, which we'll cover later.
  // For now, just know these instances are created.
  println!("Messages created!");
}

Enum `Option`: การจัดการกรณีไม่มีค่า

หนึ่งใน enum พื้นฐานที่สุดของ Rust คือ Option<T> ซึ่งใช้แทนค่าที่อาจมีหรือไม่มีก็ได้ และช่วยป้องกันข้อผิดพลาดจากตัวชี้ null ที่พบได้บ่อยในภาษาอื่น

  • Some(T): ตัวเลือกที่เก็บค่าชนิด T
  • None: ตัวเลือกที่แสดงว่าไม่มีค่า

การใช้ `Option<T>` อย่างมีประสิทธิภาพ

Option<T> บังคับให้คุณจัดการทั้งกรณี Some และ None อย่างชัดเจน ทำให้โค้ดปลอดภัยและแข็งแกร่งยิ่งขึ้น ไม่ต้องพบข้อขัดข้องจาก null ที่ไม่คาดคิดอีกต่อไป

ต่อไปนี้คือตัวอย่างการใช้งาน:

fn find_item(id: i32) -> Option<String> {
  if id == 7 {
    Some(String::from("Found item 7!"))
  } else {
    None
  }
}

fn main() {
  let item1 = find_item(7);
  let item2 = find_item(5);

  println!("Item 1: {:?}", item1);
  println!("Item 2: {:?}", item2);
}

กล่าวโดยสรุป: Enum `Result`

อีก enum ที่สำคัญคือ Result<T, E> ซึ่งใช้สำหรับจัดการข้อผิดพลาด โดยมีอยู่สองรูปแบบ:

  • Ok(T): แสดงว่าดำเนินการสำเร็จและเก็บค่าที่สำเร็จไว้
  • Err(E): แสดงว่าดำเนินการล้มเหลวและเก็บค่าข้อผิดพลาดไว้

เราจะศึกษา Result อย่างละเอียดในบทเรียนถัดไป แต่ตอนนี้ควรทราบไว้ว่า นี่เป็นรูปแบบ enum ที่ทรงพลังอีกแบบหนึ่ง

เมธอดของ Enum

เช่นเดียวกับโครงสร้าง คุณสามารถกำหนดเมธอดให้ enum ได้โดยใช้บล็อก impl เมธอดเหล่านี้สามารถดำเนินการต่าง ๆ หรือส่งคืนค่าโดยอิงตามรูปแบบของ enum

มาลองเพิ่มเมธอด call ให้กับ enum Message จากก่อนหน้านี้กัน

enum Message {
  Quit,
  Move { x: i32, y: i32 },
  Write(String),
  ChangeColor(i32, i32, i32),
}

impl Message {
  fn call(&self) {
    println!("A message was called!");
  }
}

fn main() {
  let m = Message::Write(String::from("hello"));
  m.call();
}

ตรวจสอบความเข้าใจเรื่อง Enum อย่างรวดเร็ว

ข้อความใดต่อไปนี้เป็นจริงเกี่ยวกับ enum ของ Rust

ทบทวน: ใช้ Enum สำหรับชนิดข้อมูลแบบกำหนดเอง

ทำได้ดีมาก คุณได้เรียนรู้แล้วว่า enum ของ Rust เป็นวิธีที่ทรงพลังในการกำหนดชนิดข้อมูลแบบกำหนดเอง ซึ่งสามารถมีได้หลายรูปแบบ

  • Enum ช่วยให้คุณจำลองตัวเลือกและสถานะต่าง ๆ ได้อย่างชัดเจน
  • รูปแบบต่าง ๆ สามารถเก็บข้อมูลที่เกี่ยวข้องไว้ได้ จึงมีความยืดหยุ่นสูง
  • Enum Option<T> เป็นกุญแจสำคัญสำหรับจัดการกรณีที่ไม่มีค่าอย่างปลอดภัย
  • Enum สามารถมีเมธอดที่กำหนดไว้ในบล็อก impl ได้

ถัดไป เราจะสำรวจวิธีทำงานกับรูปแบบต่าง ๆ ของ enum เหล่านี้โดยใช้การจับคู่รูปแบบอันทรงพลัง

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

บทเรียน “การใช้ enum สำหรับชนิดข้อมูลแบบกำหนดเอง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ enum สำหรับชนิดข้อมูลแบบกำหนดเอง”

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

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

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

บทเรียน “การใช้ enum สำหรับชนิดข้อมูลแบบกำหนดเอง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การกำหนดและใช้งานโครงสร้าง
  2. การใช้ enum สำหรับชนิดข้อมูลแบบกำหนดเอง
  3. การจับคู่รูปแบบอันทรงพลัง
← กลับไปที่ Learn Rust Coding