0Pricing
Learn Rust Coding · Ders

String ve &str Karşılaştırması

Metin sahipliği

String ve &str Karşılaştırması, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.

Sahipliği Alınmış ve Ödünç Alınmış Metin

Rust, metin sahipliğini iki türe ayırır:

  • String — yığın üzerindeki verisinin sahibidir.
  • &str — sahip olmadığı metnin görünümünü ödünç alır.
fn main() {
    let owned = String::from("I own this");
    let borrowed: &str = "I am borrowed";
    println!("{} / {}", owned, borrowed);
}

Veriler Nerede Bulunur?

Bir String, baytlarını yığında saklar ve büyüyebilir. Bir metin sabiti olan &str, program ikili dosyasının içine yerleştirilir ve sabittir.

fn main() {
    let mut heap = String::from("grows");
    heap.push_str(" bigger");
    let fixed = "never changes";
    println!("{} | {}", heap, fixed);
}

Sahiplik Sorumluluk Demektir

Bir String'in sahibi, kapsam dışına çıktığında belleğini serbest bırakır. Bir &str hiçbir şeyin sahibi değildir; bu nedenle hiçbir şeyi serbest bırakmaz.

fn main() {
    {
        let s = String::from("temporary");
        println!("{}", s);
    } // s is dropped and its memory freed here
    println!("done");
}

String'i Ödünç Alma

& kullanarak bir String'i &str olarak ödünç alabilirsiniz. String hâlâ verinin sahibidir; dilim yalnızca veriye bakar.

fn main() {
    let owned = String::from("shared text");
    let view: &str = &owned;
    println!("{} / {}", owned, view);
}

String'i Taşıma

Bir String'i başka bir değişkene atamak, sahipliği taşır. Artık asıl değer kullanılamaz.

fn main() {
    let a = String::from("hello");
    let b = a; // ownership moves to b
    // println!("{}", a); // would error: a was moved
    println!("{}", b);
}

İkisini de Korumak için Klonlama

Birbirinden bağımsız iki sahipliği alınmış dizeye ihtiyacınız varsa verileri kopyalamak için clone kullanınız.

fn main() {
    let a = String::from("hello");
    let b = a.clone();
    println!("{} and {}", a, b);
}

Bir &str'yi Kopyalamak Ucuzdur

Bir &str yalnızca bir işaretçi ve uzunluktan oluşur; bu nedenle onu kopyalamak, temelindeki metni kopyalamaz. Copy özelliğini uygular.

fn main() {
    let original = "data";
    let copy = original; // both still valid
    println!("{} {}", original, copy);
}

Fonksiyonlar ve Sahiplik

Bir String'i değer olarak geçirmek, onu fonksiyona taşır. &str veya &String geçirmek ise yalnızca ödünç alır ve çağıranın değerini kullanılabilir bırakır.

fn length(s: &str) -> usize {
    s.len()
}

fn main() {
    let text = String::from("measure me");
    println!("{}", length(&text));
    println!("still here: {}", text);
}

Sahipliği Alınmış Dizeler Döndürme

Bir fonksiyonun yeni metin üretmesi gerektiğinde, çağıranın sahipliği alabilmesi için sahipliği alınmış bir String döndürür.

fn make_greeting(name: &str) -> String {
    format!("Hello, {}!", name)
}

fn main() {
    let g = make_greeting("Rust");
    println!("{}", g);
}

Doğru Türü Seçme

Kurallar:

  • Sahipliği alınmış metin mi saklayacaksınız? String kullanınız.
  • Metni yalnızca okuyacak veya aktaracak mısınız? &str kabul ediniz.
  • Bir fonksiyonda yeni metin mi oluşturacaksınız? String döndürünüz.
fn first_word(s: &str) -> &str {
    s.split_whitespace().next().unwrap_or("")
}

fn main() {
    let sentence = String::from("learn rust today");
    println!("{}", first_word(&sentence));
}

Bu Ayrım Neden Önemlidir?

Bu ayrım, Rust'ın gereksiz kopyalardan kaçınmasını ve çöp toplayıcı olmadan bellek güvenliğini garanti etmesini sağlar. Bir metin parçasının kime ait olduğunu her zaman bilirsiniz.

fn main() {
    let owned = String::from("safe");
    let borrowed = &owned[..];
    println!("owner {} borrows {}", owned, borrowed);
}

Kısa Kontrol

Bir String'i taşıdığınızda ne olduğunu hatırlayınız.

Özet

String ve &str sahipliği:

  • String yığın verisinin sahibidir ve bırakıldığında onu serbest bırakır.
  • &str mevcut metni ödünç alır ve hiçbir şeyin sahibi değildir.
  • Bir String'i taşımak asıl değeri geçersiz kılar; clone ise kopyasını oluşturur.
  • Okumak için &str kabul ediniz, yeni metin üretmek için String döndürünüz.
fn shout(s: &str) -> String {
    s.to_uppercase()
}

fn main() {
    let name = String::from("rust");
    let loud = shout(&name);
    println!("{} -> {}", name, loud);
}

Sıkça Sorulan Sorular

“String ve &str Karşılaştırması” dersi ücretsiz mi?

Evet — “String ve &str Karşılaştırması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.

“String ve &str Karşılaştırması” dersinde ne öğreneceğim?

Metin sahipliği Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“String ve &str Karşılaştırması” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. String ve &str Karşılaştırması
  2. Dilimler
  3. Dize Yöntemleri
  4. UTF-8 ve Karakterler
← Learn Rust Coding Sayfasına Dön