Kurzusok
/
Cairo
Cairo
/
Feladatok
/
Mágikus mérések
Mágikus mérések

Mágikus mérések

Tanulófeladat

Bevezetés

A Cairo-ban a típuskonverziók segítségével az adatokat egyik típusból a másikba alakíthatod, ami rugalmas és biztonságos adatkezelést tesz lehetővé.

Alapok

A Cairo több mechanizmust kínál a típuskonverzióhoz:

Közvetlen kasztolás

Kompatibilis numerikus típusoknál közvetlen kasztolást használhatsz:

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

Az Into trait

Az Into trait egyik típusból a másikba való átalakítást tesz lehetővé:

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

A TryInto trait

Azokhoz az átalakításokhoz, amelyek meghiúsulhatnak, használd a TryInto-t, amely egy Option-t ad vissza:

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"),
}

Egyedi típuskonverziók

A saját típusaidhoz is implementálhatod az Into traitet:

#[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 }
    }
}

Biztonsági szempontok

  • Használd a TryInto-t, ha az átalakítás meghiúsulhat (például nagy típusból kicsibe)
  • Használd az Into-t, ha az átalakítás mindig sikerül
  • Mindig kezeld a TryInto-ból származó Option::None eseteket
  • Az előjeles és előjel nélküli típusok közötti átalakításnál figyelj a túlcsordulásra és az alulcsordulásra

Utasítások

Astrid, a kalandvágyó alkimista, igyekszik egységesíteni a különböző birodalmakból gyűjtött mágikus mértékegységeket. Néhány birodalom előjeles mértékegységeket használ (amelyek negatívak is lehetnek), mások viszont előjel nélkülieket (amelyek mindig pozitívak). Ráadásul Astridnak két egyedi típusa van bizonyos ritka hozzávalókhoz, és szeretné, ha könnyedén át tudna alakítani közöttük.

A küldetésed, hogy segíts Astridnak az előjeles és előjel nélküli egészek közötti átváltásban, valamint hogy a Cairo Into és TryInto traitjeivel egyedi típuskonverziókat hozz létre a különleges hozzávalóihoz.

1. Mágikus mértékegységek átváltása előjeles és előjel nélküli alak között

Astrid mérései néha pozitív vagy negatív értékként érkeznek (előjeles egészek), bizonyos feladatokhoz viszont biztosítania kell, hogy az értékek mindig pozitívak legyenek (előjel nélküli egészek).

Segíts Astridnak egy olyan függvény megírásával, amely átváltja:

  1. Az előjeles egészt (i32) előjel nélküli egésszé (u16).
  2. Az előjel nélküli egészt (u16) előjeles egésszé (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. Egyedi hozzávalótípusok konverziója

Astrid két ritka hozzávalóval dolgozik, amelyeket egy-egy egyedi típus, az Essence és az Elixir képvisel. Szeretné Essence-ből Elixir-t készíteni, de visszafelé nem.

Segíts Astridnak létrehozni két egyedi típust, az Essence-t és az Elixir-t, és megvalósítani az Into traitet, amellyel Essence-ből Elixir-t lehet átalakítani.

Írj egy függvényt, amely fogad egy Essence-t, és a .into() segítségével Elixir-ré alakítja.

#[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
}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Cairo Exercism

Készen állsz elkezdeni a(z) Mágikus mérések feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Cairo nyelvet 25 fogalom68 feladat segítségével, valódi emberi mentorálással, mindez ingyen.