CodeBlanks Logo Icon CodeBlanks

Tuple struct

Tuple struct türünü ve kullanım yerlerini öğrenirsin.

Tuple struct

Alan adları gereksizse tuple struct kullanılır; alanlara .0, .1 ile erişilir:

struct Renk(u8, u8, u8);
struct Nokta3(i32, i32, i32);

let turuncu = Renk(255, 128, 0);
println!("{}", turuncu.0);   // 255

Renk ve Nokta3 aynı yapıda olsa da farklı türlerdir; birinin beklendiği yere diğeri verilemez.

Newtype ve çözme

Tek alanlı tuple struct'a newtype denir. Değer, kalıpla açılabilir:

struct Metre(f64);
struct Saniye(f64);

fn hiz(m: Metre, s: Saniye) -> f64 {
    let Metre(yol) = m;
    yol / s.0
}

println!("{}", hiz(Metre(100.0), Saniye(8.0)));   // 12.5

hiz(Saniye(8.0), Metre(100.0)) yazmak derleme hatası verir; sıra karışıklığı yakalanmış olur.

Uygulama Renk kodu

struct Renk(u8, u8, u8); tanımla ve Renk(255, 128, 0) oluştur. Alanları {:02X} biçimiyle yan yana yazdırarak #FF8000 çıktısını üret.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
struct Renk(u8, u8, u8);

fn main() {
    let k = Renk(255, 128, 0);
    println!("#{:02X}{:02X}{:02X}", k.0, k.1, k.2);
}

Beklenen çıktı

#FF8000

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 "Newtype" deseni ne işe yarar?

  • Kalıtım sağlar
  • Aynı temel türü anlamca ayırır: Metre(f64) ile Saniye(f64) karışmaz Doğru cevap
  • Programı hızlandırır
  • Bellek ayırır

Açıklama: Tek alanlı tuple struct, çalışma anında maliyeti olmadan tür güvenliği ekler.

2 Alan erişimi

Soru
struct Renk(u8, u8, u8);
let k = Renk(10, 20, 30);
let yesil = k.____;   // 20
Cevap
struct Renk(u8, u8, u8);
let k = Renk(10, 20, 30);
let yesil = k.1;   // 20

Açıklama: Tuple struct alanları 0'dan başlayarak numaralanır; ikinci alan .1'dir.

3 Tanım ve tür

Kavram Anlamı
struct Renk(u8, u8, u8); Tuple struct
struct Metre(f64); Newtype
struct Oyuncu { ad: String } Adlı alanlı struct
let Metre(yol) = m; Kalıpla açma

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma