Tuple struct
- Rust kursu
- Başlangıç
- Ders 67/115
- 4 dk
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); // 255Renk 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.5hiz(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
fn main() {
// buraya yaz
}Örnek çözüm
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
struct Renk(u8, u8, u8);
let k = Renk(10, 20, 30);
let yesil = k.____; // 20
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 |