Skip to content

Bölüm 1 / 15

Program nasıl çalışır

Talimat, bellek, akış.

8 dakikalık okuma

Hat 0'da ilk programını yazdın ve çalıştırdın. Bu ders, o programın çalışırken makinenin içinde gerçekte ne yaptığını üç kavramla açıklar: talimat, bellek ve akış. Bu üçlüyü kavrayan biri, hiç görmediği bir kod parçasının ne yapacağını satır satır izleyerek çıkarabilir — programlamanın en temel becerisi budur ve bu derste kazanılır.

01Ne öğreneceksin

  • Programın sıralı talimat listesi olduğu; işlemcinin bu listeyi yukarıdan aşağı, teker teker yürüttüğü
  • Belleğin çalışma tezgâhı olduğu; değerlerin adlandırılmış göze konduğu ve atamanın o anki değeri kopyaladığı
  • Üç akış yapısı: sıra, seçim, tekrar — önümüzdeki dört dersin haritası
  • Bir kod parçasını kağıt üzerinde izleme (trace) tekniği: çıktıyı çalıştırmadan bilmek

02Talimat: programın atomu

Hat 0'dan biliyorsun: işlemci yalnızca küçük makine komutları yürütür ve kaynak kod derlenerek bu komutlara çevrilir. Kaynak kod tarafında da aynı yapı vardır: bir program, talimatların sıralı listesidir. C#'ta bir talimat çoğunlukla bir satırdır ve noktalı virgülle biter:

var ad = "Aysel";                      // 1. talimat: değeri sakla
Console.WriteLine("Merhaba " + ad);   // 2. talimat: ekrana yaz

Her talimat küçük ve kesin bir iş yapar: bir değeri sakla, iki değeri topla, ekrana yaz, bir dosyayı aç. Talimatlar tek başına önemsiz görünür; programın gücü binlercesinin doğru sırayla dizilmesinden gelir. Programlamayı öğrenmek, büyük bir işi bu küçük ve kesin adımlara bölebilmeyi öğrenmektir — bu bölme işinin planına algoritma denir: bir problemi çözen adımların sıralı, açık tarifi. Algoritma dilden bağımsızdır; aynı algoritma C#, JavaScript ya da Python ile yazılabilir.

03Sıra: yukarıdan aşağı, teker teker

İşlemci listeyi yukarıdan aşağı yürütür; bir talimat bitmeden sonrakine geçmez ve hiçbir talimatı kendiliğinden atlamaz. Bu yüzden aynı talimatlar farklı sırayla farklı sonuç verir:

var bakiye = 100;
Console.WriteLine(bakiye);   // önce yaz: 100
bakiye = bakiye - 30;        // sonra düş
var bakiye = 100;
bakiye = bakiye - 30;        // önce düş
Console.WriteLine(bakiye);   // sonra yaz: 70

İki parçada da talimatlar aynıdır; yalnızca sıra değişti ve çıktı değişti. Kod okurken ilk alışkanlığın bu olmalı: satırların ne yaptığına bakmadan önce hangi sırayla çalıştıklarını takip et. Program yazarken de hata çoğu zaman "yanlış talimat"tan değil, "doğru talimat, yanlış yerde"den çıkar.

04Bellek: değerlerin durduğu yer

