Menu
Coddy logo textTech

From ve Into

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası. Ders 57 / 61.

Türler arasında dönüşüm yapmak Rust'ta yaygın bir görevdir. From trait'i, bir türün başka bir türden nasıl oluşturulabileceğini tanımlamak için standartlaştırılmış bir yol sağlar. From'u uyguladığınızda, Into trait'ini automatically free olarak elde edersiniz.

From uygulamak için türünüzü başka bir türden nasıl oluşturacağınızı tanımlarsınız:

struct Meters(f64);
struct Kilometers(f64);

impl From<Kilometers> for Meters {
    fn from(km: Kilometers) -> Self {
        Meters(km.0 * 1000.0)
    }
}

Artık from işlevini veya into yöntemini kullanarak dönüştürme yapabilirsiniz:

let distance = Kilometers(5.0);

// From'u açıkça kullanma
let m1 = Meters::from(distance);

// Into kullanma (From uygulandığı için çalışır)
let distance = Kilometers(3.0);
let m2: Meters = distance.into();

into() method bir tür annotation gerektirir; çünkü Rust hangi türe dönüştürdüğünü bilmelidir. Bu pattern, yapılandırma verilerini başlatılmış bir nesneye dönüştürmek veya ham input'u doğrulanmış bir yapıya dönüştürmek gibi, ana türlerinize dönüştürülmesi gereken yardımcı struct'lara sahip olduğunuzda özellikle kullanışlıdır.

challenge icon

Görev

Kolay

From trait'ini kullanarak bir sıcaklık dönüşüm sistemi oluşturalım! İki sıcaklık türü, Celsius ve Fahrenheit, oluşturacak ve Rust'ın standart dönüşüm trait'lerini kullanarak bunlar arasında dönüşümler implement edeceksin.

Kodunu iki dosya arasında organize edeceksin:

  • temperature.rs: Her ikisi de bir f64 saran iki public newtype struct, Celsius ve Fahrenheit, Define et. Celsius'u Fahrenheit'a dönüştürmek için From trait'ini, şu formula'yı kullanarak implement et: fahrenheit = celsius × 1.8 + 32.0. Ayrıca her struct'a, inner f64'ü returns eden bir value method'u ekle.
  • main.rs: temperature module'ünü dahil et ve her iki dönüşüm yaklaşımını göster. Sağlanan input'tan bir Celsius değeri Create et, ardından Fahrenheit::from() kullanarak bunu Fahrenheit'a dönüştür. Başka bir Celsius değeri Create et ve .into() method'unu kullanarak dönüştür. Her iki sonucu Print et.

Celsius'tan Fahrenheit'a dönüşüm formula'sı şöyledir: 1.8 ile çarp ve 32 ekle. From<Celsius> for Fahrenheit implement etmenin, Celsius üzerinde Into<Fahrenheit> trait'ini otomatik olarak free şekilde verdiğini Remember!

Her iki sıcaklık da tam sayılar olarak Print edilir: her f64 değerini as i64 ile cast et; bu, ondalık kısmı sıfıra doğru keser. Bu nedenle 36.6 input'u 36C olarak Print edilir ve dönüştüğü 97.88 Fahrenheit derecesi 97F olarak Print edilir. Hiçbir değer yukarı yuvarlanmaz.

Çıktın her iki dönüşümü şu format'ta göstermelidir:

From: {celsius1}C = {fahrenheit1}F
Into: {celsius2}C = {fahrenheit2}F

Örneğin, input'lar 0 ve 100 olduğunda:

From: 0C = 32F
Into: 100C = 212F

Ve input'lar 25 ve -40 olduğunda:

From: 25C = 77F
Into: -40C = -40F

İki input alacaksın: ilk Celsius değeri (f64 olarak parse et) ve ikinci Celsius değeri (f64 olarak parse et).

Kendin dene

mod temperature;

use temperature::{Celsius, Fahrenheit};

fn main() {
    // Girdiyi oku
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let celsius1: f64 = input1.trim().parse().expect("Invalid number");
    
    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let celsius2: f64 = input2.trim().parse().expect("Invalid number");
    
    // TODO: celsius1'den bir Celsius değeri oluştur
    // TODO: Fahrenheit::from() kullanarak Fahrenheit'e dönüştür
    
    // TODO: celsius2'den başka bir Celsius değeri oluştur
    // TODO: .into() kullanarak Fahrenheit'e dönüştür
    
    // TODO: Sonuçları şu formatta yazdır:
    // From: {celsius1}C = {fahrenheit1}F
    // Into: {celsius2}C = {fahrenheit2}F
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi