Menu
Coddy logo textTech

Veri Varyantlarını Eşleme

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 61.

Önceki derste, farklı varyantları ele almak için enum metotlarının içinde match kullandın. Şimdi match ifadesinin bu varyantların içinde depolanan verileri gerçekte nasıl çıkardığına odaklanalım: destructuring adı verilen bir teknik.

Veri içeren bir enum varyantıyla eşleştirme yaptığınızda, bu verileri doğrudan desen içinde değişkenlere bağlayabilirsiniz:

enum Event {
    Click { x: i32, y: i32 },
    KeyPress(char),
    Resize(u32, u32),
}

fn handle_event(event: Event) {
    match event {
        Event::Click { x, y } => {
            println!("Clicked at ({}, {})", x, y);
        }
        Event::KeyPress(key) => {
            println!("Key pressed: {}", key);
        }
        Event::Resize(width, height) => {
            println!("Resized to {}x{}", width, height);
        }
    }
}

Her kol, varyantın yapısına göre verileri farklı şekilde çıkarır. Yapı benzeri varyantlar için adlandırılmış alanları çekmek üzere { field_name } kullanırsın. Demet varyantları için (width, height) gibi konumsal değişkenler kullanırsın.

Seçtiğin değişken adları, o match kolunun içinde kullanılabilir hâle gelir. Bu güçlüdür çünkü hangi varyanta sahip olduğunu aynı anda kontrol eder ve onun veri yüküne erişim kazanırsın.

challenge icon

Görev

Kolay

Farklı türlerdeki kullanıcı komutlarını işleyen bir komut işlemcisi oluşturalım. Her komut farklı veriler taşır ve işlemciniz bu verileri çıkarmak ve uygun yanıtlar üretmek için desen eşleştirmeyi kullanır.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • command.rs: Üç varyanta sahip genel bir Command enum'u tanımlayın:
    • Say: tek bir String mesajı taşır (demet sözdizimi)
    • Move: adlandırılmış alanlar taşır: direction (String) ve steps (u32)
    • Calculate: toplanacak sayıları temsil eden iki i32 değeri taşır (demet sözdizimi)
    Ardından her varyantın içeriğini ayrıştırmak ve gerçekleştirilen eylemi açıklayan bir execute döndürmek için match kullanan bir String yöntemi uygulayın.
  • main.rs: Komut modülünü dahil edin, sağlanan girdileri kullanarak her komut varyantından bir örnek oluşturun ve sonuçları yazdırmak için her biri üzerinde execute yöntemini çağırın.

execute yönteminiz, verilerine erişmek için her varyantın içeriğini ayrıştırmalı ve şu tam biçimlerde mesajlar döndürmelidir:

  • Say için: Saying: {message}
  • Move için: Moving {steps} steps {direction}
  • Calculate için: {a} + {b} = {sum}

Çıktınız, her komutun sonucunu kendi satırında göstermelidir:

Saying: {message}
Moving {steps} steps {direction}
{a} + {b} = {sum}

Örneğin, "Hello world" mesajına sahip bir say komutu, 5 adımlık "north" yönünde bir hareket ve 10 ile 25 değerlerinin hesaplanması durumunda çıktı şöyle olur:

Saying: Hello world
Moving 5 steps north
10 + 25 = 35

Beş girdi alacaksınız: say mesajı, yön, adım sayısı ve hesaplanacak iki sayı.

Kendin dene

mod command;

use command::Command;

fn main() {
    // Girdileri oku
    let mut say_message = String::new();
    std::io::stdin().read_line(&mut say_message).expect("Failed to read line");
    let say_message = say_message.trim().to_string();

    let mut direction = String::new();
    std::io::stdin().read_line(&mut direction).expect("Failed to read line");
    let direction = direction.trim().to_string();

    let mut steps_input = String::new();
    std::io::stdin().read_line(&mut steps_input).expect("Failed to read line");
    let steps: u32 = steps_input.trim().parse().expect("Failed to parse steps");

    let mut num1_input = String::new();
    std::io::stdin().read_line(&mut num1_input).expect("Failed to read line");
    let num1: i32 = num1_input.trim().parse().expect("Failed to parse num1");

    let mut num2_input = String::new();
    std::io::stdin().read_line(&mut num2_input).expect("Failed to read line");
    let num2: i32 = num2_input.trim().parse().expect("Failed to parse num2");

    // TODO: say_message kullanarak bir Say komutu oluştur ve çalıştır
    
    // TODO: direction ve steps kullanarak bir Move komutu oluştur ve çalıştır
    
    // TODO: num1 ve num2 kullanarak bir Calculate komutu oluştur ve çalıştır
    
    // TODO: Her komut çalıştırmasının sonuçlarını yazdır
}
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