Kimi kaynaklarda Early Return, kimi kaynaklarda Return Early ve hatta zaman zaman Early Return pattern olarak geçen bu kavram, yani erken dönüş kavramı nedir? Aslında adı amacını belli ediyor; amaç bir fonksiyonda döndürülecek değerin mümkün olduğunca erken döndürülmesi. Peki bu bize ne sağlıyor ve neden kullanmalıyız? Aşağıdaki kod örnekleri ile anlatmaya çalışacağım; Örnekler PHP dili ile yazıldı fakat bu metot çoğu programlama dili için geçerlidir.
Koşullu ifade kontrolü yapan basit bir fonksiyon geleneksel olarak şöyle şekillendirilir;
public function enterSite($age)
{
// 18 yaşından büyük mü?
if ($age >= 18) {
// Siteye girme izni var, gereken kodu çalıştır
}
else
{
return false;
}
}
Bu fonksiyonda $age değişkeni 18’den büyükse IF
blogunun içerisindeki işlemler gerçekleştiriliyor. Aynı kodu şöyle de yazabilirdik.
public function enterSite($age)
{
if ($age < 18) { return }
// Siteye girmek için gereken kodu çalıştır.
}
Kodu bu şekilde çalıştırdığımızda işlev olarak hiç bir şey değişmez. Yaş 18’den küçükse fonksiyon hemen sonlandırılır, aksi takdirde geri kalanı çalıştırılmaya devam edilir. Ama bunun yanında girinti (indentation) seviyesi düşmüş olur, fazladan bir girinti daha yapmamıza gerek kalmaz ve kodu okumak daha da kolaylaşır.
Aslına bakarsanız IF/ELSE ifadesini tersten yazarak, ELSE bölümünü IF blogu haline getirmiş olduk.
Fonksiyonu biraz daha komplike bir hale getirdiğimizde bu yaklaşımın faydası daha net görülecek.
Yeni bir örnekle devam edelim ve kodumuzun şöyle olduğunu düşünelim.
public function canEnterSite($age, $paid)
{
// $age değişkeni integer mı?
if ( is_int($age) )
{
// $paid değişkeni booelan mı?
if ( is_bool ($paid) {
// 18 yaşından büyük mü?
if ( $age >= 18 && $paid )
{
// Siteye girmek için gereken kodu çalıştır
retur $true
}
else
{
throw new exception("18 yaşından büyük ve ödeme yapmış olmalısınız");
}
}
else
{
throw new exception("Geçersiz ödeme bilgisi);
}
}
else {
throw new exception("Geçersiz yaş bilgisi);
}
}
Şimdi bu kodu early return kuralımıza göre yeniden düzenleyelim. Dönüşleri mümkün olduğunca erken yapmaya çalışalım, bunu yaparkende ELSE’leri IF’e koyma ipucumuzdan faydalanalım.
public function canEnterSite($age, $paid)
{
// $age değişkeni bir integer mı?
if ( is_int($age) ) {
throw new exception("Geçersiz yaş");
}
// $page değişkeni bir boolean mı?
if ( is_bool($paid) ) {
throw new exception("Geçersiz ödeme bilgisi);
}
if ( $age < 18 || ! $paid ) {
throw new exception("18 yaşından büyük ve ödeme yapmış olmalısınız")
}
// Siteye girmek için gereken kodu çalıştır
return true;
}
Gördüğünüz gibi bu kod bize şu avantajları sağlıyor
- Girinti ( Indentation) seviyesi daha az, okuması ve anlaması daha kolay
- Her şey yolunda gitmesi durumunda dönmesi gereken yanıt her zaman fonksiyonun en altında, if blokları içinde aramamıza gerek kalmıyor
- Yeni bir hata durumu eklememiz gerekirse eklemek çok daha kolay, doğru yeri bulup yeni bir if/else bloğu açmamıza gerek yok
Kapak Fotoğrafı Negative Space from Pexels