Talimatlar ara sonuç üretir: bir toplamın sonucu, kullanıcının yazdığı ad, bir sayaç. Bu değerlerin çalışma boyunca bir yerde durması gerekir — o yer bellektir (RAM, Hat 0'ın 2. dersi). Program bellekten adlandırılmış gözler kullanır: bir göze ad verilir, içine değer konur, ada yazılınca o değer okunur. Bu adlandırılmış göze değişken denir; ayrıntısı bir sonraki dersin tamamıdır, bugünlük iki kural yeter:

var a = 4;          // "a" adında göz aç, içine 4 koy
var b = 7;
var toplam = a + b; // a ile b'nin O ANKİ değerlerini oku, topla, "toplam"a koy
a = 10;             // a'nın içeriğini değiştir
Console.WriteLine(toplam);

Çıktı ne olur? 11 — 17 değil. Çünkü = işareti bir bağ kurmaz, o anki değeri kopyalar: üçüncü satır çalıştığında a 4'tü, toplam 11 olarak hesaplandı ve belleğe kondu. Dördüncü satırda a'nın değişmesi, çoktan hesaplanmış toplam'ı etkilemez. İki kural şunlardır:

  • Atama kopyalar: = sağdaki ifadeyi hesaplar, sonucu soldaki göze yazar. Geçmişe dönük bağlantı yoktur.
  • Okuma o anki değeri verir: bir değişkenin adı geçtiğinde, o satır çalıştığı andaki içeriği kullanılır.

05Girdi → işlem → çıktı

Neredeyse her program aynı iskelete oturur: dışarıdan veri alır (girdi), bellekte hesap yapar (işlem), sonucu dışarı verir (çıktı). Hat 0'daki programında girdi kodun içine gömülüydü; girdiyi kullanıcıdan almak tek satırdır:

Console.Write("Adın: ");          // ekrana sor (satır atlamadan)
var ad = Console.ReadLine();      // kullanıcının yazdığını belleğe al
Console.WriteLine("Merhaba " + ad);  // işle ve çıktıla

Console.ReadLine() programı durdurur, kullanıcı yazıp Enter'a basana kadar bekler ve yazılanı verir. Girdi klavye olmak zorunda değildir: dosyadan, ağdan, veritabanından da gelir; çıktı da ekran yerine dosyaya ya da başka bir programa gidebilir. Kaynaklar değişir, iskelet değişmez. Bir programı anlamaya çalışırken ilk soru hep şudur: girdisi ne, çıktısı ne, arada ne hesaplanıyor?

06Akış: üç yapı yeter

Şimdiye kadarki örneklerde akış tek biçimliydi: her satır bir kez, sırayla. Gerçek programlar iki yetenek daha ister: duruma göre farklı yol seçmek ve bir işi tekrarlamak. Bilgisayar biliminin yerleşik sonucu şudur: her program, yalnızca üç akış yapısının birleşimiyle yazılabilir:

YapıAnlamıC#'taki karşılığıDersi
SıraTalimatlar art arda, yukarıdan aşağısatırların dizilişibu ders
SeçimKoşula göre farklı dal çalışırif/else, switch4. ders
TekrarBir blok, koşul sağlandıkça yinelenirfor, while, foreach5. ders

Önümüzdeki dersler bu tabloyu dolduracak: önce değerler ve tipler (2. ders), sonra değerleri işleyen operatörler (3. ders), sonra seçim (4. ders) ve tekrar (5. ders). Beşinci dersin sonunda üç yapının tamamını kullanıyor olacaksın; hattın kalanı bu çekirdeğin üzerine düzen ve ölçek ekler.

07İfade ve deyim

Kod okurken işine yarayacak bir ayrım: ifade (expression), hesaplanıp bir değer üreten parçadır; deyim (statement), bir iş yapan tam talimattır. a + b bir ifadedir — hesaplanır, 11 üretir, ama tek başına hiçbir şey yapmaz. var toplam = a + b; bir deyimdir — ifadenin ürettiği değeri alır ve belleğe yazar.

a + b              // ifade: değer üretir (11), tek başına iş yapmaz
var toplam = a + b;   // deyim: ifadeyi hesaplar, sonucu saklar
Console.WriteLine(toplam);   // deyim: değeri ekrana yazar

İfadeler iç içe geçebilir: Console.WriteLine((a + b) * 2) satırında önce a + b, sonra ... * 2 hesaplanır, en son sonuç yazılır — içten dışa. Derleyicinin hata mesajlarında da bu iki terim geçer ("invalid expression", "; expected" bir deyimin bitmediğini söyler); terimleri tanımak mesajları okumayı kolaylaştırır.

08Kodu elle izlemek

Bu dersin becerisi şu: bir kod parçasının çıktısını çalıştırmadan söylemek. Tekniğin adı izlemedir (trace): kağıda değişkenler için birer sütun aç, satırları sırayla işle, her atamada ilgili sütunun yeni değerini yaz. Şu parçayı izleyelim:

var x = 3;
var y = x * 2;
x = x + y;
var z = x - 1;
Console.WriteLine(x);
Console.WriteLine(y);
SatırxyzÇıktı
var x = 3;3——
var y = x * 2;36—
x = x + y;96—
var z = x - 1;968
Console.WriteLine(x);9689
Console.WriteLine(y);9686

Üçüncü satıra dikkat: x = x + y; kendi kendine atamadır ve 4. bölümün kuralıyla çözülür — önce sağ taraf o anki değerlerle hesaplanır (3 + 6 = 9), sonra sonuç x'e yazılır. Bu kalıp (bir değişkeni kendi değeriyle güncellemek) döngülerin bel kemiğidir; 5. derste sürekli kullanacaksın. İzleme, yazılı sınav sorularının da ("aşağıdaki kodun çıktısı nedir?") standart çözüm yöntemidir.

09Mini alıştırma — kağıtta izle, makinede doğrula

Yaklaşık 15 dakika · kağıt + Hat 0'da kurduğun ortam

  1. Aşağıdaki programı çalıştırmadan, kağıtta 8. bölümdeki gibi bir izleme tablosuyla işle ve üç çıktı satırını tahmin et:
    var a = 5;
    var b = a + 3;
    a = b * 2;
    var c = a - b;
    b = c;
    Console.WriteLine(a);
    Console.WriteLine(b);
    Console.WriteLine(c);
  2. Hat 01'e başlarken sözü verilen eklentiyi kur: VS Code'da Extensions (Ctrl+Shift+X) → "C# Dev Kit" ara → Install (yayıncısı Microsoft olan). Bu eklenti C# için renklendirme, tamamlama, üzerine gelince açıklama, hataların dotnet run beklemeden anlık altçizgiyle gösterilmesi ve Shift+Alt+F biçimlendirmesini getirir. İlk açılışta arka planda bileşen indirdiği için bir-iki dakika bekletebilir.
  3. Terminalde yeni bir proje aç ve doğrula: dotnet new console -o izleme, cd izleme, code . — kodu Program.cs'e yaz, dotnet run ile çalıştır. Yazarken eklentinin işini gözle: bir noktalı virgülü silip hatanın daha çalıştırmadan altının çizildiğini gör, geri koy. Tahminin tutmadıysa hangi satırda ayrıldığını tabloda bul; tablo yanlışsa neden yanlış okuduğunu not et.
  4. Programın ilk satırındaki 5'i 10 yap; önce kağıtta yeni çıktıyı çıkar, sonra çalıştırıp doğrula.
  5. Son adım: Console.Write("Bir sayı yaz: "); ve var girdi = Console.ReadLine(); satırlarını programın başına ekle, sonuna Console.WriteLine("Girdiğin: " + girdi); ekle. Çalıştır — programın seni beklediğini, yazdığını alıp kullandığını gör. Girdi → işlem → çıktı iskeletinin üç parçası da artık elinde.

10Kendini sına

İşlemci bir programın talimatlarını hangi sırayla yürütür? Aynı talimatlar farklı sırayla dizilirse ne olur?

Yukarıdan aşağı, teker teker; bir talimat bitmeden sonrakine geçilmez, hiçbir talimat kendiliğinden atlanmaz. Sıra sonucun parçasıdır: aynı talimatlar farklı sırayla farklı sonuç üretebilir (bakiyeyi yazmadan önce düşmekle yazdıktan sonra düşmek gibi). Akışı değiştirmenin yolu seçim ve tekrar yapılarıdır.

var a = 5; var b = a; a = 8; — bu üç satırdan sonra b kaçtır, neden?

b 5'tir. Atama, sağdaki ifadenin o anki değerini kopyalar: ikinci satır çalıştığında a 5'ti, dolayısıyla b'ye 5 kondu. Üçüncü satırın a'yı değiştirmesi b'yi etkilemez — = kalıcı bir bağ kurmaz, anlık kopya alır.

Üç temel akış yapısı nedir? Her birinin C#'taki karşılığından bir örnek ver.

Sıra (talimatların art arda yürümesi — satırların dizilişi), seçim (koşula göre dal seçmek — if/else, switch) ve tekrar (bir bloğu koşul sağlandıkça yinelemek — for, while). Her program bu üç yapının birleşimiyle yazılabilir.

İfade ile deyim arasındaki fark nedir? x + 1 ve x = x + 1; hangisidir?

İfade hesaplanıp değer üreten parçadır; deyim iş yapan tam talimattır. x + 1 ifadedir: bir değer üretir ama tek başına hiçbir şey yapmaz. x = x + 1; deyimdir: sağdaki ifadeyi o anki değerle hesaplar ve sonucu x'e yazar — yani x'i bir artırır.

11Sınav köşesi

Yazılıda nasıl sorulur

Bu dersin konusu yazılıda iki kalıpla gelir. Birincisi kod izleme: "Aşağıdaki kod parçasının çıktısı nedir?" — 5-10 satırlık, kendi kendine atamalar içeren bir parça verilir; çözüm yolu 8. bölümdeki izleme tablosudur, kafadan takip etmeye çalışma. İkincisi kavram: "Algoritma nedir?" (bir problemi çözen adımların sıralı ve açık tarifi), "Aşağıdakilerden hangisi temel kontrol yapılarından değildir?" (sıra / seçim / tekrar üçlüsünü bil).

Sözlüde nasıl anlatılır — 2 dakikalık taslak

"Bir program çalışırken ne olur?" sorusuna dört adımlı cevap: (1) Program, derlenmiş talimatların sıralı listesidir; işlemci bunları yukarıdan aşağı teker teker yürütür. (2) Ara değerler bellekte adlandırılmış gözlerde — değişkenlerde — durur; atama o anki değeri kopyalar. (3) Tipik iskelet girdi → işlem → çıktıdır. (4) Akış üç yapıyla yönetilir: sıra, seçim (if/switch), tekrar (döngüler) — her program bu üçünün birleşimidir. Bitirirken bir cümle: "Bu yüzden kod okurken önce akışı, sonra tek tek satırları takip ederim" — muhakeme sınandığı için bu cümle fark yaratır.