Benim gordugum, bir suru ogrencinin/yeni baslayanin eksik oldugu bir konu: Karmasik ve akis degistiren kosullar, icice loop’lar.
Mesela asal ornegindeki gibi:
#sayi loop'u:
...
# asal loop'u:
asal = true
for div in range(2,sayi):
if sayi % div == 0:
asal = false
break
Fonksiyonel programlamadaki any/all kadar kolay degil. Birim eleman atamasi (asal = true) ic loop’un icine veya dis loop’un disina kayabiliyor. Kosulla De Morgan karsiti arasinda kararsiz kalinabiliyor, veya ikisi karistirilabiliyor (if sayi % div != 0: asal = true). break
unutuluyor…
Cozumu ise hem cok basit hem de yazilim muhendisligi nedzinde daha guzel: Yardimci fonksiyon.
def is_prime(n):
for div in range(2, n):
if n % div == 0:
return false
return true
Erken donus icin state tutup break
kullanmak yerine dogrudan return
koyabiliyoruz. Kod hem yazmasi, hem de okumasi daha kolay bir hale geliyor. Ustelik kisa devre yapmasi da garanti oluyor!
Simdi ogrencim olsa bu tur egzersizler veririm, her noktada yardimci fonksiyon kullanilmasini kafaya kazirim.