แบบฝึกหัด Rust

Temperature Converter in Rust

Convert between Celsius and Fahrenheit with an enum that remembers the unit.

  • ระดับเริ่มต้น
  • อ่าน 3 นาที
  • ตัวอย่างที่รันได้ 1 ตัวอย่าง
สิ่งที่คุณจะได้เรียนรู้
  • An enum with data
  • match to convert
  • Formatting with {:.1}
convert
100.0°C212.0°F
98.6°F37.0°C
-40.0°C-40.0°F

The unit is part of the value

An enum can record which unit a temperature uses, so the compiler stops you from mixing Celsius and Fahrenheit by accident.

convert matches on the variant and returns the other one. show formats the number with one digit after the decimal point. -40 is the one temperature that is the same on both scales.

ประเด็นสำคัญ

  1. Each variant carries the number.
  2. match returns the other unit.
  3. -40 is the same on both scales.

ตัวอย่าง Rust ที่รันได้

Rust
รันโค้ด →
main.rs
enum Temperature {
    Celsius(f64),
    Fahrenheit(f64),
}

fn convert(temperature: &Temperature) -> Temperature {
    match temperature {
        Temperature::Celsius(c) => Temperature::Fahrenheit(c * 9.0 / 5.0 + 32.0),
        Temperature::Fahrenheit(f) => Temperature::Celsius((f - 32.0) * 5.0 / 9.0),
    }
}

fn show(temperature: &Temperature) -> String {
    match temperature {
        Temperature::Celsius(c) => format!("{c:.1}°C"),
        Temperature::Fahrenheit(f) => format!("{f:.1}°F"),
    }
}

fn main() {
    for input in [Temperature::Celsius(100.0), Temperature::Fahrenheit(98.6), Temperature::Celsius(-40.0)] {
        println!("{} = {}", show(&input), show(&convert(&input)));
    }
}
สร้างปุ่ม Run สำหรับตัวอย่างนี้ ผลลัพธ์จากการรันโค้ด
100.0°C = 212.0°F
98.6°F = 37.0°C
-40.0°C = -40.0°F

ฝึกฝน

เปิดตัวอย่างในคอมไพเลอร์ออนไลน์ ลองเปลี่ยนค่าหรือเพิ่มบรรทัด แล้วทายผลลัพธ์ก่อนกดรัน จากนั้นลองทำให้โค้ดผิดโดยตั้งใจ แล้วอ่านข้อความจากคอมไพเลอร์

เรียนบทนี้จบแล้วใช่ไหม

ทำเครื่องหมายว่าเรียนแล้วเพื่อติดตามความคืบหน้า

ถัดไป: Option: Values That May Be Missing →

ฝึกด้วยโจทย์

ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI

โจทย์ทั้งหมด