CodeBlanks Logo Icon CodeBlanks

Copy özelliği

Copy özelliğine sahip türlerin kopyalanma davranışını öğrenirsin.

Copy özelliği

Tamamen yığında (stack) duran küçük türler Copy trait'ini uygular ve atamada kopyalanır, taşınmaz: tüm tam sayılar, ondalıklar, bool, char ve yalnızca Copy türlerden oluşan tuple ve diziler.

let x = 5;
let y = x;          // kopya; x hâlâ geçerli
println!("{x} {y}");

let p = (1, 2.5);
let q = p;          // tuple da Copy
println!("{:?}", p);

String, Vec ve Box Copy değildir çünkü heap belleğine sahiptirler.

Kendi türüne Copy

Yalnızca Copy alanları olan kendi struct'ına #[derive(Clone, Copy)] ekleyebilirsin. Copy her zaman Clone ile birlikte istenir:

#[derive(Debug, Clone, Copy)]
struct Nokta {
    x: i32,
    y: i32,
}

let a = Nokta { x: 1, y: 2 };
let b = a;               // kopyalanır
println!("{:?} {:?}", a, b);

Uygulama Kopyalanan nokta

#[derive(Debug, Clone, Copy)] struct Nokta { x: i32, y: i32 } tanımla. let a = Nokta { x: 1, y: 2 };, let mut b = a;, b.x = 10; yap ve {:?} {:?} ile a ve b'yi yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
#[derive(Debug, Clone, Copy)]
struct Nokta {
    x: i32,
    y: i32,
}

fn main() {
    let a = Nokta { x: 1, y: 2 };
    let mut b = a;
    b.x = 10;
    println!("{:?} {:?}", a, b);
}

Beklenen çıktı

Nokta { x: 1, y: 2 } Nokta { x: 10, y: 2 }

Soru ve cevaplar

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

1 Hangisi <code>Copy</code> değildir?

  • char
  • (i32, String) Doğru cevap
  • (i32, f64)
  • [u8; 4]

Açıklama: Bir tuple yalnızca tüm elemanları Copy ise Copy'dir; String içerdiği için bu tuple taşınır.

2 Kopyalanabilir tür

Soru
#[derive(Clone, ____)]
struct Renk(u8, u8, u8);
Cevap
#[derive(Clone, Copy)]
struct Renk(u8, u8, u8);

Açıklama: Copy türetmek değerin atamada otomatik kopyalanmasını sağlar.

3 Tür ve davranış

Kavram Anlamı
i32 Copy: yığında kopyalanır
String Move: heap sahipliği taşınır
(i32, String) Move: bir alan Copy değil
#[derive(Clone, Copy)] Kendi türünü Copy yapar

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