Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

B - Operatörler ve Semboller

Bu ek; operatörler ile tek başına ya da yollar, jenerikler, trait sınırları, makrolar, öznitelikler (attributes), yorumlar, demetler (tuples) ve parantezler bağlamında karşınıza çıkan diğer semboller dahil olmak üzere Rust sözdiziminin sözlüğünü içerir.

Operatörler

Tablo B-1; Rust’taki operatörleri, her operatörün bağlam içinde nasıl görüneceğine dair bir örneği, kısa bir açıklamayı ve o operatörün aşırı yüklenebilir (overloadable) olup olmadığını gösterir. Bir operatör aşırı yüklenebiliyorsa, onu aşırı yüklemek için kullanılacak ilgili std::ops veya std::cmp trait’i listelenmiştir.

Tablo B-1: Operatörler

OperatörÖrnekAçıklamaAşırı Yüklenebilir mi?
!ident!(...), ident!{...}, ident![...]Makro genişletmesi
!!exprBit düzeyinde veya mantıksal tümleme (DEĞİL)Not
!=expr != exprEşitsizlik karşılaştırmasıPartialEq
%expr % exprAritmetik kalan (bölümden kalan)Rem
%=var %= exprAritmetik kalan ve atamaRemAssign
&&expr, &mut exprÖdünç alma (borrow)
&&type, &mut type, &'a type, &'a mut typeÖdünç alınan işaretçi (referans) türü
&expr & exprBit düzeyinde VE (bitwise AND)BitAnd
&=var &= exprBit düzeyinde VE ve atamaBitAndAssign
&&expr && exprKısa devre (short-circuiting) mantıksal VE
*expr * exprAritmetik çarpmaMul
*=var *= exprAritmetik çarpma ve atamaMulAssign
**exprBaşvuru çözme (dereference)Deref, DerefMut
**const type, *mut typeHam işaretçi (raw pointer) türü
+trait + trait, 'a + traitBileşik tür kısıtlaması
+expr + exprAritmetik toplamaAdd
+=var += exprAritmetik toplama ve atamaAddAssign
,expr, exprArgüman ve öğe ayırıcısı
-- exprAritmetik işaret değiştirme (negatifleme)Neg
-expr - exprAritmetik çıkarmaSub
-=var -= exprAritmetik çıkarma ve atamaSubAssign
->fn(...) -> type, |…| -> typeFonksiyon ve kapanış (closure) dönüş türü
.expr.identAlan erişimi
.expr.ident(expr, ...)Metot çağrısı
.expr.0, expr.1 vb.Demet (tuple) indeksleme
...., expr.., ..expr, expr..exprSağdan dışlayıcı aralık sabitiPartialOrd
..=..=expr, expr..=exprSağdan kapsayıcı aralık sabitiPartialOrd
....exprStruct sabiti güncelleme sözdizimi
..variant(x, ..), struct_type { x, .. }“Ve geri kalanı” desen bağlaması
...expr...expr(Kullanımdan kaldırıldı; yerine ..= kullanın) Desende kapsayıcı aralık deseni
/expr / exprAritmetik bölmeDiv
/=var /= exprAritmetik bölme ve atamaDivAssign
:pat: type, ident: typeTür ve trait sınırı kısıtlamaları
:ident: exprStruct alanı ilklendiricisi
:'a: loop {...}Döngü etiketi
;expr;Deyim (statement) ve öğe sonlandırıcısı
;[...; len]Sabit boyutlu dizi sözdiziminin parçası
<<expr << exprSola bit kaydırmaShl
<<=var <<= exprSola bit kaydırma ve atamaShlAssign
<expr < exprKüçüktür karşılaştırmasıPartialOrd
<=expr <= exprKüçük veya eşittir karşılaştırmasıPartialOrd
=var = expr, ident = typeAtama / denklik
==expr == exprEşitlik karşılaştırmasıPartialEq
=>pat => exprmatch kolu sözdiziminin parçası
>expr > exprBüyüktür karşılaştırmasıPartialOrd
>=expr >= exprBüyük veya eşittir karşılaştırmasıPartialOrd
>>expr >> exprSağa bit kaydırmaShr
>>=var >>= exprSağa bit kaydırma ve atamaShrAssign
@ident @ patDesen bağlama
^expr ^ exprBit düzeyinde özel VEYA (XOR)BitXor
^=var ^= exprBit düzeyinde özel VEYA ve atamaBitXorAssign
|pat | patDesen alternatifleri
|expr | exprBit düzeyinde VEYA (OR)BitOr
|=var |= exprBit düzeyinde VEYA ve atamaBitOrAssign
||expr || exprKısa devre mantıksal VEYA
?expr?Hata yayılımı (error propagation)

