İÇİNDEKİLER
İçindekiler
Yazar Hakkında iii
Terimler Sözlüğü v
1. Giriş 1
Kitap ile İlgili Genel Notlar 3
2. Geliştirme Ortamının Hazırlanması 5
3. İlk Uygulama 9
Genel Hatları ile Programın Yapısı 11
Programın Derlenmesi ve Çalıştırılması 12
Cargo Paket Yöneticisi 13
Cargo ile Projenin Derlenmesi ve Çalıştırılması 16
4. Genel Kavramlar 19
Değişkenler 19
Sabitler 22
Derleme Zamanı – Çalışma Zamanı 23
Değişkenlerde Gölgeleme (Shadowing) 24
Kapsam (Scope) 27
Blok Kapsamı (Block Scope) 27
Fonksiyon Kapsamı (Function Scope) 28
Döngü Kapsamı (Loop Scope) 29
Kod Satırlarına Yorum Ekleme 29
Tek Satır Yorumlar 29
Çok Satırlı Yorumlar 30
5. Veri Türleri 31
Skaler Türler 31
Integer (Tamsayı) 31
Negatif ve Pozitif Sayılar Hafızada Nasıl Saklanıyor? 33
Tamsayı Taşması (Integer Overflow) 35
Float (Ondalık Sayılar) 37
Aritmetik İşlemler 37
Boolean (Mantıksal Tür) 38
(Karakter) Türü 39
Birleşik (Compound) Türler 39
Tuple Türü 39
Array Türü 41
6. Fonksiyonlar 45
İfade (Expression) ve İşlem (Statement) Farkı 48
Fonksiyonlarda Dönüş Türünün Belirtilmesi 49
7. Akış Kontrolü 51
Kıyaslama Operatörleri 51
Mantıksal Operatörler 52
&& (VE) Operatörü 53
¦¦ (VEYA) Operatörü 53
! (DEĞİL) Operatörü 54
If Kontrol Yapısı 55
Döngüler 58
Loop Döngüsü 59
Döngülerden Değer Döndürme 61
Döngü Etiketi Kullanımı 62
While Döngüsü 63
For Döngüsü 64
8. Sahiplik (Ownership) 67
Sahiplik Nedir? 67
Stack ve Heap Hafıza Bölümleri 67
Sahiplik Kuralları 69
Değişkenlerin Kapsamı 69
String Türü 70
Bellek Tahsisi 71
Değişkenler ve Sahiplik Hakkının Aktarımı 72
Stack Bellekte Saklanan Verilerin Kopyalanması 76
Sahiplik ve Kopyalama Özelliklerinin Fonksiyonlarda Kullanımı 77
Fonksiyonlardan Değer Döndürülmesi Esnasında Sahiplik Devri ve Kopyalama 78
Referanslar ve Ödünç Alma 79
Değiştirilebilir (Mutable) Referanslar 80
Slice Türü 84
&str Değişken Türü ve Slice İlişkisi 86
Arraylerde Slice Türü Kullanımı 86
9. Struct Veri Yapısı 87
Struct Veri Yapısının Tanımlanması ve Kullanımı 87
Diğer Struct Değişkenlerini Kullanarak Değişken Oluşturmak 90
Tuple Struct 91
Veri İçermeyen Unit Benzeri Structlar 91
Metot 92
Metot Tanımlama 92
Birden Fazla Sayıda Argüman Kabul Eden Bağlı Metot Örneği 94
İlişkili Fonksiyonlar 96
Birden Fazla Sayıda impl Bloğu Tanımlanması 97
10. Enum Veri Yapısı 99
Enum Tanımlama 99
Option Enumı 103
Match Kontrol Yapısı 104
Option<T> Enumı ile Match Yapısının Kullanımı 111
Match Bloğunda Kapsanmayan Değerler ve _ Yer Tutucusu 112
if let Yapısı 114
11. Paket, Crate ve Modüller Yardımı ile Yazılım Projesinin Organize Edilmesi 117
Paketler ve Crates 117
Kapsam ve Erişilebilirlik Kontrolü için Modül Tanımlama 118
Modül Oluşturma 119
Alt Modül Oluşturma 123
Mutlak ve Göreceli Path 126
pub use İle Modül Arayüzünü Değiştirme 127
Pathleri Grup Hâlinde Kapsama Ekleme 129
Modül İçerisinde Yer Alan Struct ve Enumların Erişilebilirlik Ayarları 129
12. Standart Kütüphanede Tanımlanmış Veri Yapıları 131
Vector Veri Yapısı 131
For Döngüsü Kullanımı 135
Enum Kullanarak Bir Vectorde Farklı Türlerde Veri Saklamak 136
String Veri Yapısı 136
push_str ve push Metodları ile Veri Ekleme 137
+ Operatörü ve format! Makrosu ile String Birleştirme 138
Stringlerde Karakterlere Erişim 139
HashMap Veri Yapısı 140
HashMapte Veri Güncelleme 143
13. Hata Yakalama 147
Kurtarılamaz Hatalar ve panic! Makrosu 147
Kurtarılabilir Hatalar ve Result Enumı 149
Unwrap ve Expect Yardımcı Metotları 152
? Operatörü 154
14. Generic Tür Parametresi 157
Fonksiyonlarda Generic Tür Parametresi Kullanımı 157
Structlarda Generic Tür Parametresi Kullanımı 160
Enumlarda Generic Tür Parametresi Kullanımı 161
Metotlarda Generic Tür Parametresi Kullanımı 162
15. Trait Tanımlama ve Kullanımı 167
Traitlerde Varsayılan Metot Gövdesi Tanımlanması 169
Traitlerin Parametre Olarak Kullanımı 170
Where Anahtar Kelimesi Kullanımı 173
Fonksiyondan Dönüş Değeri Olarak Trait Kullanımı 174
Metotları Koşullu Olarak Uygulamak 176
16. Lifetime 179
Struct Tanımlamada Lifetime Etiketi Kullanımı 185
Derleyici Tarafından Tanımlanan Lifetime Etiketleri 185
Metotlarda Lifetime Etiketi Kullanımı 186
Static Lifetime Tanımlanması 187
Tüm Generic Türlerin Bir Arada Kullanımı 187
17. Closure 189
Closureların Verilere Erişimi 194
Closurelardan Veri Aktarımı ve Uygulanan Fn Traitler 196
18. Iterator 203
Iterator Traiti ve next Metodu 204
Iterator Kullanan Metotlar 207
Yeni Iteratorler Oluşturan Metotlar 207
19. Cargo ve Crates.io Kullanımı 211
Kod Derlemesini Özelleştirme 211
Crates.io’dan Paket İndirme ve Projede Kullanma 212
Projenin Kütüphane Dosyasına Ayrılması ve Crates Workspaces 213
20. Akıllı İşaretçiler (Smart Pointers) 221
Box<T> Akıllı İşaretçisi 222
Box<T> ile Heap Bellekte Veri Saklamak 222
Deref Traiti 223
Akıllı İşaretçi Oluşturma 225
Deref Traiti Yardımı ile Otomatik Tür Dönüşümleri 228
Değişebilir Değişkenlerde Deref Trait Kullanımı 229
Trait 230
Rc<T> Akıllı İşaretçisi 232
RefCell<T> Akıllı İşaretçisi 234
Değişemez Bir Değerin Değişebilir Şekilde Ödünç Alınması 236
Rc<T> ve RefCell<T> Bir Arada Kullanarak Birden Fazla Sayıda Değiştirilebilir
Referans Elde Etmek 239
Döngüsel Referansların Önlenmesi 239
Weak<T> Kullanımı ile Döngüsel Referansları Önlemek 241
21. Eşzamanlı ve Paralel Programlama 245
Spawn Fonksiyonu ile Yeni Bir İş Parçacığı Oluşturma 245
Yan İş Parçacıklarının Sonlanmasını Bekleme 247
İş Parçacıklarında Move Closure Kullanımı 250
Mesajlaşma Yolu ile İş Parçacıkları Arasında Veri Aktarımı 251
Birden Fazla Sayıda İş Parçacığı ile Kanala Veri Aktarımı 254
Veri Sahipliği Paylaşımı ile İş Parçacıkları Arasında Veri Aktarımı 256
Mutex<T> 256
Arc<T> ile Birden Fazla İş Parçacığından Mutex<T>’ye Erişim 258
22. Trait Nesneleri Kullanımı 261
Dinamik Bağlam 262
23. Örüntü Eşleştirme 269
Match İfadeleri 269
if let Koşullu İfadeleri 270
While Let Koşullu Döngüleri 271
For Döngüleri 272
Let İşlemi 272
Fonksiyon Parametreleri 273
Örüntünün Eşleşmesi veya Eşleşmemesi Durumu 273
Farklı Örüntü Biçimleri ve Kullanımları 274
Örüntülerde Değişken Kullanımı 275
Birden Fazla Sayıda Örüntünün Bir Arada Kullanımı 276
Bir Aralıktaki Değerlerin Eşleştirilmesi 278
Struct, Enum ve Tuple Türlerini Taşıdıkları Ögelere Ayırmak 279
Struct Türünü Ögelerine Ayırmak 279
Enum Türünü Ögelerine Ayırmak 281
Örüntüdeki Bazı Değerlerin Göz Ardı Edilmesi 284
Kalan Değerleri ile Göz Ardı Etme 285
@ Karakteri ile Yakalanan Değeri Değişkene Bağlama 286
24. Güvenlik Kontrollerinin Devre Dışı Bırakılması 287
Ham İşaretçi Kullanımı ve İşaret Ettiği Veriye Erişim 288
Hafıza Güvenliği Kontrollerine Tabi Olmayan Metot ve Fonksiyonları Çağırma 289
Unsafe Kodların Dış Erişime Kapatılması 290
Extern Anahtar Kelimesi ile Harici Kodları Çağırma 294
Değişebilir Bir Static Değişkene Erişmek ve Değerini Değiştirmek 295
Trait Uygulamaları 297
Union Türünün Ögelerine Erişim 297
25. İleri Seviye Traitler 299
Traitlerde İlişkili Tür Kullanımı 299
Generic Tür Parametrelerinde Varsayılan Tür Tanımlanması 300
İki Farklı Traitte Aynı Metot İsminin Kullanımı ve Çağırılması 304
Bağımlı Trait Tanımlanması 308
26. İleri Seviye Türler 309
Takma Ad Kullanımı 309
Boş Tür 310
27. İleri Seviye Fonksiyon ve Closurelar 313
Fonksiyon İşaretçileri 313
Bir Fonksiyondan Closure Döndürmek 314
28. Makrolar 315
Bildirimsel Makrolar 315
Prosedürel Makrolar 318
Türev Makro Tanımlama 318
Özellik Benzeri Makrolar 323
Fonksiyon Benzeri Makrolar 324
Kaynakça 325 |