Menu
Coddy logo textTech

Struct'lara Genel Bakış

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

Struct'ların ne olduğunu anladığınıza göre, şimdi onları gerçekte nasıl oluşturacağımızı ve kullanacağımızı öğrenelim. Bu işlem iki adımı içerir: önce struct'ın yapısını tanımlamak, ardından onun örneklerini (instances) oluşturmak.

Bir struct tanımlamak için, struct anahtar kelimesini ve ardından struct'ın adını ve süslü parantez içindeki alanlarını kullanırsınız. Her alanın bir adı ve bir türü vardır:

struct User {
    username: String,
    active: bool,
}

Bu, iki alana sahip bir User struct'ı için bir taslak oluşturur: String türünde username ve bool türünde active.


Rust'taki struct isimleri PascalCase (diğer adıyla CamelCase) kuralını takip eder — her kelime büyük harfle başlar ve alt çizgi içermez. Örneğin: User, BlogPost, GamePlayer.

Bir struct tanımladıktan sonra, her bir alan için değerler belirterek onun örneklerini oluşturabilirsiniz:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Struct adını, ardından her bir alan adını, iki nokta üst üste işaretini ve değerini içeren süslü parantezlerin takip ettiğine dikkat edin. Alanların sırasının, tanımlama sırasıyla eşleşmesi gerekmez.

Bir struct örneğinden bir alanın değerine erişmek için nokta notasyonu kullanın — örnek adının ardından bir nokta ve alan adı gelir:

println!("{}", user1.username); // alice
println!("{}", user1.active);   // true

Örnek let mut ile tanımlandığı sürece, nokta notasyonunu kullanarak bir alanın değerini de güncelleyebilirsiniz:

let mut user1 = User {
    username: String::from("alice"),
    active: true,
};
user1.active = false;
challenge icon

Görev

Kolay

Üç girdi alacaksınız: bir ürün adı, bir fiyat (ondalık sayı olarak) ve bir stok miktarı (tam sayı olarak). Üç alana sahip bir Product struct'ı tanımlayın: String türünde name, f64 türünde price ve i32 türünde stock. Ardından, girdi değerlerini kullanarak bu struct'ın bir örneğini oluşturun ve ürün bilgilerini yazdırın.

Gereksinimler:

  • Şu alanlara sahip bir Product struct'ı tanımlayın: name: String, price: f64 ve stock: i32
  • İlk girdiyi ürün adı olarak okuyun
  • İkinci girdiyi okuyun ve fiyat için f64 türüne dönüştürün
  • Üçüncü girdiyi okuyun ve stok miktarı için i32 türüne dönüştürün
  • Bu değerlerle Product struct'ının bir örneğini oluşturun
  • Ürün bilgilerini aşağıda gösterilen tam formatta yazdırın

Girdi:

  • Birinci satır: Ürün adı (örneğin, Laptop)
  • İkinci satır: Ondalık sayı olarak fiyat (örneğin, 999.99)
  • Üçüncü satır: Tam sayı olarak stok miktarı (örneğin, 15)

Çıktı:

  • Birinci satır: Product: [name]
  • İkinci satır: Price: $[price]
  • Üçüncü satır: Stock: [quantity]

Kopya kağıdı

Struct isimleri PascalCase kullanır (örneğin, UserAccount). Bir struct tanımlamak için, struct anahtar kelimesini ve ardından struct'ın ismini ve süslü parantezler içindeki alanlarını kullanın:

struct User {
    username: String,
    active: bool,
}

Her alanın bir ismi ve bir tipi vardır.

Bir struct örneği (instance) oluşturmak için her alan için değerler belirtin:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Örnekteki alanların sırasının, tanım sırasıyla eşleşmesi gerekmez.

Bir alana erişmek için nokta notasyonu kullanın — örnek isminden sonra bir nokta ve alan ismi gelir:

println!("{}", user1.username); // yazdırır: alice
println!("{}", user1.active);   // yazdırır: true

Kendin dene

use std::io;

// TODO: Ürün yapınızı (struct) burada tanımlayın


fn main() {
    // Ürün 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();
    
    // Fiyatı oku
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // Stok miktarını oku
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: Giriş değerlerini kullanarak Product yapısının bir örneğini oluşturun
    
    
    // TODO: Ürün bilgilerini 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