Operatör Olmayan Semboller

Aşağıdaki tablolar, operatör olarak işlev görmeyen —yani bir fonksiyon ya da metot çağrısı gibi davranmayan— tüm sembolleri içerir.

Tablo B-2, kendi başına görünen ve çeşitli konumlarda geçerli olan sembolleri gösterir.

Tablo B-2: Bağımsız Sözdizimi

SembolAçıklama
'identAdlandırılmış ömür (lifetime) veya döngü etiketi
Hemen ardından u8, i32, f64, usize vb. gelen rakamlarBelirli bir türde sayısal sabit (numeric literal)
"..."String sabiti (string literal)
r"...", r#"..."#, r##"..."## vb.Ham string sabiti; kaçış karakterleri (\) işlenmez
b"..."Bayt string sabiti; string yerine bir bayt dizisi (&[u8; N]) oluşturur
br"...", br#"..."#, br##"..."## vb.Ham bayt string sabiti; ham ve bayt string sabitinin birleşimi
'...'Karakter sabiti (char)
b'...'ASCII bayt sabiti (u8)
|…| exprKapanış (closure)
!Iraksayan (diverging) fonksiyonlar için daima boş taban türü (never type)
_“Görmezden gelinen” desen bağlaması; ayrıca sayısal sabitleri okunaklı kılmak için basamak ayırıcısı olarak kullanılır (1_000_000)

Not: Modern Rust’ta Ham Adres Operatörleri ve C-String Sabitleri: Tablo B-1 ve B-2’deki klasik sözdizimine ek olarak güncel Rust kodlarında iki ek yapıyla sıkça karşılaşırsınız:

  • &raw const expr ve &raw mut expr: Bölüm 20’de gördüğümüz gibi ara bir referans oluşturmadan güvenli biçimde doğrudan ham işaretçi (*const T / *mut T) üreten ham ödünç alma (raw borrow) operatörleridir.
  • c"..." ve cr"..." / cr#"..."#: C kütüphaneleriyle (FFI) çalışırken derleme zamanında sonuna otomatik \0 baytı eklenmiş &core::ffi::CStr üreten C-string sabitleridir.
  • Ayrıca && ve || operatörlerinin neden aşırı yüklenemediğine dikkat edin: Trait metotlarında tüm argümanlar çağrıdan önce değerlendirilir; oysa kısa devre mantığında sol taraf sonucu belirlediğinde sağ tarafın hiç çalıştırılmaması garanti edilmelidir.

Tablo B-3, modül hiyerarşisi içinde bir öğeye giden yol (path) bağlamında görünen sembolleri gösterir.

Tablo B-3: Yolla İlgili Sözdizimi

SembolAçıklama
ident::identAd alanı yolu
::pathHarici bir crate’in köküne göre yol (örneğin ::std::fs; açıkça mutlak yol)
self::pathMevcut modüle göre yol (açıkça göreli yol)
super::pathMevcut modülün üst modülüne göre yol
type::ident, <type as trait>::identİlişkili sabitler, fonksiyonlar ve türler
<type>::...Doğrudan adlandırılamayan bir tür için ilişkili öğe (örneğin <&T>::..., <[T]>::... vb.)
trait::method(...)Bir metot çağrısının belirsizliğini, onu tanımlayan trait’i adlandırarak giderme
type::method(...)Bir metot çağrısının belirsizliğini, üzerinde tanımlandığı türü adlandırarak giderme
<type as trait>::method(...)Bir metot çağrısının belirsizliğini hem türü hem de trait’i adlandırarak giderme (tam nitelikli sözdizimi)

Tablo B-4, jenerik tür parametrelerinin kullanıldığı bağlamlarda görünen sembolleri gösterir.

