Upload
others
View
21
Download
2
Embed Size (px)
Citation preview
D Programlama DiliAli Çehreli
D Programlama DiliBirinci Yayım
Ali Çehreli
Teknik düzenleme: Luís Marques
D Programlama Dili, Birinci Yayım
Sürüm: 2017-09-24 1
Bu kitabın en güncel elektronik sürümlerini sitesinden2 edinebilirsiniz.
Copyleft (ɔ) 2009-2017 Ali Çehreli
Bu eser, Creative Commons'ın Atıf-Gayriticari-LisansDevam 4.0 Uluslararasılisansı ile lisanslanmıştır. Bu lisansın tam metni içinhttp://creativecommons.org/licenses/by-nc-sa/4.0/deed.tr/ adresine gidiniz.
Teknik düzenleme: Luís Marques3
Kapak tasarımı: İzgi Yapıcı4
Kapak resmi: Sarah Reece5
Basımcı: Ali Çehreli6
Fontlar:
Andada (tasarımcı: Huerta Tipográfica için Carolina Giovagnoli)Open Sans (tasarımcı: Steve Matteson)DejaVu Mono (tasarımcı: DejaVu Fonts)
PDF sürümü Prince XML ile oluşturulmuşturDiğer ekitap sürümleri Calibre ile oluşturulmuştur
1. https://bitbucket.org/acehreli/ddili2. http://ddili.org/ders/d3. http://www.luismarques.eu4. http://izgiyapici.com5. mailto:[email protected]. mailto:[email protected]
https://bitbucket.org/acehreli/ddilihttps://bitbucket.org/acehreli/ddilihttp://ddili.org/ders/dhttp://ddili.org/ders/dhttp://www.luismarques.euhttp://www.luismarques.euhttp://izgiyapici.comhttp://izgiyapici.commailto:[email protected]:[email protected]:[email protected]:[email protected]://bitbucket.org/acehreli/ddilihttps://bitbucket.org/acehreli/ddilihttp://ddili.org/ders/dhttp://ddili.org/ders/dhttp://www.luismarques.euhttp://www.luismarques.euhttp://izgiyapici.comhttp://izgiyapici.commailto:[email protected]:[email protected]:[email protected]:[email protected]
İçindekiler
Önsöz - Andrei Alexandrescu xviiYazarın Önsözü xix
Teşekkür ................................................................................................................................xix1. "Merhaba Dünya" Programı 1
Derleyici kurulumu ...............................................................................................................1Kaynak dosya ...........................................................................................................................1Merhaba dünya programını derlemek ..........................................................................1Derleyici seçenekleri ............................................................................................................ 2Geliştirme ortamı................................................................................................................... 3Türkçe harfler.......................................................................................................................... 3Merhaba dünya programının içeriği............................................................................. 3Problemler ................................................................................................................................ 4
2. writeln ve write 5Problemler ................................................................................................................................ 5
3. Derleme 6Makine kodu............................................................................................................................ 6Programlama dili ................................................................................................................... 6Yorumlayıcı .............................................................................................................................. 6Derleyici..................................................................................................................................... 7
4. Temel Türler 8Tür nitelikleri .......................................................................................................................... 9size_t ...................................................................................................................................... 10Problem.................................................................................................................................... 10
5. Atama ve İşlem Sıraları 11Atama işlemi ...........................................................................................................................11İşlem sıraları...........................................................................................................................11Problem.....................................................................................................................................11
6. Değişkenler 12Problem.................................................................................................................................... 13
7. Standart Giriş ve Çıkış Akımları 14Problem.................................................................................................................................... 14
8. Girişten Bilgi Almak 15Boşlukların gözardı edilmelerinin gerekmesi ......................................................... 16Ek bilgiler ................................................................................................................................ 17Problem.................................................................................................................................... 17
9. Mantıksal İfadeler 18Mantıksal ifadeler ............................................................................................................... 18İfadeleri gruplamak........................................................................................................... 20Girişten bool okumak ....................................................................................................... 21Problemler .............................................................................................................................. 21
10. ifKoşulu 23if bloğu ve kapsamı ...........................................................................................................23else bloğu ve kapsamı ......................................................................................................23Kapsam parantezlerini hep kullanın ..........................................................................24"if, else if, else" zinciri .........................................................................................................24Problemler ..............................................................................................................................26
11. whileDöngüsü 27continue deyimi..................................................................................................................27
v
break deyimi .........................................................................................................................28Koşulsuz döngü ....................................................................................................................28Problemler ..............................................................................................................................29
12. Tamsayılar ve Aritmetik İşlemler 30Problemler ..............................................................................................................................39
13. Kesirli Sayılar 41Kesirli tür nitelikleri........................................................................................................... 41.nan ...........................................................................................................................................42Kesirli sayıların yazımları................................................................................................42Taşma gözardı edilmez ......................................................................................................43Duyarlık (Hassasiyet) .........................................................................................................44Bölmede kırpılma yoktur .................................................................................................44Hangi durumda hangi tür................................................................................................44Her değeri ifade etmek olanaksızdır ...........................................................................45Sırasızlık..................................................................................................................................46Problemler ..............................................................................................................................47
14. Diziler 48Tanımlanması .......................................................................................................................48Topluluklar ve elemanlar .................................................................................................49Eleman erişimi......................................................................................................................49İndeks .......................................................................................................................................50Sabit uzunluklu diziler ve dinamik diziler ...............................................................50Eleman adedini edinmek ve değiştirmek için .length ......................................50Bir dizi örneği .........................................................................................................................51Elemanları ilklemek ............................................................................................................51Temel dizi işlemleri .............................................................................................................52Problemler ..............................................................................................................................54
15. Karakterler 56Tarihçe......................................................................................................................................56Unicode kodlama çeşitleri ...............................................................................................57D'nin karakter türleri.........................................................................................................58Karakter sabitleri.................................................................................................................58Kontrol karakterleri ...........................................................................................................59Tek tırnak ve ters bölü ...................................................................................................... 60std.uni modülü..................................................................................................................... 60Türk alfabesinin şanssız harfleri: ı ve i....................................................................... 61Girişten karakter okumadaki sorunlar...................................................................... 61D'nin Unicode desteği ........................................................................................................62Özet............................................................................................................................................63
16. Başka Dizi Olanakları 64Dilimler ....................................................................................................................................64dizi.length yerine $........................................................................................................65Kopyasını almak için .dup ..............................................................................................65Atama işlemi ..........................................................................................................................66Uzunluğun artması paylaşımı sonlandırabilir .......................................................66Bütün elemanlar üzerindeki işlemler ........................................................................ 70Çok boyutlu diziler.............................................................................................................. 71Özet............................................................................................................................................73Problem....................................................................................................................................73
17. Dizgiler 74readf yerine readln ve strip.......................................................................................74
vi
Dizgiden veri okumak için formattedRead ............................................................75Tek tırnak değil, çift tırnak..............................................................................................76string, wstring, ve dstring değişmezdirler.........................................................76Dizgilerin şaşırtıcı olabilen uzunlukları....................................................................77Hazır dizgiler .........................................................................................................................78Dizgi birleştirmek................................................................................................................78Dizgileri karşılaştırmak ....................................................................................................79Büyük küçük harfler farklıdır........................................................................................79std.string modülü.................................................................................................................79Problemler ............................................................................................................................. 80
18. Standart Akımları Dosyalara Bağlamak 81Standart çıkışı > ile bir dosyaya bağlamak ............................................................... 81Standart girişi < ile bir dosyaya bağlamak................................................................ 81Giriş ve çıkış akımlarının ikisini birden dosyalara bağlamak .........................82Programları | ile birbirlerine bağlamak....................................................................82Problem....................................................................................................................................82
19. Dosyalar 83Temel kavramlar ..................................................................................................................83std.stdio.File yapısı ....................................................................................................85Problem....................................................................................................................................86
20. auto ve typeof 87auto ...........................................................................................................................................87typeof ......................................................................................................................................87Problem....................................................................................................................................88
21. İsim Alanı 89İsimleri kullanıldıkları ilk noktada tanımlamak ..................................................89
22. forDöngüsü 91while'ın bölümleri .............................................................................................................. 91for'un bölümleri.................................................................................................................. 91Döngünün üç bölümü de boş bırakılabilir ...............................................................92Döngü değişkeninin geçerli olduğu kapsam............................................................93Problemler ..............................................................................................................................93
23. Üçlü İşleç ?: 94Üçlü işlecin türü...................................................................................................................95Problem....................................................................................................................................96
24. Hazır Değerler 97Tamsayılar ..............................................................................................................................97Kesirli sayılar.........................................................................................................................98Karakterler .............................................................................................................................99Dizgiler .................................................................................................................................. 100Hazır değerler derleme zamanında hesaplanırlar .............................................. 101Problemler ............................................................................................................................ 101
25. Çıktı Düzeni 102düzen_karakteri ...................................................................................................................103genişlik ....................................................................................................................................105duyarlık ..................................................................................................................................105ayar_karakterleri ................................................................................................................105Parametre numaraları.....................................................................................................106Eleman düzeni ....................................................................................................................107format ....................................................................................................................................109
vii
Problemler ............................................................................................................................10926. Giriş Düzeni 110
Düzen karakterleri............................................................................................................. 111Problem................................................................................................................................... 111
27. do-whileDöngüsü 112Problem...................................................................................................................................113
28. Eşleme Tabloları 114Tanımlama............................................................................................................................ 114Tabloya eleman ekleme....................................................................................................115İlkleme.....................................................................................................................................115Tablodan eleman çıkartma.............................................................................................115Eleman sorgulama ............................................................................................................ 116Nitelikler................................................................................................................................ 116Örnek ...................................................................................................................................... 117Problemler ............................................................................................................................ 118
29. foreachDöngüsü 119Söz dizimi.............................................................................................................................. 119continue ve break............................................................................................................120Dizilerle kullanımı ............................................................................................................120Dizgilerle kullanımı ve std.range.stride ..........................................................120Eşleme tablolarıyla kullanımı ...................................................................................... 121Sayı aralıklarıyla kullanımı .......................................................................................... 121Yapılarla, sınıflarla, ve aralıklarla kullanımı......................................................... 121Sayaç yalnızca dizilerde otomatiktir.........................................................................122Elemanın kopyası, kendisi değil ..................................................................................122Topluluğun kendisi değiştirilmemelidir .................................................................. 123Ters sırada ilerlemek için foreach_reverse ........................................................ 123Problem..................................................................................................................................124
30. switch ve case 125goto .........................................................................................................................................126İfadenin değeri ancak tamsayı, bool, veya dizgi olabilir..................................127Değer aralıkları...................................................................................................................128Ayrık değerler......................................................................................................................128final switch deyimi......................................................................................................128Ne zaman kullanmalı.......................................................................................................129Problemler ............................................................................................................................129
31. enum 130Sihirli sabitler......................................................................................................................130Söz dizimi..............................................................................................................................130Asıl değerler ve türleri ......................................................................................................131Bir enum türüne ait olmayan enum değerleri .......................................................... 132Nitelikleri .............................................................................................................................. 132Asıl türden dönüştürmek............................................................................................... 133Problem.................................................................................................................................. 133
32. İşlevler 134Parametreler ........................................................................................................................ 135İşlev çağırmak ..................................................................................................................... 136İş yapmak.............................................................................................................................. 137İşlevin dönüş değeri.......................................................................................................... 137return deyimi..................................................................................................................... 138
viii
void işlevler ......................................................................................................................... 138İşlevin ismi ........................................................................................................................... 138İşlevlerin kod kalitesine etkileri.................................................................................. 139Problemler ............................................................................................................................ 143
33. Değişmezlik 145Değişmezler.......................................................................................................................... 145Değişmez parametreler ...................................................................................................148Bütün dilime karşılık elemanlarının değişmezliği.............................................. 152Nasıl kullanmalı................................................................................................................. 153Özet.......................................................................................................................................... 154
34. Değerler ve Referanslar 156Değer türü............................................................................................................................. 156Referans değişkenleri....................................................................................................... 157Referans türü....................................................................................................................... 159Sabit uzunluklu diziler değer türü, dinamik diziler referans türü ..................162Deney ......................................................................................................................................162Özet..........................................................................................................................................164
35. İşlev Parametreleri 165Parametre her zaman kopyalanır ............................................................................... 165Referans türlerinin eriştirdiği değişkenler kopyalanmazlar ..........................166Parametre çeşitleri ............................................................................................................168Özet..........................................................................................................................................176Problem.................................................................................................................................. 177
36. Sol Değerler ve Sağ Değerler 178Sağ değerlerin yetersizlikleri ........................................................................................178Hem sol değer hem sağ değer alabilen auto ref parametreler....................179Terimler..................................................................................................................................180
37. Tembel İşleçler 18138. Programın Çevresiyle Etkileşimi 183
main'in dönüş değeri ........................................................................................................ 183Standart hata akımı stderr ......................................................................................... 185main'in parametreleri ...................................................................................................... 185Program seçenekleri ve std.getopt modülü .......................................................186Ortam değişkenleri ...........................................................................................................188Başka programları başlatmak......................................................................................188Özet..........................................................................................................................................189Problemler ............................................................................................................................189
39. Hata Yönetimi 190Hata atmak için throw .................................................................................................... 191Hata yakalamak için try-catch deyimi ................................................................. 195Hata nitelikleri...................................................................................................................200Hata çeşitleri........................................................................................................................201Özet......................................................................................................................................... 203
40. scope 20441. assert ve enforce 206
Söz dizimi.............................................................................................................................206static assert .................................................................................................................208Kesinlikle doğru olan (!) varsayımlar için bile assert ........................................208Değer üretmez ve yan etkisi yoktur ..........................................................................209assert denetimlerini etkisizleştirmek ...................................................................209
ix
Hata atmak için enforce ..............................................................................................209Nasıl kullanmalı.................................................................................................................210Problemler ............................................................................................................................210
42. Birim Testleri 213Hata nedenleri .................................................................................................................... 213Hatanın farkedildiği zaman.......................................................................................... 213Hata yakalamada birim testleri...................................................................................214Birim testlerini başlatmak ............................................................................................. 215unittest blokları.............................................................................................................. 215Hata atılıp atılmadığının denetlenmesi ...................................................................216Test yönelimli programlama: önce test, sonra kod .................................................217Bazen de önce hata, sonra test, ve en sonunda kod...................................................218Problem..................................................................................................................................219
43. Sözleşmeli Programlama 220Giriş koşulları için in blokları.....................................................................................220Çıkış garantileri için out blokları...............................................................................221Sözleşmeli programlamayı etkisizleştirmek......................................................... 223in bloğu mu enforce mu.............................................................................................. 223Problem................................................................................................................................. 224
44. Yaşam Süreçleri ve Temel İşlemler 226Değişkenlerin yaşam süreçleri.................................................................................... 226Parametrelerin yaşam süreçleri ................................................................................. 226Temel işlemler .................................................................................................................... 227
45. nullDeğeri ve is İşleci 231null değeri ........................................................................................................................... 231is işleci.................................................................................................................................. 232!is işleci ............................................................................................................................... 232null değer atamak........................................................................................................... 232Özet......................................................................................................................................... 234
46. Tür Dönüşümleri 235Otomatik tür dönüşümleri ............................................................................................235Açıkça yapılan tür dönüşümleri.................................................................................240Özet......................................................................................................................................... 243
47. Yapılar 244Tanımlanması .................................................................................................................... 244Üye erişimi........................................................................................................................... 246Kurma.................................................................................................................................... 247Kopyalama ve Atama....................................................................................................... 249Yapı hazır değerleri........................................................................................................... 251static üyeler ...................................................................................................................... 251Problemler ........................................................................................................................... 254
48. Parametre Serbestliği 256Varsayılan parametre değerleri.................................................................................. 256Belirsiz sayıda parametreler ........................................................................................ 258Problem................................................................................................................................. 262
49. İşlev Yükleme 263Parametre uyum kuralları ............................................................................................ 264Yapılar için işlev yükleme............................................................................................. 264Eksiklikler............................................................................................................................ 265Problem................................................................................................................................. 266
x
50. Üye İşlevler 267Üye işlev................................................................................................................................ 267Problemler ............................................................................................................................271
51. const refParametreler ve constÜye İşlevler 273immutable nesneler..........................................................................................................273const olmayan ref parametreler ..............................................................................273const ref parametreler ................................................................................................273const olmayan üye işlevler .......................................................................................... 274const üye işlevler ............................................................................................................. 274inout üye işlevler ..............................................................................................................275Ne zaman kullanmalı...................................................................................................... 276
52. Kurucu ve Diğer Özel İşlevler 277Kurucu işlev ........................................................................................................................ 277Sonlandırıcı işlev .............................................................................................................. 286Kopya sonrası işlevi ......................................................................................................... 288Atama işleci .........................................................................................................................290Özet......................................................................................................................................... 292
53. İşleç Yükleme 293Yüklenebilen işleçler....................................................................................................... 295Birden fazla işleci aynı zamanda tanımlamak..................................................... 298İşleçlerin dönüş türleri................................................................................................... 299Eşitlik karşılaştırmaları için opEquals....................................................................301Sıra karşılaştırmaları için opCmp ............................................................................... 302İşlev gibi çağırmak için opCall .................................................................................. 304Dizi erişim işleçleri........................................................................................................... 305Dilim işleçleri ..................................................................................................................... 308Tür dönüşümü işleci opCast ........................................................................................310Sevk işleci opDispatch ....................................................................................................311İçerme sorgusu için opBinaryRight!"in"............................................................ 312Problem.................................................................................................................................. 314
54. Sınıflar 317Yapılarla karşılaştırılması.............................................................................................. 317Özet......................................................................................................................................... 322
55. Türeme 323Uyarı: "o türden" ise türetin...........................................................................................325En fazla bir class'tan türetilebilir .............................................................................325Sıradüzenin gösterimi .................................................................................................... 326Üst sınıf üyelerine erişmek için super anahtar sözcüğü................................. 326Üst sınıf üyelerini kurmak için super anahtar sözcüğü ..................................327Üye işlevleri override ile özel olarak tanımlamak ........................................... 328Alt sınıf nesnesi, üst sınıf nesnesi yerine geçebilir............................................. 329Türeme geçişlidir ............................................................................................................... 331Soyut üye işlevler ve soyut sınıflar ............................................................................. 331Örnek ......................................................................................................................................332Özet..........................................................................................................................................335Problemler ............................................................................................................................336
56. Object 337typeid ve TypeInfo .........................................................................................................337toString ...............................................................................................................................339opEquals ...............................................................................................................................339
xi
opCmp...................................................................................................................................... 342toHash ................................................................................................................................... 344Problemler ........................................................................................................................... 347
57. Arayüzler 349Tanımlanması .................................................................................................................... 349interface'ten türetme .................................................................................................. 349Birden fazla interface'ten türetme ........................................................................ 350interface'ten ve class'tan türetme ........................................................................ 351interface'ten interface türetme ........................................................................... 351static üye işlevler............................................................................................................ 351final üye işlevler ..............................................................................................................353Nasıl kullanmalı.................................................................................................................354Soyutlama .............................................................................................................................354Örnek ......................................................................................................................................355Özet..........................................................................................................................................356
58. destroy ve scoped 358Sınıf sonlandırıcı işlevlerinin geç işletilmesini gösteren bir örnek .............358Nesnenin sonlandırıcısını işletmek için destroy() ..........................................359Ne zaman kullanmalı.......................................................................................................359Örnek ..................................................................................................................................... 360Sonlandırıcı işlevi otomatik olarak çağırmak için scoped ............................ 362Özet......................................................................................................................................... 364
59. Modüller ve Kütüphaneler 365Paketler ................................................................................................................................. 366Modüllerin programda kullanılmaları.................................................................... 366Kütüphaneler ...................................................................................................................... 371
60. Sarma ve Erişim Hakları 374Sarma......................................................................................................................................375Erişim hakları......................................................................................................................375Belirtilmesi .......................................................................................................................... 376import'lar normalde modüle özeldir ....................................................................... 376Sarmayı ne zaman kullanmalı.....................................................................................377Örnek ..................................................................................................................................... 378
61. İşlev Çağırma Ortak Söz Dizimi (UFCS) 38062. Nitelikler 383
İşlevlerin parantezsiz çağrılabilmeleri .....................................................................383Değer üreten nitelik işlevleri ........................................................................................383Atama işleci ile kullanılan nitelik işlevleri ............................................................ 384Nitelikler şart değildir .....................................................................................................385Ne zaman kullanmalı...................................................................................................... 386
63. Yapı ve Sınıflarda Sözleşmeli Programlama 388Üye işlevlerin in ve out blokları ................................................................................ 388Nesnelerin geçerliliği için in ve out blokları ....................................................... 389Nesnelerin tutarlılığı için invariant blokları..................................................... 390Sözleşmeli programlama ve türeme .......................................................................... 391Özet......................................................................................................................................... 394
64. Şablonlar 395İşlev şablonları....................................................................................................................395Birden fazla şablon parametresi kullanılabilir.................................................... 397Tür çıkarsama .................................................................................................................... 398
xii
Türün açıkça belirtilmesi .............................................................................................. 398Şablon özellemeleri.......................................................................................................... 399Yapı ve sınıf şablonları ...................................................................................................400Varsayılan şablon parametreleri................................................................................402Her şablon gerçekleştirmesi farklı bir türdür ...................................................... 403Derleme zamanı olanağıdır.......................................................................................... 403Sınıf şablonu örneği: yığın veri yapısı ..................................................................... 403İşlev şablonu örneği: ikili arama algoritması .......................................................406Özet.........................................................................................................................................408
65. Pragmalar 409pragma(msg) ......................................................................................................................409pragma(lib) ......................................................................................................................409pragma(inline) ...............................................................................................................409pragma(startaddress)................................................................................................. 411pragma(mangle) ................................................................................................................ 411
66. alias ve with 413alias.......................................................................................................................................413with .........................................................................................................................................417Özet..........................................................................................................................................418
67. alias this 419Çoklu kalıtım.......................................................................................................................419
68. Göstergeler 422Referans kavramı.............................................................................................................. 422Tanımlanması .................................................................................................................... 424Göstergenin değeri ve adres alma işleci &............................................................... 425Erişim işleci * ..................................................................................................................... 426Gösterdiğinin üyesine erişim için . (nokta) işleci............................................... 426Gösterge değerinin değiştirilmesi.............................................................................. 428Göstergeler risklidir......................................................................................................... 429Dizinin son elemanından bir sonrası....................................................................... 429Dizi erişim işleci [] ile kullanımı .............................................................................. 430Göstergeden dilim elde etmek......................................................................................431Her türü gösterebilen void* ........................................................................................ 432Mantıksal ifadelerde kullanılmaları .........................................................................433new bazı türler için adres döndürür...........................................................................433Dizilerin .ptr niteliği ..................................................................................................... 434Eşleme tablolarının in işleci.........................................................................................435Ne zaman kullanmalı.......................................................................................................435Örnekler................................................................................................................................ 437Problemler ........................................................................................................................... 442
69. Bit İşlemleri 443Verinin en alt düzeyde gerçekleştirilmesi .............................................................. 443İkili sayı sistemi................................................................................................................. 444On altılı sayı sistemi ........................................................................................................ 446Bit işlemleri ......................................................................................................................... 447Anlamları .............................................................................................................................. 451Bazı kullanımları ...............................................................................................................453Problemler ............................................................................................................................455
70. Koşullu Derleme 457debug...................................................................................................................................... 457
xiii
version(isim), ve version(düzey) ......................................................................460debug'a ve version'a isim atamak.............................................................................461static if............................................................................................................................ 462static assert ................................................................................................................. 463Tür nitelikleri ..................................................................................................................... 463Özet......................................................................................................................................... 464
71. is İfadesi 465is (Tür) .............................................................................................................................. 465is (Tür Takmaİsim)..................................................................................................... 465is (Tür : ÖzelTür)..................................................................................................... 466is (Tür Takmaİsim : ÖzelTür) ........................................................................... 466is (Tür == ÖzelTür) .................................................................................................. 466is (Tür isim == Belirteç) ................................................................................... 468is (/* ... */ Belirteç, ŞablonParametreListesi) ........................... 469
72. İşlev Göstergeleri, İsimsiz İşlevler, ve Temsilciler 472İşlev göstergeleri ............................................................................................................... 472İsimsiz işlevler.................................................................................................................... 477Temsilciler............................................................................................................................480delegate parametreli toString ............................................................................... 485Özet......................................................................................................................................... 487
73. Yapı ve Sınıflarda foreach 488foreach desteğini aralık işlevleri ile sağlamak ................................................... 488foreach desteğini opApply ve opApplyReverse işlevleri ile sağlamak ...490Döngü sayacı....................................................................................................................... 493Uyarı: foreach'in işleyişi sırasında topluluk değişmemelidir ...................... 496Problemler ........................................................................................................................... 496
74. İç İşlevler, Yapılar, ve Sınıflar 497Özet.........................................................................................................................................500
75. Birlikler 501İsimsiz birlikler ................................................................................................................. 502Başka bir türün baytlarını ayrıştırmak................................................................... 502Örnekler................................................................................................................................ 503
76. Etiketler ve goto 507goto ........................................................................................................................................ 507Döngü etiketleri................................................................................................................. 509case bölümlerinde kullanımı ..................................................................................... 509Özet..........................................................................................................................................510
77. Çokuzlular 511Tuple ve tuple() ...............................................................................................................511AliasSeq ............................................................................................................................... 514.tupleof niteliği ............................................................................................................... 516Özet.......................................................................................................................................... 517
78. Ayrıntılı Şablonlar 519Kestirme ve uzun söz dizimi ......................................................................................... 519Şablon çeşitleri ................................................................................................................... 521Şablon parametre çeşitleri............................................................................................ 524typeof(this), typeof(super), ve typeof(return) ......................................533Şablon özellemeleri...........................................................................................................533Meta programlama ...........................................................................................................534Derleme zamanı çok şekilliliği.....................................................................................535
xiv
Kod şişmesi...........................................................................................................................537Şablon kısıtlamaları .........................................................................................................537Şablonların çok boyutlu işleç yüklemedeki kullanımı ..................................... 541Özet..........................................................................................................................................545
79. Diğer İşlev Olanakları 547Dönüş türü olanakları .................................................................................................... 547Davranış olanakları .......................................................................................................... 551Güvenilirlik olanakları....................................................................................................556Derleme zamanında işlev işletme (CTFE) ................................................................557Özet..........................................................................................................................................559
80. Katmalar 560Şablon katmaları .............................................................................................................. 560Dizgi katmaları .................................................................................................................. 562Katmaların isim alanları ................................................................................................563İşleç yüklemedeki kullanımı ........................................................................................565Eklenen sonlandırıcılar ..................................................................................................565Örnek ..................................................................................................................................... 566
81. Aralıklar 567Tarihçe....................................................................................................................................567Aralıklar D'de kaçınılmazdır ....................................................................................... 568Algoritmaların geleneksel gerçekleştirmeleri...................................................... 568Phobos aralıkları............................................................................................................... 569InputRange, giriş aralığı................................................................................................. 571ForwardRange, ilerleme aralığı ..................................................................................... 581BidirectionalRange, çift uçlu aralık ...................................................................... 582RandomAccessRange, rastgele erişimli aralık ..........................................................583OutputRange, çıkış aralığı ............................................................................................. 589Aralık şablonları ............................................................................................................... 592Özet......................................................................................................................................... 592
82. Başka Aralık Olanakları 594Aralık çeşidi şablonları .................................................................................................. 594ElementType ve ElementEncodingType ................................................................597Başka aralık nitelikleri ....................................................................................................597Çalışma zamanı çok şekilliliği için inputRangeObject() veoutputRangeObject() .................................................................................................. 598Özet......................................................................................................................................... 599
83. Koşut İşlemler 600taskPool.parallel() ..................................................................................................602Görev türü Task................................................................................................................. 603taskPool.asyncBuf() ..................................................................................................607taskPool.map() ...............................................................................................................609taskPool.amap() ............................................................................................................. 611taskPool.reduce() ........................................................................................................612Birden çok işlev ve çokuzlu sonuçlar ........................................................................614TaskPool ............................................................................................................................... 615Özet..........................................................................................................................................616
84. Mesajlaşarak Eş Zamanlı Programlama 617Kavramlar .............................................................................................................................617İş parçacıklarını başlatmak...........................................................................................618İş parçacıklarının kimlikleri.........................................................................................619
xv
Mesajlaşma..........................................................................................................................620Farklı çeşitlerden mesaj beklemek............................................................................ 624Mesajları belirli süreye kadar beklemek ................................................................ 626İşçide atılan hatalar ......................................................................................................... 627İş parçacıklarının sonlandıklarını algılamak ...................................................... 629Posta kutusu yönetimi..................................................................................................... 631Öncelikli mesajlar ............................................................................................................ 632İş parçacığı isimleri...........................................................................................................633Özet......................................................................................................................................... 634
85. Veri Paylaşarak Eş Zamanlı Programlama 635Paylaşım otomatik değildir............................................................................................635Veri paylaşımı için shared ........................................................................................... 636Veri değiştirirken yarış halinde olma örneği ........................................................ 637Veri korumak için synchronized ............................................................................. 638Tek ilkleme için shared static this() ve tek sonlandırma için sharedstatic ~this() ............................................................................................................... 642Kesintisiz işlemler ............................................................................................................ 643Özet......................................................................................................................................... 645
86. Fiberler 646Çağrı yığıtı............................................................................................................................ 646Kullanım............................................................................................................................... 648Fiberlerin aralıklara yararı........................................................................................... 649Fiberlerin zaman uyumsuz giriş/çıkış işlemlerinde kullanılmaları............655Fiberler ve hata yönetimi .............................................................................................. 659İşbirlikli çoklu görevler..................................................................................................660Özet..........................................................................................................................................661
87. Bellek Yönetimi 662Bellek...................................................................................................................................... 662Çöp toplayıcı ....................................................................................................................... 662Bellekten yer ayırmak..................................................................................................... 664Hizalama birimi ................................................................................................................ 669Değişkenleri belirli bir yerde kurmak...................................................................... 674Nesneyi belirli bir zamanda sonlandırmak........................................................... 677Nesneyi çalışma zamanında ismiyle kurmak....................................................... 679Özet......................................................................................................................................... 679
88. Kullanıcı Nitelikleri (UDA) 681Örnek ..................................................................................................................................... 683Kullanıcı niteliklerinin yararı ..................................................................................... 685Özet......................................................................................................................................... 686
89. İşleç Öncelikleri 687Problem Çözümleri 690Sözlük 736Dizin 748
xvi
Önsöz - Andrei Alexandrescu
Ali'yi tanıyanlarımız açık, sabırlı, ve fazla mütevaziliğe kaçmayan nazikkişiliğinin yazdığı D kitabına da yansıdığını farkedeceklerdir.
Kitaptaki her cümle belirli bir amaca hizmet ediyor ve her birisi ileriye doğrubir adıma dönüşüyor; ne fazla hızlı ne fazla yavaş. "opApply'ın tanımında daforeach'ten yararlanıldığına dikkat edin. main içinde poligon nesnesi üzerindeişleyen foreach, poligonun noktalar üyesi üzerinde işletilen bir foreach'tenyararlanmış olur." Kitap bu havada ve tam da gereken miktarda sözcüksarfederek devam ediyor. Hem de doğru sırada: Ali, – programcılığa yenibaşlayanlara üstesinden gelemeyecekleri kadar "hep birden" geliveren – dilkavramlarını takdire değer bir biçimde ardışık olarak sunmayı başarıyor.
"D Programlama Dili"nin çok beğendiğim bir tarafı daha var: bu kitap, genelanlamda programlama öğrenme açısından da iyi bir kitap. Haskell'i tanıtan birkitap aynı zamanda fonksiyonel programlamayı da öğretecektir; C üzerine olanbir kitap sistem programlama kavramlarını da verecektir; bir Python kitabı betikprogramlama yöntemlerini de gösterecektir, vs. Peki, D'yi tanıtan bir kitabın satıraralarında neler bulmayı bekleyebiliriz? En iyisi, programcılığın kendisini...
D, "işe uygun olan alet kullanma" fikrini güder ve kullanıcılarına çok sayıdaprogramlama yöntemi sunar. Bunu yaparken programcının önüne fazla gariplikde sermez. D ile kod yazmanın en zevkli yolu kodlamaya açık fikirle yaklaşmaktırçünkü şekil almaya başlayan her tasarım aslında onu başka bir kalıba sokmayaelveren farklı bir gerçekleştirme, yaklaşım, veya paradigma için taze bir fırsattır.En uygun olanlarını seçebilmesi için programcının olanakların tümünü biliyorolması gerekir – "D Programlama Dili" programcıyı bu bilgilerle donatmanın çokiyi yollarından birisi. Bu bilgileri özümsemiş olmak yalnızca iyi D kodu yazmayadeğil, genelde iyi kod yazmaya da yardım eder.
Kitap, öğretilen programlama ve dil kavramlarını destekleyen yöntemler degösteriyor. Her programcıya mutlaka öğretilen kod tekrarından kaçınılması, iyiisimler seçilmesi, kodun alt parçalara ayrılması, ve başka bir çok öğüt normalkodlamada da olduğu gibi basit çözümden sağlam çözüme doğru adım adımgeçiriliyor. "D Programlama Dili" okuyucularını sonuca hızlıca gitme yanılgısınadeğil, çok daha kalıcı yararları olan doğru kodlamaya yöneltmeye odaklanıyor.
D'nin öğretilen ilk programlama dili olabileceğini uzun zamandır tahminetmekteydim. D, kullanıcılarına çok çeşitli programlama kavramını – sistem,fonksiyonel, nesne yönelimli, türden bağımsız, kod üretmeli – içtenlikle veyapmacıklığa kaçmadan sunar. Bu fırsatı mükemmelce değerlendirdiğinigördüğüm Ali'nin kitabı da öyle.
Andrei AlexandrescuSan Francisco, Mayıs 2015
xvii
xviii
Yazarın Önsözü
D, en alt düzeylerden en üst düzeylere kadar bütün güçlü programlamakavramlarını destekleyen ve özellikle bellek güvenliğini, program doğruluğunu,ve kolay kullanımı ön plana çıkartan çok paradigmalı bir programlama dilidir.
Bu kitabın temel amacı yeni başlamış olan okuyuculara programcılığı D dilinikullanarak öğretmektir. Her ne kadar başka dillerde kazanılmış olan deneyimleryararlı olsa da, bu kitap programcılığa en temel kavramlardan başlar.
Bu kitabı izleyebilmek için D programlarınızı yazacak, derleyecek, veçalıştıracak bir ortama ihtiyacınız olacak. Bu geliştirme ortamında en azından birderleyici ve bir metin düzenleyici bulunması şarttır. Derleyici kurulumunu veprogramların nasıl derlendiklerini bir sonraki bölümde göreceğiz.
Her bölüm olabildiğince az sayıda kavramı hep daha önceki bölümlerdeöğrenilen bilgiler üzerine kurulu olarak anlatmaya çalışıyor. Bu yüzden kitabıbaşından sonuna doğru hiç bölüm atlamadan okumanızı öneririm. Bu kitap herne kadar yeni başlayanlar için yazılmış olsa da D dilinin hemen hemen tamamınıiçerir. Deneyimli okuyucular dizin bölümünden yararlanarak kitabı bir Dreferansı olarak da kullanabilirler.
Bazı bölümlerin sonunda o zamana kadar öğrendiğiniz bilgileri kullanarakprogramlayabileceğiniz küçük problemler ve kendi çözümlerinizlekarşılaştırabilmeniz için çözümler de bulunuyor.
Kitabın sonunda (ve HTML sürümünün her sayfasında) kitapta kullanılanTürkçe terimlerin İngilizcelerini içeren bir sözlük bulunuyor.
Programcılık yeni araçlar, yöntemler, ve kavramlar öğrenmeyi gerektiren çokdoyurucu bir uğraştır. D programcılığından en az benim kadar hoşlanacağınızıumuyorum. Programlama dilleri başkalarıyla paylaşıldığında hem daha kolayöğrenilir hem de çok daha zevklidir. Çeşitli D forumlarını1 izlemenizi ve oforumlara katkıda bulunmanızı öneririm.
Bu kitap İngilizce2'ye ve Fransızca3'ya da çevrilmiştir.
TeşekkürBu kitabın gelişiminde büyük katkıları bulunan aşağıdaki kişilere teşekkürederim.
Mert Ataol, Zafer Çelenk, Salih Dinçer, Can Alpay Çiftçi, Faruk Erdem Öncel,Muhammet Aydın (Mengü Kağan), Ergin Güney, Jordi Sayol, David Herberth,Andre Tampubolon, Gour-Gadadhara Dasa, Raphaël Jakse, Andrej Mitrović,Johannes Pfau, Jerome Sniatecki, Jason Adams, Ali H. Çalışkan, Paul Jurczak,Brian Rogoff, Михаил Страшун (Mihails Strasuns), Joseph Rushton Wakeling,Tove, Hugo Florentino, Satya Pothamsetti, Luís Marques, Christoph Wendler,Daniel Nielsen, Ketmar Dark, Pavel Lukin, Jonas Fiala, Norman Hardy, RichMorin, Douglas Foster, Paul Robinson, Sean Garratt, Stéphane Goujet, ShammahChancellor, Steven Schveighoffer, Robbin Carlson, Bubnenkov Dmitry Ivanovich,Bastiaan Veelo, Olivier Pisano, Dave Yost, Tomasz Miazek-Mioduszewski, GerardVreeswijk, Justin Whear, Gerald Jansen, Sylvain Gault, Shriramana Sharma, JayNorwood, Henri Menke, Chen Lejia, Vladimir Panteleev, Martin Tschierschke,ag0aep6g, Andrew Edwards, ve Steve White.
1. http://ddili.org/forum/2. http://ddili.org/ders/d.en/3. http://dlang.unix.cat/programmer-en-d/
xix
http://ddili.org/forum/http://ddili.org/forum/http://ddili.org/ders/d.en/http://ddili.org/ders/d.en/http://dlang.unix.cat/programmer-en-d/http://dlang.unix.cat/programmer-en-d/http://ddili.org/forum/http://ddili.org/forum/http://ddili.org/ders/d.en/http://ddili.org/ders/d.en/http://dlang.unix.cat/programmer-en-d/http://dlang.unix.cat/programmer-en-d/
Özellikle Luís Marques kitabın İngilizce çevirisinin her bölümü üzerindeayrıntılı düzenlemeler yaptı ve önerilerde bulundu. Bu kitap bir miktar da olsayararlı olmayı başarabilmişse bunu Luís'in usta düzenlemelerine borçluyum.
Bu kitabın yazım sürecinde heyecanımı canlı tutan bütün D topluluğunateşekkür ederim. D dili, bearophile ve Kenji Hara gibi yorulmak bilmeyenkişilerden oluşan harika bir topluluğa sahiptir.
Ebru, Damla, ve Derin, sabrınız ve desteğiniz için çok teşekkür ederim. İyi kivarsınız.
Ali ÇehreliMountain View, Mayıs 2017
xx
1 "Merhaba Dünya" Programı
Her programlama dilind