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

กำหนด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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