Tablo B-4: Jenerikler

SembolAçıklama
path<...>Bir tür ifadesinde jenerik türe parametrelerini belirtir (örneğin Vec<u8>)
path::<...>, method::<...>Bir ifadede jenerik türe, fonksiyona veya metoda parametrelerini belirtir; sıklıkla turbofish olarak adlandırılır (örneğin "42".parse::<i32>())
fn ident<...> ...Jenerik fonksiyon tanımlar
struct ident<...> ...Jenerik struct tanımlar
enum ident<...> ...Jenerik enum tanımlar
impl<...> ...Jenerik uygulama (impl) bloğu tanımlar
for<...> typeYüksek mertebeli (higher-ranked) ömür sınırları
type<ident=type>Bir veya daha fazla ilişkili türü belirli bir türe bağlanmış jenerik tür (örneğin Iterator<Item=T>)

Tablo B-5, jenerik tür parametrelerinin trait sınırlarıyla kısıtlandığı bağlamlarda görünen sembolleri gösterir.

Tablo B-5: Trait Sınırı Kısıtlamaları

SembolAçıklama
T: UT jenerik parametresi, U trait’ini uygulayan türlerle kısıtlanmıştır
T: 'aT jenerik türü 'a ömründen daha uzun yaşamalıdır (yani tür, geçişli olarak 'a ömründen daha kısa ömürlü herhangi bir referans içeremez)
T: 'staticT jenerik türü, 'static ömürlü olanlar dışında ödünç alınmış hiçbir referans içermez
'b: 'a'b jenerik ömrü, 'a ömründen daha uzun yaşamalıdır
T: ?SizedJenerik tür parametresinin dinamik boyutlu bir tür (DST) olmasına izin verir
'a + trait, trait + traitBileşik tür kısıtlaması

Tablo B-6, makroların çağrıldığı veya tanımlandığı ve bir öğe üzerinde özniteliklerin belirtildiği bağlamlarda görünen sembolleri gösterir.

Tablo B-6: Makrolar ve Öznitelikler

SembolAçıklama
#[meta]Dış öznitelik (outer attribute)
#![meta]İç öznitelik (inner attribute)
$identMakro yer değiştirmesi
$ident:kindMakro üst-değişkeni (metavariable)
$(...)...Makro tekrarı
ident!(...), ident!{...}, ident![...]Makro çağrısı

Tablo B-7, yorum oluşturan sembolleri gösterir.

Tablo B-7: Yorumlar

SembolAçıklama
//Satır yorumu
//!İç satır belgelendirme yorumu
///Dış satır belgelendirme yorumu
/*...*/Blok yorumu
/*!...*/İç blok belgelendirme yorumu
/**...*/Dış blok belgelendirme yorumu

Tablo B-8, normal parantezlerin kullanıldığı bağlamları gösterir.

Tablo B-8: Normal Parantezler

SembolAçıklama
()Boş demet (diğer adıyla birim / unit), hem sabit (değer) hem de tür olarak
(expr)Parantez içine alınmış ifade
(expr,)Tek öğeli demet ifadesi
(type,)Tek öğeli demet türü
(expr, ...)Demet ifadesi
(type, ...)Demet türü
expr(expr, ...)Fonksiyon çağrısı ifadesi; ayrıca demet struct’larını ve demet enum varyantlarını ilklendirmek için de kullanılır

Tablo B-9, süslü parantezlerin kullanıldığı bağlamları gösterir.

Tablo B-9: Süslü Parantezler

BağlamAçıklama
{...}Blok ifadesi
Type {...}Struct sabiti

Tablo B-10, köşeli parantezlerin kullanıldığı bağlamları gösterir.

Tablo B-10: Köşeli Parantezler

BağlamAçıklama
[...]Dizi (array) sabiti
[expr; len]expr değerinin len adet kopyasını içeren dizi sabiti
[type; len]type türünün len adet örneğini tutan sabit boyutlu dizi türü
expr[expr]Koleksiyon indeksleme; aşırı yüklenebilir (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]İndeks olarak Range, RangeFrom, RangeTo veya RangeFull kullanarak koleksiyon dilimleme gibi davranan koleksiyon indekslemesi