การใช้ 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): ตัวเลือกที่เก็บค่าชนิดTNone: ตัวเลือกที่แสดงว่าไม่มีค่า
การใช้ `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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดและใช้งานโครงสร้าง
- การใช้ enum สำหรับชนิดข้อมูลแบบกำหนดเอง
- การจับคู่รูปแบบอันทรงพลัง