Algoritma: Koşullar
Koşul (EĞER-İSE) nedir, bilgisayar nasıl karar verir? Tek/çift/çok kollu koşullar, VE-VEYA-DEĞİL mantığı ve iç içe kararları kod yazmadan, kalemle öğren.

Seri · Algoritmalar
- 1. Algoritma Nedir? — Yazılıma Sıfırdan Başlangıç
- 2. Algoritma: Akış Şemaları
- 3. Algoritma: Sözde Kod
- 4. Algoritma: Değişkenler
- 5. Algoritma: Koşullar
Önceki yazıda değişkenleri, yani bilgiyi saklayan kutuları öğrendik. Sonlara doğru küçük bir satır vardı: yetişkin ← yaş ≥ 18. Bu satır bir doğru/yanlış değeri üretiyordu — ama biz o değerle henüz hiçbir şey yapmadık.
İşte bu yazının konusu tam olarak bu: bir doğru/yanlış değerine bakıp yol ayırmak. Bir programın “şu doğruysa bunu yap, değilse şunu yap” diyebilmesi. Buna koşul diyoruz ve bir algoritmanın karar verebilmesinin tek yolu budur. Şu ana kadar yazdığımız her şey baştan sona düz akıyordu; koşulla birlikte programımız ilk kez seçim yapmaya başlıyor.
Bilgisayar nasıl “karar” verir?
Aslında vermiyor. Bir bilgisayar hava kararınca “ışığı açayım mı acaba?” diye düşünmez. Onun yaptığı çok daha basit ve mekaniktir: kendisine önceden yazdığın bir soruyu sorar, cevabı yalnızca doğru ya da yanlış olur ve bu cevaba göre, yine senin gösterdiğin iki yoldan birine sapar.
Bütün mesele bundan ibaret. Gün boyu sen de aynısını yaparsın:
- Eğer yağmur yağıyorsa şemsiye al.
- Eğer ışık kırmızıysa dur, değilse geç.
- Eğer hesapta yeterli para varsa öde, yoksa iptal et.
Bu “eğer … ise” kalıbını bir bilgisayara anlatmanın yolu koşuldur. Karar bilgisayarın değil, senin kararındır; sen kuralı yazarsın, o harfiyen uygular. İlk yazıdaki kuralı hatırla: bilgisayar zeki değil, itaatkârdır.
Tek kollu koşul: “şu olursa şunu yap”
En yalın koşul, yalnızca bir soru sorar; cevap doğruysa fazladan bir iş yapar, yanlışsa hiçbir şey yapmadan yoluna devam eder. Tek bir kolu vardır.
Kalıbı şöyle: EĞER ile başlar, soruyu yazarsın, İSE dersin, altına yapılacak işi içeri girintili yazarsın ve BİTİREĞER ile bloğu kapatırsın.
EĞER hava_yağmurlu İSE YAZ "Şemsiyeni al"BİTİREĞER
YAZ "Dışarı çık"Bunu soldan sağa, yukarıdan aşağıya oku: “Eğer hava yağmurluysa, şemsiye al. (Bloğu kapat.) Sonra her hâlükârda dışarı çık.” Yağmur yoksa YAZ "Şemsiyeni al" satırı tamamen atlanır ve program doğrudan Dışarı çıka geçer. Akış şemaları yazısında çizdiğimiz şu şemayı hatırladın mı? İşte onun yazıya dökülmüş hâli tam olarak bu:
flowchart TD
A([Başla]) --> B{hava yağmurlu mu?}
B -- Evet --> C[Şemsiyeni al]
B -- Hayır --> D[Dışarı çık]
C --> D
D --> E([Bitti])Baklava kutusu EĞER, “Evet” oku girintili blok, iki yolun birleştiği yer ise BİTİREĞERden sonrası. Çizim ile yazı, aynı fikrin iki ayrı yüzü.
Koşulun içinde ne var? Bir doğru/yanlış sorusu
EĞER ile İSE arasına yazdığın şey bir sorudur ve cevabı ya doğru ya yanlış olmak zorundadır. Peki bu doğru/yanlış nereden gelir? Değişkenler yazısından tanıdık: bir karşılaştırmadan.
Karşılaştırma operatörlerini geçen yazılardan biliyoruz; koşulların yakıtı bunlardır:
| İşaret | Okunuşu | Örnek koşul | Ne zaman doğru? |
|---|---|---|---|
= | eşit mi | renk = "kırmızı" | renk tam olarak kırmızıysa |
≠ | eşit değil mi | cevap ≠ "evet" | cevap evet’ten farklıysa |
> | büyük mü | puan > 100 | puan 100’den fazlaysa |
< | küçük mü | stok < 5 | stok 5’in altındaysa |
≥ | büyük veya eşit mi | yaş ≥ 18 | yaş 18 ya da daha fazlaysa |
≤ | küçük veya eşit mi | hız ≤ 50 | hız 50 ya da daha azsa |
Her satır bir doğru/yanlış üretir; EĞER de o değere bakıp yol seçer. Örneğin EĞER yaş ≥ 18 İSE, aslında “yaş ≥ 18 doğru mu?” diye sorup cevaba göre davranır.
Çift kollu koşul: “ya bunu ya şunu”
Çoğu zaman bir yol yetmez: koşul doğruysa bir şey, yanlışsa başka bir şey yaparız. İşte burada DEĞİLSE devreye girer. Blok ikiye ayrılır; birinden mutlaka biri çalışır, ikisi birden asla çalışmaz.
EĞER yaş ≥ 18 İSE YAZ "Bilet verildi, iyi seyirler"DEĞİLSE YAZ "Üzgünüz, bu film 18 yaş üstüne"BİTİREĞERYaş 20 ise üstteki satır, 15 ise alttaki satır çalışır — asla ikisi birden. Bu, bir yol ayrımıdır; iki koldan yalnızca birine girilir:
flowchart TD
A([Başla]) --> B{yaş ≥ 18 mi?}
B -- Evet --> C[/"Bilet verildi" yaz/]
B -- Hayır --> D[/"18 yaş üstüne" yaz/]
C --> E([Bitti])
D --> ESözde kod yazısındaki çift/tek sayı örneğini de hatırla; o da tam bir çift kollu koşuldu:
EĞER sayı MOD 2 = 0 İSE YAZ "Çift"DEĞİLSE YAZ "Tek"BİTİREĞERMOD bölmeden kalanı veriyordu; bir sayının 2’ye bölümünden kalan 0’sa o sayı çifttir. Tek bir koşulla bütün sayıları ikiye ayırdık.
Çok kollu koşul: “şıklardan biri”
Bazen iki seçenek de az gelir. Bir öğrencinin notunu harfe çevirmek istiyoruz: 90 ve üstü AA, 80’ler BA, 70’ler BB, altı Kaldı. Burada tam dört olası sonuç var. Bunun için koşulları bir zincir hâline getiririz: DEĞİLSE EĞER.
EĞER not ≥ 90 İSE YAZ "AA"DEĞİLSE EĞER not ≥ 80 İSE YAZ "BA"DEĞİLSE EĞER not ≥ 70 İSE YAZ "BB"DEĞİLSE YAZ "Kaldı"BİTİREĞERBunu akış şemaları yazısında bir kararlar zinciri olarak çizmiştik; şimdi aynı zincirin yazıya dökülmüş hâli elimizde. Ama burada çok kritik, gözden kaçan bir kural var:
DEĞİLSE EĞER bir yenilik değil aslında; “önceki koşul yanlış çıktıysa, o zaman şunu sor” demenin kısa yolu. En sondaki yalın DEĞİLSE ise “yukarıdakilerin hiçbiri tutmadıysa” anlamına gelir — bir tür güvenlik ağı. Çok kollu koşulda çoğu zaman bu son yakalayıcıyı koymak iyi bir alışkanlıktır.
Koşulları birleştirmek: VE, VEYA, DEĞİL
Şimdiye kadar her koşulda tek bir soru sorduk. Ama gerçek hayat çoğu zaman birden fazla şartı aynı anda ister: “yağmur yağmıyor ve hava sıcaksa pikniğe git.” İşte bu “ve”, “veya”, “değil” kelimeleri koşulların dünyasında da vardır ve küçük soruları birleştirip tek bir doğru/yanlış cevabına dönüştürür. Bunlara mantıksal operatörler denir.
VE — hepsi doğru olmalı
VE, birleştirdiği koşulların tümü doğruysa doğru olur; biri bile yanlışsa sonuç yanlıştır. Zorlu, titiz bir kapı bekçisidir; herkesin bileti tam olmalı.
EĞER öğrenci VE hafta_içi İSE YAZ "İndirimli bilet"DEĞİLSE YAZ "Tam bilet"BİTİREĞERİndirim yalnızca hem öğrenciysen hem de gün hafta içiyse geçerli. Hafta sonu bir öğrenci gelse indirim yok; hafta içi öğrenci olmayan biri gelse yine yok. VE, “ikisi de” demektir.
VEYA — en az biri yetsin
VEYA, birleştirdiği koşullardan en az biri doğruysa doğru olur; ancak hepsi yanlışsa sonuç yanlış çıkar. Hoşgörülü bir bekçidir; tek bir doğru cevap kapıyı açar.
EĞER gün = "cumartesi" VEYA gün = "pazar" İSE YAZ "Bugün tatil"DEĞİLSE YAZ "Bugün iş günü"BİTİREĞERGün ikisinden herhangi biri olduğunda tatil sayılır. Günlük dildeki “veya”nın bazen “ya o ya bu ama ikisi değil” anlamına geldiğine dikkat — programlamada VEYA böyle değildir: en az biri doğruysa, ikisi de doğru olsa bile sonuç doğrudur.
DEĞİL — cevabı ters çevir
DEĞİL, bir koşulun sonucunu tersine çevirir: doğruyu yanlış, yanlışı doğru yapar. Çoğu zaman “olumsuz” bir durumu daha okunur ifade etmek için kullanılır.
EĞER DEĞİL giriş_yapıldı İSE YAZ "Lütfen önce giriş yapın"BİTİREĞERDEĞİL giriş_yapıldı, “giriş yapılmadıysa” diye okunur. EĞER giriş_yapıldı = yanlış yazmak da aynı kapıya çıkar, ama DEĞİL çoğu zaman daha akıcıdır.
Bu üçünü bir arada, gündelik karşılıklarıyla görelim:
| Operatör | Ne zaman doğru? | Gündelik karşılığı | Örnek |
|---|---|---|---|
VE | bütün koşullar doğruysa | ”hem … hem …” | yaş ≥ 18 VE bilet_var |
VEYA | en az bir koşul doğruysa | ”ya … ya … (ya da ikisi)“ | cumartesi VEYA pazar |
DEĞİL | koşul yanlışsa doğru olur | ”… değilse” | DEĞİL yağmurlu |
İç içe koşullar: karar içinde karar
Bazen bir soruyu ancak başka bir soru “evet” çıktıysa sormak isteriz. Bir koşulun bloğunun içine ikinci bir koşul koyarız; buna iç içe (nested) koşul denir.
Bir sitede önce kullanıcının giriş yapıp yapmadığına, ardından —ancak giriş yaptıysa— yönetici olup olmadığına bakalım:
EĞER giriş_yapıldı İSE EĞER yönetici İSE YAZ "Yönetim paneline hoş geldin" DEĞİLSE YAZ "Hoş geldin" BİTİREĞERDEĞİLSE YAZ "Lütfen giriş yapın"BİTİREĞERDıştaki koşul kapıyı açar; yalnızca içeri girildiyse (giriş yapıldıysa) içteki soru sorulur. Giriş yapılmadıysa program “yönetici mi?” diye hiç sormaz bile — o soruya sıra gelmez. İçteki bloğun bir kademe daha fazla girintili olduğuna dikkat et; girinti burada da kimin kime ait olduğunu gösteriyor.
Bir koşulu kâğıtta test etmek
Değişkenler yazısındaki izleme tablosu alışkanlığını hatırla. Koşullarda da benzer bir şey yaparız: aynı koşulu farklı girdilerle kâğıtta çalıştırıp her seferinde hangi dala girdiğimizi işaretleriz. En değerli girdiler sınır değerleridir — tam eşik noktaları.
Bilet örneğini (yaş ≥ 18) birkaç değerle deneyelim:
yaş | yaş ≥ 18 doğru mu? | Hangi dal çalışır? |
|---|---|---|
| 25 | doğru | ”Bilet verildi” |
| 18 | doğru | ”Bilet verildi” |
| 17 | yanlış | ”18 yaş üstüne” |
| 0 | yanlış | ”18 yaş üstüne” |
Özellikle 18 satırına dikkat: ≥ “büyük veya eşit” olduğu için tam 18 yaşındaki kişi bileti alır. Eğer koşulu yaş > 18 yazsaydık, 18 yaşındaki biri geri çevrilirdi — tek bir işaretin sınırda kocaman bir fark yarattığını görüyor musun? Koşulları hep bu eşik değerlerinde test et; hataların çoğu tam orada saklanır.
Sık yapılan hatalar
Kendin dene
Kalem ve kâğıt yeter, başka hiçbir araca gerek yok. Önce koşulu sözde kodla yaz, sonra birkaç farklı girdiyle kâğıt üstünde çalıştırıp doğru dala gittiğini kontrol et.
Egzersiz 1 — Geçti mi, kaldı mı? (kolay)
Bir öğrencinin sınav notu var. Not 50 ve üzerindeyse “Geçti”, altındaysa “Kaldı” yaz.
Egzersiz 2 — Ücretsiz kargo (orta)
Bir alışveriş sepetinin tutarı 200 TL ve üzeriyse ya da müşteri üyeyse kargo ücretsiz olsun; ikisi de değilse 30 TL kargo eklensin.
Egzersiz 3 — Ne giymeli? (mini proje)
Hava sıcaklığına göre öneri ver: 30 ve üstü “tişört”, 15–29 arası “ceket”, 15’in altı “mont”. Bir de yağmur yağıyorsa —sıcaklık ne olursa olsun— önerinin yanına “şemsiye de al” eklensin.
Özet
İlgili yazılar
Sıkça sorulan sorular
Koşul (if) nedir?
Koşul, bir programın "eğer şu doğruysa şunu yap" diye yol ayırmasıdır. Bir soru sorulur, cevabı doğru/yanlış olur ve bilgisayar bu cevaba göre farklı bir adıma gider. Akış şemasındaki karar (baklava) kutusunun ve sözde koddaki EĞER … İSE bloğunun yaptığı iş budur; bir algoritmanın karar verebilmesinin tek yoludur.
EĞER … İSE … DEĞİLSE ne işe yarar?
İki yolu olan bir karardır: koşul doğruysa İSE bloğundaki adımlar, yanlışsa DEĞİLSE bloğundaki adımlar çalışır. "Ya bunu ya şunu" durumudur. Gerçek kodda IF … THEN … ELSE olarak geçer. Yalnızca doğru olduğunda bir iş yapılacaksa DEĞİLSE yazılmaz; buna tek kollu koşul denir.
Karşılaştırma operatörleri nelerdir?
Bir koşulun içindeki soruyu kuran işaretlerdir: = (eşit mi), ≠ (eşit değil mi), > (büyük mü), < (küçük mü), ≥ (büyük veya eşit mi) ve ≤ (küçük veya eşit mi). Her biri bir doğru/yanlış değeri üretir; koşullar bu değerle çalışır. Koşulun içindeki = "eşit mi?" diye SORAR, atamadaki gibi "içine koy" DEMEZ.
VE, VEYA, DEĞİL (mantıksal operatörler) ne demek?
Birden fazla koşulu birleştirmeye ya da bir koşulu tersine çevirmeye yararlar. VE, iki koşulun DA doğru olmasını ister (yaş ≥ 18 VE bilet var). VEYA, en az birinin doğru olması yeter (cumartesi VEYA pazar). DEĞİL, bir koşulun sonucunu ters çevirir (DEĞİL yağmurlu). Bunlar Boole mantığından gelir.
Çok kollu koşul (else if) nedir?
İkiden fazla seçenek olduğunda kurulan koşul zinciridir: EĞER … İSE, DEĞİLSE EĞER … İSE, DEĞİLSE … Bilgisayar koşulları yukarıdan aşağıya sırayla dener ve DOĞRU olan İLK dala girer, gerisine hiç bakmaz. Notu harfe çevirmek (90 ve üstü AA, 80 ve üstü BA…) buna klasik örnektir. Bu yüzden koşulların sırası önemlidir.
İç içe koşul (nested if) nedir?
Bir koşulun İSE ya da DEĞİLSE bloğunun içine başka bir koşul koymaktır. Önce dıştaki soru cevaplanır, ancak o dala girildiyse içteki soru sorulur. "Önce giriş yaptı mı? Yaptıysa yönetici mi?" gibi, birbirine bağlı, kademeli kararlar için kullanılır.
Koşuldaki = ile atamadaki = farkı nedir?
Bir koşulun içinde = işareti "iki şey birbirine eşit mi?" diye SORAN bir karşılaştırmadır ve doğru/yanlış üretir. Atamada ise = "şu değeri şu kutuya koy" diye EMREDEN bir komuttur. Yeni başlayanların en çok karıştırdığı nokta budur; birçok gerçek dil bu yüzden eşitliği kontrol etmek için == kullanır, atama için = kullanır.