Menu
Coddy logo textTech

Rust Hile Sayfası

Son güncelleme

Hello World ve yapı

Bir Rust programı fn main'de başlar; ifadeler noktalı virgülle biter.

İşlemSöz dizimi
Giriş noktasıfn main() { ... }
Bir satır yazdırprintln!("Hello, World!");
Değerlerle yazdırprintln!("{} is {}", name, age);
Debug biçiminde yazdırprintln!("{:?}", value);
Satır yorumu// comment
Bir modülden bir öğe kullanuse std::collections::HashMap;
Derle ve çalıştırcargo run
Bir release ikili dosyası derlecargo build --release

Değişkenler ve tipler (let / mut)

Bağlamalar varsayılan olarak değiştirilemezdir; yeniden atamaya izin vermek için mut ekleyin.

İşlemSöz dizimi
Değiştirilemez bağlamalet x = 5;
Değiştirilebilir bağlamalet mut count = 0;
Açık tiplet age: u32 = 30;
Sabitconst MAX: u32 = 100;
Gölgeleme (shadowing)let x = x + 1;
Tam sayı tiplerii32, u32, i64, usize
Diğer skalerlerf64, bool, char
Demet (tuple)let pair: (i32, &str) = (1, "a");
Tip dönüşümület f = x as f64;

Kontrol akışı

if bir ifadedir ve Rust'ın üç döngü biçimi vardır.

İşlemSöz dizimi
If / elseif x > 0 { ... } else { ... }
İfade olarak iflet y = if x > 0 { 1 } else { -1 };
Sonsuz döngüloop { ... }
Değer döndüren döngület v = loop { break 5; };
While döngüsüwhile x < 100 { ... }
Bir aralık üzerinde forfor i in 0..10 { ... }
Bir koleksiyon üzerinde forfor item in &items { ... }
Break / continuebreak;, continue;

Fonksiyonlar

Son ifade (noktalı virgül olmadan) geri dönüş değeridir.

İşlemSöz dizimi
Temel fonksiyonfn add(a: i32, b: i32) -> i32 { a + b }
Açık returnfn f() -> i32 { return 5; }
Geri dönüş değeri yokfn log(msg: &str) { ... }
Bir referans alfn len(s: &String) -> usize { s.len() }
Closurelet add = |a, b| a + b;
Tipli closurelet sq = |x: i32| -> i32 { x * x };
Argüman olarak fonksiyonfn apply(f: impl Fn(i32) -> i32) { ... }

Sahiplik ve borrowing

Her değerin bir sahibi vardır; referanslar sahipliği almadan onu ödünç alır.

İşlemSöz dizimi
Move (sahiplik aktarılır)let b = a; (a artık geçerli değil)
Clone (derin kopya)let b = a.clone();
Değiştirilemez borrowlet r = &x;
Değiştirilebilir borrowlet r = &mut x;
Bir fonksiyonda borrowfn read(s: &String) { ... }
Değerine eriş (dereference)*r
Borrowing kuralıAynı anda birden çok & VEYA tek bir &mut, ikisi birden değil
Slice (bir aralığı ödünç alır)let part = &arr[1..3];

Struct'lar ve enum'lar

Struct'lar ilgili veriyi gruplar; enum'lar birkaç varyanttan biri olan bir değeri modeller.

İşlemSöz dizimi
Bir struct tanımlastruct Point { x: i32, y: i32 }
Bir örnek oluşturlet p = Point { x: 1, y: 2 };
Bir alana erişp.x
Tuple structstruct Pair(i32, i32);
Metot (impl bloğu)impl Point { fn dist(&self) -> f64 { ... } }
İlişkili fonksiyonimpl Point { fn new() -> Self { ... } }
Bir enum tanımlaenum Shape { Circle(f64), Rect(f64, f64) }
Adlandırılmış alanlı enumenum Msg { Move { x: i32, y: i32 } }
Trait'leri türet (derive)#[derive(Debug, Clone)]

Desen eşleştirme (match)

match bir değeri desenlerle karşılaştırır ve kapsamlı (exhaustive) olmalıdır.

İşlemSöz dizimi
Değerlerde eşleştirmatch x { 1 => "one", _ => "other" }
Bir enum'ı eşleştirmatch shape { Shape::Circle(r) => ... }
Bir aralığı eşleştirmatch n { 1..=5 => ..., _ => ... }
Koşulla (guard) bağlamatch x { n if n > 0 => ... }
Bir demeti eşleştirmatch point { (0, y) => ..., (x, _) => ... }
if let (tek desen)if let Some(v) = opt { ... }
while letwhile let Some(v) = stack.pop() { ... }
Bir struct'ı ayrıştırlet Point { x, y } = p;

Trait'ler ve generic'ler

Trait'ler ortak davranışı tanımlar; generic'ler kodun birçok tip üzerinde çalışmasını sağlar.

