กำหนด enum แรกของคุณ
สร้างชนิดข้อมูลแบบแจกแจงอย่างง่าย
กำหนด enum แรกของคุณ เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
Enum คืออะไร
enum หรือการแจกแจง ช่วยให้คุณกำหนดชนิดข้อมูลด้วยการระบุค่าที่เป็นไปได้ เรียกค่าเหล่านี้ว่า รูปแบบย่อย ค่าของชนิดนี้จะเป็นหนึ่งในรูปแบบย่อยเหล่านั้นได้เพียงรูปแบบเดียวเท่านั้น
Enum เหมาะอย่างยิ่งเมื่อสิ่งหนึ่งมีสถานะที่กำหนดไว้ตายตัว เช่น ทิศหลักหรือดอกไพ่ในสำรับ
enum Direction {
North,
South,
East,
West,
}การประกาศ Enum
คุณประกาศ enum ด้วยคำสำคัญ enum ตามด้วยชื่อและรายการรูปแบบย่อยที่คั่นด้วยจุลภาคภายในวงเล็บปีกกา
ตามธรรมเนียม ชื่อ enum ใช้รูปแบบ PascalCase เช่น Direction และชื่อรูปแบบย่อยก็ใช้รูปแบบเดียวกัน เช่น North
enum TrafficLight {
Red,
Yellow,
Green,
}การสร้างค่า Enum
หากต้องการสร้างค่า ให้เขียนชื่อ enum ตามด้วยเครื่องหมายโคลอนคู่ :: แล้วจึงเขียนรูปแบบย่อย
ตัวอย่างเช่น Direction::North สร้างค่าชนิด Direction เครื่องหมาย :: บอก Rust ว่ารูปแบบย่อยนี้เป็นของ enum ใด
enum Direction {
North,
South,
East,
West,
}
fn main() {
let heading = Direction::East;
println!("Created a direction value!");
}Enum เป็นชนิดข้อมูล
เมื่อกำหนดแล้ว enum ก็เป็นชนิดข้อมูลจริงเช่นเดียวกับ i32 หรือ bool คุณสามารถเก็บค่าไว้ในตัวแปรและส่งค่าให้ฟังก์ชันได้
ฟังก์ชันที่รับ Direction จะยอมรับรูปแบบย่อยใดก็ได้ของชนิดนี้ แต่จะไม่ยอมรับค่าอื่น
enum Direction {
North,
South,
}
fn describe(d: Direction) {
println!("Got a direction");
}
fn main() {
describe(Direction::North);
}เหตุใดจึงไม่ใช้ตัวเลข
คุณอาจแทนสัญญาณไฟจราจรด้วย 0 1 และ 2 ได้ แต่ไม่มีอะไรป้องกันไม่ให้คุณเผลอใช้ 7
Enum ทำให้สถานะที่ไม่ถูกต้อง เป็นไปไม่ได้ โดยคอมไพเลอร์รับประกันว่าค่าจะเป็นหนึ่งในรูปแบบย่อยที่ระบุไว้เสมอ วิธีนี้ปลอดภัยกว่าและอ่านได้ง่ายกว่ามาก
การสร้าง Debug เพื่อแสดงผล
โดยค่าเริ่มต้น Rust ไม่ทราบวิธีแสดงผล enum การเพิ่ม #[derive(Debug)] ไว้เหนือ enum จะทำให้คุณแสดงผลด้วยตัวจัดรูปแบบ {:?} ได้
วิธีนี้เหมาะมากสำหรับการแก้จุดบกพร่องอย่างรวดเร็วระหว่างที่คุณเรียนรู้
#[derive(Debug)]
enum Direction {
North,
South,
}
fn main() {
let d = Direction::South;
println!("{:?}", d);
}การเปรียบเทียบค่า Enum
เพิ่ม #[derive(PartialEq)] เพื่อให้คุณเปรียบเทียบรูปแบบย่อยด้วย == ได้
วิธีนี้เหมาะสำหรับการตรวจสอบง่าย ๆ แต่หากต้องการพฤติกรรมที่ซับซ้อนขึ้น นิพจน์ match ซึ่งจะเรียนในเร็ว ๆ นี้มักเป็นเครื่องมือที่ดีกว่า
#[derive(PartialEq)]
enum Light {
Red,
Green,
}
fn main() {
let l = Light::Red;
if l == Light::Red {
println!("Stop!");
}
}มีรูปแบบย่อยได้มากมาย
Enum สามารถมีรูปแบบย่อยได้มากเท่าที่คุณต้องการ รูปแบบย่อยทั้งหมดเป็นส่วนหนึ่งของชนิดข้อมูลเดียวกัน
การรวมสถานะที่เกี่ยวข้องไว้ด้วยกันช่วยให้โค้ดเป็นระเบียบ และทำให้เห็นตัวเลือกที่เป็นไปได้ทั้งหมดได้ทันที
enum Suit {
Hearts,
Diamonds,
Clubs,
Spades,
}Enum ในไลบรารีมาตรฐาน
ไลบรารีมาตรฐานของ Rust ใช้ enum อยู่ทุกที่ ตัวอย่างที่มีชื่อเสียงสองชนิดคือ Option ซึ่งเป็นค่าที่อาจมีอยู่หรือไม่มีก็ได้ และ Result ซึ่งแทนความสำเร็จหรือข้อผิดพลาด
การเรียนรู้ enum ในตอนนี้จะเตรียมความพร้อมให้คุณเข้าใจชนิดข้อมูลหลักเหล่านี้ในภายหลัง
// Option is an enum in std:
// enum Option<T> {
// Some(T),
// None,
// }การคัดลอก Enum แบบง่าย
Enum ที่รูปแบบย่อยไม่มีข้อมูลสามารถสร้าง Clone และ Copy ได้ จากนั้นค่าจะถูกคัดลอกโดยอัตโนมัติแทนที่จะถูกย้าย
วิธีนี้ทำให้ enum ที่ใช้แทนสถานะขนาดเล็กมีพฤติกรรมเหมือนค่าธรรมดา เช่น จำนวนเต็ม
#[derive(Clone, Copy)]
enum Coin {
Heads,
Tails,
}
fn main() {
let a = Coin::Heads;
let b = a; // a is still usable
}นำทุกอย่างมาประกอบกัน
นี่คือโปรแกรมฉบับสมบูรณ์: กำหนด enum สร้างค่า และแสดงผลด้วย Debug
ลองเรียกใช้โปรแกรม แล้วเปลี่ยน Green เป็นรูปแบบย่อยอื่นเพื่อดูผลลัพธ์ที่เปลี่ยนไป
#[derive(Debug)]
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
let current = TrafficLight::Green;
println!("Light is {:?}", current);
}ตรวจสอบอย่างรวดเร็ว
ทดสอบความเข้าใจพื้นฐานเกี่ยวกับ enum ของคุณ
สรุปทบทวน
คุณได้เรียนรู้ว่า enum กำหนดชนิดข้อมูลจากรายการ รูปแบบย่อย ที่ตายตัว โดยประกาศด้วยคำสำคัญ enum
คุณสร้างค่าด้วย EnumName::Variant และสามารถสร้าง Debug PartialEq หรือ Copy เพื่อแสดงผล เปรียบเทียบ หรือคัดลอกค่าได้ ต่อไปคุณจะเรียนรู้การตอบสนองต่อรูปแบบย่อยแต่ละแบบด้วย match
คำถามที่พบบ่อย
บทเรียน “กำหนด 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 ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “กำหนด enum แรกของคุณ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม
ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กำหนด enum แรกของคุณ
- จับคู่กับรูปแบบของ enum
- enum พร้อมข้อมูล
- ตัวป้องกันและการผูกค่าใน match