C#'da 1 satırlık bir sayı tahmini oyunu(bunu gerçekten kendim yaptım)

static void Main() { Console.WriteLine($"1-10 arası bir sayı yaz."); while (true) { try { Random rnd = new Random(); int[] sayılar = { 1, 11 }; int cevap = rnd.Next(sayılar[0], sayılar[1]); int tahmin = int.Parse(Console.ReadLine()); if (tahmin == cevap) { Console.WriteLine($"Doğru cevap! Cevap: {cevap}"); break; } else if (tahmin <= 0 || tahmin >= 11) { Console.WriteLine("Sayı çok küçük/büyük! Yeni sayı yaz."); } else { Console.WriteLine($"Yanlış cevap! Cevap: {cevap}"); break; } } catch (Exception e) { Console.WriteLine($"Hata!: {e}"); } } }; Main();
2 Beğeni

Bence çok satırlı kodlar daha okunur oluyor. =)

yani öyle de okunur oluyor

Merhaba;

@ismailarilik Hocama katılıyorum.

C#’ta yazdığın source kod okunaklı ve temiz olmak içindir. Roslyn derleyicisi bunu IL’e çevirirken boşlukları, satır sonlarını ve yorumları zaten dikkate almaz. Program çalıştırıldığında ise CLR, IL kodunu JIT üzerinden native makine koduna dönüştürür ve performans optimizasyonları burada gerçekleşir.

Kısaca, kodu kaç satır olarak yazdığın Roslyn’in umrunda değildir.

int cevap = rnd.Next(1, 11);
Console.WriteLine($"Doğru cevap! Cevap: {cevap}");

TLDR; Buradan sonrası konu ile alakalı değil. Bizim yazdığımız kodun hangi aşamalardan geçip optimize edildiğini belirtmek için ekledim.

Yukarıdaki kaynak kodumuz Roslyn tarafından optimize edilip buna benzer bir yapıya çevrilecek (IL):

IL_0000: newobj     instance void [System.Runtime]System.Random::.ctor()
IL_0005: ldc.i4.1
IL_0006: ldc.i4.s   11
IL_0008: callvirt   int32 [System.Runtime]System.Random::Next(int32, int32)
IL_000D: stloc.1

IL_000E: ldstr      "Doğru cevap! Cevap: {0}"
IL_0013: ldloc.1
IL_0014: box        [System.Runtime]System.Int32
IL_0019: call       void [System.Console]System.Console::WriteLine(string, object)

CLR runtime alır bu IL çıktısını JIT Compiler’a yollar, JIT Compiler bunu native CPU assembly’ye çevirir (run-time aşaması) ve CLR’a geri teslim eder.

Bu noktada kod böyle bir şeye benzeyecek:

mov     rcx, 1         ; parametre 1 (min)
mov     rdx, 11        ; parametre 11 (max)
call    System.Random.Next

mov     r8d, eax       ; eax → cevap
lea     rcx, [format]  ; "Doğru cevap! Cevap: {0}"
mov     rdx, r8        ; parametre (object olarak değiştirilebilir)
call    System.Console.WriteLine

Sonra CLR (runtime) alır bu assembly direktiflerini CPU’ya verir.

Artık kodumuz sadece 1 ve 0 lardan ibaret :slight_smile:

10111000 00000101
10001001 11000110
11101010 11111001

Bilgisayar “1 ve 0’lardan ibaret” dediğimiz nokta (elektirik seviye) burasıdır.

1 Beğeni

yani ben de katılıyorum zaten

2 Beğeni