Menu
Coddy logo textTech

From ve Into

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama 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 özelliğ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 özelliğini uyguladığınızda, Into özelliğini otomatik olarak ve ücretsiz şekilde 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() yöntemi, Rust'un hangi türe dönüştürme yaptığınızı bilmesi gerektiğinden bir tür belirtimi gerektirir. Bu kalıp, yapılandırma verilerini başlatılmış bir nesneye dönüştürmek veya ham girdiyi doğrulanmış bir yapıya dönüştürmek gibi, ana türlerinize dönüştürülmesi gereken yardımcı yapı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 gerçekleştireceksin.

Kodunu iki dosyaya ayıracaksın:

  • temperature.rs: Her ikisi de bir Celsius saran, Fahrenheit ve f64 adında iki genel newtype struct tanımla. From değerini şu formülü kullanarak Celsius değerine dönüştürmek için Fahrenheit trait'ini uygula: fahrenheit = celsius × 1.8 + 32.0. Ayrıca her struct'a, içindeki value değerini döndüren bir f64 yöntemi ekle.
  • main.rs: Sıcaklık modülünü içe aktar ve her iki dönüşüm yaklaşımını göster. Verilen girdiden bir Celsius değeri oluştur, ardından bunu Fahrenheit kullanarak Fahrenheit::from() değerine dönüştür. Başka bir Celsius değeri oluştur ve bunu .into() yöntemiyle dönüştür. Her iki sonucu da yazdır.

Celsius'dan Fahrenheit'a dönüşüm formülü şöyledir: 1.8 ile çarp ve 32 ekle. From<Celsius> for Fahrenheit uygulamanın, Into<Fahrenheit> üzerinde Celsius trait'ini otomatik olarak ve ücretsiz şekilde sağladığını unutma!

Her iki sıcaklık da tam sayı olarak yazdırılır: her f64 değerini as i64 ile dönüştür; bu işlem ondalık kısmı sıfıra doğru keser. Bu nedenle 36.6 girdisi 36C olarak yazdırılır ve dönüştüğü 97.88 derece Fahrenheit değeri 97F olarak yazdırılır. Yukarı yuvarlama yapılmaz.

Çıktın her iki dönüşümü de şu biçimde göstermelidir:

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

Örneğin, 0 ve 100 girdileriyle:

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

25 ve -40 girdileriyle:

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

İki girdi alacaksın: ilk Celsius değerini (f64 olarak ayrıştır) ve ikinci Celsius değerini (f64 olarak ayrıştır).

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.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi