Fonksiyon geliştirirken yapılan hatalardan biri, fonksiyonu çokça argümanla donatmaktır. Fonksiyona çokça argüman eklemek, her ne kadar fonksiyonu çok işlevli gösterse de kodun kirlenmesine sebep olur; fazlaca argümana sahip bir fonksiyonu değiştirmeye çalıştığınız her seferde kodun işleyişini bozmanız çok olasıdır.

Gelin, şimdi aşağıdaki örnek üzerinden bol argümanlı bir fonksiyonu nasıl daha temiz hâle sokarız, görelim:

<?php

class Book // Kitap
{
   // title: Başlık
   // author: Yazar
   // pageNumber: Sayfa sayısı
   public function update(string $title, string $author, int $pageNumber): void
   {
      // ...
   }
}

Yukarıdaki fonksiyonun işi aslında çok basit: Kitap elemanının öğelerini güncelliyor. Bunu yapmak içinse başlık, yazar, ve sayfa sayısı bilgilerini istiyor.

Bu fonksiyonun nasıl problemlere yol açabileceğini tahmin edebiliyor musunuz? Diyelim ki aşağıdaki bilgilere sahip bir kitabımız var:

Kitap başlığı: Clean Code
Yazar adı: Robert Martin
Sayfa sayısı: 675

Karşılaşacağımız ilk problem, kitabın sadece başlığını güncellemek istediğimizde dahi, yazar ve sayfa sayısı bilgilerini de vermek zorunda olmamız. Diyelim ki kitap başlığını Türkçe “Temiz Kod” olacak şekilde güncellemek istedik:

$book->update("Temiz Kod", "Robert Martin", 675);

Gördüğünüz gibi, her ne kadar yazar adı ve sayfa sayısını değiştirmesek de, bu bilgileri de vermek zorunda kaldık.

İkincisi, bu fonksiyonu her çağırdığımızda hangi bilgiyi hangi sırayla vereceğimizi kontrol etmek için fonksiyonu tekrar tekrar okumak zorunda kalacağız. Yani argüman sırasını yanlış hatırlayıp, şöyle bir hataya düşmemiz mümkün:

$book->update("Robert Martin", "Temiz Kod", 675);

Şimdi de yaptığımız hata sayesinde kitabın başlığı “Robert Martin”, yazarı ise “Temiz Kod” oldu. 🙂

Temizlik zamanı

Yukarıda anlattığımız iki problemi de çözecek şekilde fonksiyonumuzu yeniden yapılandıracağız; bunun için de daha az argüman kullanacağız.

Daha az argüman kullanmak demek, fonksiyonun işlevselliğini kaybetmesi anlamına gelmiyor. Aksine, yukarıdaki fonksiyonu üç farklı fonksiyon şeklinde yazdığımızda hem olası kafa karışıklıklarından kurtulacağız, hem de gereksiz kod yazmamış olacağız.

<?php

class Book // Kitap
{
   public function updateTitle(string $title): void
   {
      // Kitabın başlığını güncelle.
   }

   public function updateAuthor(string $author): void
   {
      // Kitabın yazarını güncelle.
   }

   public function updatePageNumber(int $pageNumber): void
   {
      // Kitabın sayfa sayısını güncelle.
   }
}

Üç farklı argüman kullanmak yerine, fonksiyon sayısını artırarak tek argümanlı fonksiyonlara sahip olduk. Peki bize ne gibi yararları oldu?

Şimdi, kitap başlığını güncellemek istediğimizde kullanacağımız fonksiyon yalnızca şu olacak:

$book->updateTitle("Temiz Kod");

Böylece fonksiyonumuz gereksiz yere yazar adını ve sayfa sayısını güncellemek zorunda kalmayacak. Buna ek olarak, fonksiyon isimlerimizde neyi güncellediğimiz belirtildiği için, kitap başlığını güncellemek isterken yanlışlıkla yazar adını güncelleme ihtimalimiz da ortadan kalkacak.

Sonuç olarak, her ne kadar fonksiyon sayısını artırmış da olsak, daha okunabilir, temiz bir koda sahip olacağız.

Yorum Gönderin

Bir Cevap Yazın

%d blogcu bunu beğendi: