On Monday, 11 July 2022 at 04:39:34 UTC, dunecourser wrote:
>D'nin ne olduğu belli, her türlü paradigmadan az da olsa çok da olsa içinde barındırıyor. Biz de bugün az olanları konuşalım.
Anlatılmasını istediğim özellikler:
- Optional ve Nullable
- Ownership ve Borrowing, dolayısıyla @live da
- Pattern Matching
- Sum Type
- Algebraic Data Types
- while (auto n = expression)
- Async/Await
defer>
Bu başlıkta D ile alakası olmayan (defer vb.) şeyler vardır! Üstelik forum ile doğrudan alakalı olmadığı için D öğrenmeye çalışanları etkileyebilir/kafasını karıştırabilir. Ama amaç 2 dili karşılaştırmaksa gözlerin aşina olmadığı değişik while()
ile başlayalım :)
Ziglang'da (C'yi geliştirmekten çok dağınık olmuş) iki parçaya bölünerek yapılan döngü, birçok programlama dilinde (tabii ki D'de) daha basit yapılabilirdi:
var i: i32 = 0;
while (i < lines_to_fill) : (i += 1) {
insertGarbageRowAtBottom(t);
}
Hem 6. soruya cevap olsun hem de D'de while()
döngüsü C ile ne kadar uyumlu olduğunu görelim. Çünkü bu yaptıklarımızı gerekirse C ile derlenecek şekilde yazabilirdik:
import std.stdio;
int sesliMi(immutable(char) c)
{
switch(c)
{
case 'a', 'e', 'i', 'o', 'u': return 3;
case 'A', 'E', 'I', 'O', 'U': return 2;
default: return 1;
}
}
void main()
{
string str = "Kuzey Amerika Devletleri: CAN, USA, MEX";
size_t b = 0; //başlangıç
while(int sonuç = str[b].sesliMi)
{
if(sonuç > 1)
{
if(sonuç == 2) write(':');/*
if(sonuç == 3) write('.');//*/
}
else str[b].write;
if(++b == str.length) break;
}
writeln;
} /* ÇIKTISI:
Kzy :mrk Dvltlr: C:N, :S:, M:X
*/
Önce bir lexer yazdığınızı hayal edin. Ahh, şu döngüyü devam ettiren koşulun ne olduğunu biri bana söylese diyeceksinizdir. Aslında bu örneği, basit bir foreach()
içine switch case
bloğunu yerleştirerek de yapabilirdik. Ama belki amacınız sadece sesli harfler elemek değildir ve 1'den büyük döngüyü devam ettirebilecek bir çok durum vardır.
Yukardaki kodları kurcalayarak, bu durumları (örneğin ben büyük sesliler yerine : işareti basmasını istedim) görebilir ve hatta yenilerini (örn. noktalama işaretleri, sessiz harfler vb.) elemeyi sağlayabilirsiniz.
Dip Not: Elbbette bu sadece bir örnek. Yani amaç, ne "sidik yarışı" ne de D gibi güçlü bir dilde daha basit yapılabilecek işin zorunu göstermek. Ziglang ise konumuz dışı kalmasını salık veririm. O yüzden daha fazla uzatmıyorum.
Başarılar...