İşlemSöz dizimi
Bir trait tanımlatrait Area { fn area(&self) -> f64; }
Bir trait uygulaimpl Area for Circle { fn area(&self) -> f64 { ... } }
Varsayılan metottrait Greet { fn hi(&self) { ... } }
Generic fonksiyonfn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
Generic structstruct Wrapper<T> { value: T }
Trait sınırı (where)fn f<T>(x: T) where T: Display { ... }
impl Trait argümanıfn print(item: impl Display) { ... }
Trait nesnesilet shapes: Vec<Box<dyn Area>> = ...;

Hata yönetimi (Result / Option)

Rust yokluğu Option ile, kurtarılabilir hataları Result ile modeller.

İşlemSöz dizimi
İsteğe bağlı değerOption<T>: Some(v) veya None
Result tipiResult<T, E>: Ok(v) veya Err(e)
Bir Result döndürfn read() -> Result<String, Error> { ... }
? ile yay (propagate)let data = read()?;
Unwrap (None/Err'de panik yapar)opt.unwrap()
Varsayılan değeropt.unwrap_or(0)
Bir değeri dönüştür (map)opt.map(|v| v + 1)
Her iki kolu da işlematch res { Ok(v) => ..., Err(e) => ... }
Option'ı Result'a dönüştüropt.ok_or("missing")?

Yaygın koleksiyonlar (Vec / HashMap)

Vec büyüyebilen bir dizidir; HashMap bir anahtar-değer deposudur.

İşlemSöz dizimi
Bir vektör oluşturlet mut v: Vec<i32> = Vec::new();
Vektör değişmezilet v = vec![1, 2, 3];
Push / popv.push(4);, v.pop();
İndeksle erişimv[0]
Güvenli erişimv.get(0), Option<&T> döndürür
Dolaşfor x in &v { ... }
Uzunlukv.len()
Bir map oluşturlet mut m: HashMap<String, i32> = HashMap::new();
Ekle / alm.insert(k, v);, m.get(&k)
Entry API*m.entry(k).or_insert(0) += 1;

En çok başvurduğunuz Rust söz dizimi tek sayfada. Bu Rust hile sayfası, temel dil için hızlı bir başvurudur - değişkenler ve değiştirilebilirlik, sahiplik ve borrowing, struct'lar ve enum'lar, desen eşleştirme, trait'ler ve generic'ler ve Rust'ın hata yönetiminin arkasındaki Result ve Option tipleri.

Buradaki her şey güncel bir kararlı araç zincirinde derlenen standart Rust'tır. İhtiyacınız olanı kopyalayın ya da her kod parçasını Rust playground'da canlı deneyin - cargo kurulumu gerekmez.

Rust hile sayfası SSS

Bu Rust hile sayfası ücretsiz mi?
Evet. Bu Rust hile sayfası tamamen ücretsizdir ve kayıt gerektirmez. Yer imlerinize ekleyin ve bir match desenine, trait sınırına ya da koleksiyon metoduna bakmanız gerektiğinde geri dönün.
Rust'ta sahiplik ve borrowing nedir?
Sahiplik, Rust'ın bellek modelidir: her değerin tam olarak bir sahibi vardır ve o sahip kapsam dışına çıktığında değer serbest bırakılır. Borrowing, bir referans kullanarak sahipliği almadan bir değere erişmenizi sağlar - değiştirilemez bir borrow için &x veya değiştirilebilir bir borrow için &mut x. Derleyici tek bir kuralı uygular: aynı anda birden çok değiştirilemez borrow'a veya tam olarak bir değiştirilebilir borrow'a sahip olabilirsiniz; bu da veri yarışlarını derleme zamanında önler.
Rust'ta Result ile Option arasındaki fark nedir?
Option<T> yok olabilen bir değeri temsil eder - ya Some(v) ya da None'dır ve raporlanacak bir hata olmadığında, yalnızca eksik bir değer olduğunda kullanırsınız. Result<T, E> başarısız olabilen bir işlemi temsil eder - ya Ok(v) ya da Err(e)'dir ve bir şeyler ters gittiğinde bir hata değeri taşır. "Belki orada" için Option, "bu başarısız olabilir" için Result kullanın; ? operatörü her ikisini de yayar.
Rust'ı çevrimiçi olarak deneyebilir miyim?
Evet. Rust playground'u açarak bu hile sayfasındaki herhangi bir kod parçasını tarayıcınızda derleyip çalıştırabilirsiniz - kurmanız gereken cargo veya araç zinciri yok. Yapı istediğinizde, Coddy'nin ücretsiz etkileşimli Rust kursu sizi değişkenler ve sahiplikten trait'lere ve hata yönetimine adım adım götürür.
Bu hile sayfası yeni başlayanlar için uygun mu?
Evet. En yaygın konulardan (değişkenler, kontrol akışı, fonksiyonlar) gelişmiş olanlara (trait'ler, generic'ler, hata yönetimi) doğru düzenlenmiştir, böylece üstteki bölümleri ilk günden kullanabilir ve zamanla sahipliğe ve geri kalanına geçebilirsiniz.
Coddy programming languages illustration

Coddy ile Rust öğren

BAŞLA