Menu
Coddy logo textTech

Mutable Struct'lar

Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 23 / 66.

Varsayılan olarak, Rust'taki struct örnekleri sabittir (immutable) - onları bir kez oluşturduğunuzda, alan değerlerini değiştiremezsiniz. Ancak, tıpkı diğer değişkenlerde olduğu gibi, bir struct örneğini bildirirken mut anahtar kelimesini ekleyerek onu değiştirilebilir (mutable) hale getirebilirsiniz.

Bir struct örneğini değiştirilebilir (mutable) olarak bildirdiğinizde, nokta notasyonunu kullanarak herhangi bir alanını değiştirebilirsiniz:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // Bu çalışır çünkü player değiştirilebilirdir (mutable)

mut anahtar kelimesi olmadan, bir alanı değiştirmeye çalışmak bir derleme hatasıyla sonuçlanır. Değişebilirlik tüm struct örneği için geçerlidir; diğer alanları değişmez (immutable) tutarken münferit alanları değişebilir (mutable) yapamazsınız.

challenge icon

Görev

Kolay

Dört girdi alacaksınız: bir oyuncu adı, bir başlangıç puanı (tamsayı olarak), eklenecek bir bonus puanı (tamsayı olarak) ve bir final puanı ayarlaması (tamsayı olarak). İki alanı olan bir Player struct'ı tanımlayın: String tipinde name ve i32 tipinde score. Bu struct'ın değiştirilebilir (mutable) bir örneğini oluşturun, ardından girdi değerlerini kullanarak puan alanını birden çok kez değiştirin.

Gereksinimler:

  • Şu alanlara sahip bir Player struct'ı tanımlayın: name: String ve score: i32
  • İlk girdiyi oyuncu adı olarak okuyun
  • İkinci girdiyi okuyun ve başlangıç puanı için i32 türüne dönüştürün
  • Bu değerlerle Player struct'ının mutable (değiştirilebilir) bir örneğini oluşturun
  • Üçüncü girdiyi okuyun ve bonus puanı için i32 türüne dönüştürün
  • Nokta notasyonunu kullanarak bonus puanını oyuncunun mevcut puanına ekleyin
  • Dördüncü girdiyi okuyun ve final ayarlaması için i32 türüne dönüştürün
  • Final ayarlamasını oyuncunun mevcut puanına ekleyin
  • Oyuncu bilgilerini aşağıda gösterilen tam formatta yazdırın

Girdi:

  • İlk satır: Oyuncu adı (örneğin, Alice)
  • İkinci satır: Tamsayı olarak başlangıç puanı (örneğin, 50)
  • Üçüncü satır: Tamsayı olarak bonus puanı (örneğin, 30)
  • Dördüncü satır: Tamsayı olarak final ayarlaması (örneğin, 20)

Çıktı:

  • İlk satır: Player: [name]
  • İkinci satır: Final Score: [score]

Kopya kağıdı

Rust'taki struct örnekleri varsayılan olarak sabittir (immutable). Oluşturulduktan sonra alan değerlerini değiştirmek için, örneği mut anahtar kelimesini kullanarak değişken (mutable) olarak tanımlayın:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // Nokta notasyonu kullanarak alanı değiştirin

Değişebilirlik (mutability) tüm struct örneği için geçerlidir - diğerlerini sabit tutarken tekil alanları değişken yapamazsınız.

Kendin dene

use std::io;

// TODO: Burada name ve score alanlarına sahip Player struct'ını tanımlayın

fn main() {
    // Oyuncu adını oku
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Başlangıç puanını oku
    let mut initial_score = String::new();
    io::stdin().read_line(&mut initial_score).expect("Failed to read line");
    let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
    
    // Bonus puanını oku
    let mut bonus = String::new();
    io::stdin().read_line(&mut bonus).expect("Failed to read line");
    let bonus: i32 = bonus.trim().parse().expect("Invalid number");
    
    // Son düzenlemeyi oku
    let mut adjustment = String::new();
    io::stdin().read_line(&mut adjustment).expect("Failed to read line");
    let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
    
    // TODO: Değiştirilebilir (mutable) bir Player örneği oluşturun
    
    // TODO: Oyuncunun puanına bonus puanı ekleyin
    
    // TODO: Oyuncunun puanına son düzenlemeyi ekleyin
    
    // TODO: Çıktıyı istenen formatta yazdırın
}
quiz iconKendini test et

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

Logic & Flow bölümündeki tüm dersler