İngilizce’de flag argument denen işaret argümanları, özetle, fonksiyonun birden fazla işe yaradığını gösterir. Bir fonksiyonun birden fazla iş yapması, Single Responsibility Principle adıyla bilinen, Tek Sorumluluk İlkesi‘ne aykırıdır. Bu ilkeye aykırı olmasının kötü yanı, kısaca, bu fonksiyonu değiştirmeye kalktığımızda birden fazla çıktıyı kontrol etmek zorunda kalacak olmamızdır.

Aşağıdaki örnekte görülen fonksiyon, bir işaret argümanı içeriyor:

<?php

class Book // Kitap
{
   // updateTitle: Başlığı güncelle
   // notifyAuthor: Yazarı bilgilendir
   public function updateTitle(string $title, bool $notifyAuthor): void
   {
      $this->title = $title;
      if ($notifyAuthor === true) {
         // Yazara e-posta gönder.
      }
   }
}

Burdaki işaret argümanı $notifyAuthor. Fonksiyonumuz, bizden yazarı bilgilendirip bilgilendirmemek için bir direktif bekliyor. Yani, aslında bu fonksiyonun yaptığı iki iş var:

  1. Kitabın başlığını güncellemek
  2. Yazarı bu konuda bilgilendirmek

Fonksiyonumuzun iki iş yapmasının neden kötü olduğunu, Tek Sorumluluk İlkesi‘ni anlattığım başka bir yazımda anlatacağım.

Fakat burda $notifyAuthor işaret argümanını kullanmamız, fonksiyonun içinde bir if koşul cümleciği kullanmamıza sebep oldu. if cümlecikleri oldukça yararlı olsalar da, kodu daha karmaşık hâle getirirler; çünkü kullanıldıkları anda ortaya iki farklı olasılık çıkar. Üstelik iki tane koşul kullandığımızda bu olasılık dörde, dört tane kullandığımızda ise bu olasılık sayısı 16’ya yükselir. Sonuç olarak, koşul cümlecikleri, kodu okumayı oldukça zorlaştırır.

Temizlik zamanı

Peki, işaret argümanı kullanılmış bir fonksiyonu nasıl temizleriz? İşaret argümanları belli bir eyleme işaret ettiği için, genelde temizlemesi de kolay olur. 🙂 Yapmamız gereken şey, bu eylemi fonksiyon içinden çıkartarak yeni bir fonksiyon içerisine hapsetmek:

public function updateTitle(string $title): void
{
   // Başlığı güncelle
}

public function notifyAuthor(): void
{
   // Yazarı bilgilendir
}

Böylece, kitabın başlığını ne zaman güncellemek istersek, yazarı bilgilendiren fonksiyonu da ek olarak çağırıp çağırmamak tamamen bizim elimizde olacak. Üstelik şimdi, fonksiyonlarımızın tam olarak ne yaptıkları, fonksiyon isimlerinde doğru bir şekilde belirtildiği için, herhangi bir kafa karışıklığına da sebep olmayacak.

Yorum Gönderin

Bir Cevap Yazın

%d blogcu bunu beğendi: