مسیرها
/
Cairo
Cairo
/
تمرین‌ها
/
اندازه‌گیری‌های جادویی
اندازه‌گیری‌های جادویی

اندازه‌گیری‌های جادویی

تمرین یادگیری

مقدمه

تبدیل نوع در Cairo به شما امکان می‌دهد داده را از یک نوع به نوع دیگر تبدیل کنید و این کار دستکاری داده را انعطاف‌پذیر و ایمن می‌کند.

مبانی

Cairo چندین سازوکار برای تبدیل نوع ارائه می‌دهد:

تبدیل مستقیم

برای نوع‌های عددی سازگار، می‌توانید از تبدیل مستقیم استفاده کنید:

let small_number: u8 = 42;
let big_number: u32 = small_number.into();

خصیصه‌ی Into

خصیصه‌ی Into امکان تبدیل از یک نوع به نوع دیگر را فراهم می‌کند:

let value: u16 = 100;
let converted: u32 = value.into();

خصیصه‌ی TryInto

برای تبدیل‌هایی که ممکن است شکست بخورند، از TryInto استفاده کنید که یک Option برمی‌گرداند:

let large_value: u32 = 70000;
let small_value: Option<u16> = large_value.try_into();

match small_value {
    Option::Some(v) => println!("Converted: {}", v),
    Option::None => println!("Conversion failed"),
}

تبدیل نوع سفارشی

می‌توانید Into را برای نوع‌های خودتان پیاده‌سازی کنید:

#[derive(Drop)]
struct Celsius {
    value: i32,
}

#[derive(Drop)]
struct Fahrenheit {
    value: i32,
}

impl CelsiusIntoFahrenheit of Into<Celsius, Fahrenheit> {
    fn into(self: Celsius) -> Fahrenheit {
        Fahrenheit { value: (self.value * 9) / 5 + 32 }
    }
}

ملاحظات ایمنی

  • وقتی ممکن است تبدیل شکست بخورد از TryInto استفاده کنید (مثلاً تبدیل نوع بزرگ به کوچک)
  • وقتی تبدیل همیشه موفق می‌شود از Into استفاده کنید
  • همیشه حالت‌های Option::None را از TryInto مدیریت کنید
  • هنگام تبدیل بین نوع‌های علامت‌دار و بدون علامت، سرریز و زیرریز را در نظر بگیرید

دستورالعمل‌ها

آسترید، یک کیمیاگر ماجراجو، در تلاش است واحدهای جادویی اندازه‌گیری را که از قلمروهای مختلف جمع‌آوری می‌کند استانداردسازی کند. برخی قلمروها از اندازه‌گیری‌های علامت‌دار استفاده می‌کنند (که می‌توانند منفی باشند) و برخی دیگر از اندازه‌گیری‌های بدون علامت (که همیشه مثبت‌اند). علاوه بر این، آسترید برای بعضی مواد اولیه‌ی کمیاب دو نوع سفارشی دارد و به راهی نیاز دارد که به‌سادگی بین این نوع‌ها تبدیل انجام دهد.

مأموریت شما این است که به آسترید کمک کنید بین اعداد صحیح علامت‌دار و بدون علامت تبدیل انجام دهد و با استفاده از دو trait به نام‌های Into و TryInto در Cairo، تبدیل‌های نوع سفارشی برای انواع مواد اولیه‌ی خاص او بسازد.

1. تبدیل واحدهای جادویی بین اعداد علامت‌دار و بدون علامت

آسترید اندازه‌گیری‌هایی دارد که گاهی با مقادیر مثبت یا منفی می‌آیند (اعداد صحیح علامت‌دار)، اما برای بعضی کارها باید مطمئن شود که مقادیر همیشه مثبت باشند (اعداد صحیح بدون علامت).

با نوشتن تابعی به آسترید کمک کنید که این‌ها را تبدیل کند:

  1. یک عدد صحیح علامت‌دار (i32) را به یک عدد صحیح بدون علامت (u16).
  2. یک عدد صحیح بدون علامت (u16) را به یک عدد صحیح علامت‌دار (i32).
let signed_value: i32 = -42;
match convert_signed_to_unsigned(signed_value) {
    Option::Some(v) => println!("Converted to unsigned: {}", v),
    Option::None => println!("Failed to convert: {}", signed_value),
} // prints "Failed to convert: -42"

let unsigned_value: u16 = 42;
let signed_value: i32 = convert_unsigned_to_signed(unsigned_value);
println!("Converted to signed: {}", signed_value); // prints "Converted to signed: 42"

2. تبدیل انواع سفارشی مواد اولیه

آسترید با دو ماده‌ی اولیه‌ی کمیاب کار می‌کند، Essence و Elixir، که با انواع سفارشی نمایش داده می‌شوند. او می‌خواهد بتواند Essence را به Elixir تبدیل کند، اما نه برعکس.

با ساختن دو نوع سفارشی، Essence و Elixir، و پیاده‌سازی trait Into برای تبدیل Essence به Elixir به آسترید کمک کنید.

تابعی بنویسید که یک Essence می‌گیرد و با استفاده از .into() آن را به یک Elixir تبدیل می‌کند.

#[derive(Drop)]
struct Essence {
    potency: u16,
}

#[derive(Drop)]
struct Elixir {
    strength: u16,
}

fn convert_essence_to_elixir(essence: Essence) -> Elixir {
    // Convert the Essence to Elixir using the Into trait.
    essence.into()
}

fn main() {
    let essence = Essence { potency: 100 };
    let elixir: Elixir = convert_essence_to_elixir(essence);
    println!("Elixir strength: {}", elixir.strength); // Elixir strength: 100
}
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Cairo Exercism

آماده‌اید اندازه‌گیری‌های جادویی را شروع کنید؟

در Exercism ثبت‌نام کنید تا Cairo را همراه با 25 مفهوم68 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.