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ıra | Talimatlar art arda, yukarıdan aşağı | satırların dizilişi | bu ders |
| Seçim | Koşula göre farklı dal çalışır | if/else, switch | 4. ders |
| Tekrar | Bir blok, koşul sağlandıkça yinelenir | for, while, foreach | 5. 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ır | x | y | z | Çıktı |
|---|---|---|---|---|
var x = 3; | 3 | — | — | |
var y = x * 2; | 3 | 6 | — | |
x = x + y; | 9 | 6 | — | |
var z = x - 1; | 9 | 6 | 8 | |
Console.WriteLine(x); | 9 | 6 | 8 | 9 |
Console.WriteLine(y); | 9 | 6 | 8 | 6 |
Üçü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
- 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); - 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 runbeklemeden 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. - Terminalde yeni bir proje aç ve doğrula:
dotnet new console -o izleme,cd izleme,code .— koduProgram.cs'e yaz,dotnet runile ç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. - Programın ilk satırındaki
5'i10yap; önce kağıtta yeni çıktıyı çıkar, sonra çalıştırıp doğrula. - Son adım:
Console.Write("Bir sayı yaz: ");vevar girdi = Console.ReadLine();satırlarını programın başına ekle, sonunaConsole.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.
