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