Karar yapılarının kullanım şekli nedir?
Karar Yapıları: Kodunun Akıllı Olmasını Sağla
Karar yapıları, programlarının akışını kontrol etmenin temel taşıdır. Basitçe söylemek gerekirse, belirli koşullar sağlandığında hangi kod bloğunun çalışacağını belirlemene yardımcı olurlar. Bu, kodunu çok daha dinamik ve akıllı hale getirir.
- Temel `if` ve `else` Yapısı: İki Yol Ayrımı
En temel karar yapısı `if` ifadesidir. Bir koşulun doğru olup olmadığını kontrol eder ve doğruysa içindeki kod bloğunu çalıştırır.
Örneğin, bir öğrencinin sınav notuna göre geçip kalacağını belirlemek isteyelim. Eğer not 50'den büyük veya eşitse (not >= 50
), öğrenci geçmiştir. Değilse, öğrenci kalmıştır.
python
not = 75
if not >= 50:
print("Geçtiniz!")
else:
print("Kaldınız.")
Burada, not
değişkeninin değeri 75 olduğu için koşul (not >= 50
) doğrudur ve "Geçtiniz!" çıktısı alınır. Eğer not
değişkeni 40 olsaydı, koşul yanlış olurdu ve `else` bloğu çalışarak "Kaldınız." çıktısı verilirdi.
- `elif` ile Çoklu Koşullar: Birden Fazla Seçenek
Bazen sadece iki seçenekle sınırlı kalmayız. Farklı puan aralıklarına göre farklı başarı seviyeleri belirlemek isteyebiliriz. İşte burada `elif` (else if) devreye girer.
Bir öğrencinin aldığı puana göre notunu harf olarak belirleyelim:
- 90 ve üstü: A
- 80-89: B
- 70-79: C
- 60-69: D
- 50-59: E
- 50 altı: F
Bu durumu `if`, `elif` ve `else` ile şöyle ifade edebiliriz:
python
puan = 85
if puan >= 90:
harfNotu = "A"
elif puan >= 80:
harfNotu = "B"
elif puan >= 70:
harfNotu = "C"
elif puan >= 60:
harfNotu = "D"
elif puan >= 50:
harfNotu = "E"
else:
harfNotu = "F"
print(f"Aldığınız puan: {puan}, Harf Notunuz: {harfNotu}")
Bu kodda, puan
85 olduğu için ilk `if` koşulu (puan >= 90
) yanlış olur. Ardından ilk `elif` koşulu (puan >= 80
) doğru olduğu için harfNotu
"B" olarak atanır ve diğer kontroller yapılmaz. Bu, hem okunaklılığı artırır hem de gereksiz yere koşulların kontrol edilmesini engeller.
- Mantıksal Operatörler: Koşulları Birleştirme
Bazen bir kararın birden fazla koşula bağlı olması gerekir. İşte burada mantıksal operatörler (`and`, `or`, `not`) devreye girer.
Örnek: Bir kullanıcıya özel indirim kuponu göndermek istiyoruz. Bu kuponu yalnızca 100 TL'den fazla alışveriş yapan VE son siparişi 30 gün içinde veren müşterilere göndereceğiz.
python
toplamHarcama = 120
sonSiparisGunu = 15 # Bugünden 15 gün önce
if toplamHarcama > 100 and (30 - sonSiparisGunu) <= 30:
print("Size özel indirim kuponu gönderildi!")
else:
print("Kupon hakkınız bulunmuyor.")
Bu örnekte, hem toplamHarcama
100'den büyük olmalı hem de son siparişin üzerinden 30 günden az zaman geçmiş olmalı. Her iki koşul da doğru olduğunda indirim kuponu gönderilir. and
operatörü, iki koşulun da doğru olmasını gerektirir.
Diğer bir senaryo: Bir kullanıcının yönetici olup olmadığını veya belirli bir rolü olup olmadığını kontrol edebiliriz. Bu durumda or
kullanırız.
python
kullaniciRolleri = ["editor", "yazar"]
if "admin" in kullaniciRolleri or "editor" in kullaniciRolleri:
print("Yönetim paneline erişebilirsiniz.")
else:
print("Bu alana erişiminiz yok.")
Burada, kullanıcının rol listesinde "admin" veya "editor" varsa erişim izni verilir. Deneyimlerime göre, karmaşık koşulları daha küçük ve anlaşılır parçalara ayırmak, kodun okunurluğunu ciddi şekilde artırır.
- `switch-case` (Python'da `match-case`): Birden Fazla Eşleşme
Bazı programlama dillerinde `switch-case` yapısı bulunur. Python 3.10 ve sonrasında bu işlevi `match-case` ile yerine getirebiliriz. Bu yapı, belirli bir değişkenin değerine göre farklı kod bloklarını çalıştırmak için kullanılır.
Örneğin, bir kullanıcının seçtiği sevkiyat yöntemine göre işlem yapmak isteyelim:
python
sevkiyatYontemi = "kargo"
match sevkiyatYontemi:
case "posta":
print("Standart posta ile gönderiliyor.")
case "kargo":
print("Hızlı kargo ile gönderiliyor.")
case "express":
print("En hızlı express kargo ile gönderiliyor.")
case _: # Varsayılan durum
print("Geçersiz sevkiyat yöntemi.")
Bu kodda, sevkiyatYontemi
değişkeninin değeri "kargo" olduğu için ilgili `case` bloğu çalışır. Eğer değişkenin değeri hiçbir `case` ile eşleşmezse, `_` (wildcard) ile belirtilen varsayılan blok çalışır. Bu yapı, çok sayıda `elif` kullanmak yerine daha temiz bir alternatif sunar.
Pratik İpucu: Özellikle bir değişkenin belirli değerlere göre farklı davranışlar sergilemesi gerektiğinde `match-case` (veya diğer dillerdeki `switch-case`) kullanmak, kodunu daha düzenli ve bakımı kolay hale getirir.