İsimleri anlamayı kolaylaştırmanın bir yolu var: Hâli hazırda kullanımda olan veya bir standarda sahip isimleri kullanmak. Bu tarz isimlerin de kendi ismi var. 🙂 Biz bunlara terim diyoruz. Terimler, bir şekilde ya fazlaca kullanıldıklarından, ya da diğer isimler yerine kullanılmaları mantıklı olduğundan dile otururlar.

Standart terimleri kullanmak, kodumuzun başkaları tarafından daha rahat okunmasını sağlar. Kendi yarattığımız terimleri kullanmak yerine, var olanı kullandığımız zaman, başka yazılımcıların da içinde bulunduğu bir gruba dahil oluruz.

Kendi yarattığımız terimleri kullandığımızda, kodu gelecekte kolayca anlama ihtimali olan sadece kendimiz oluruz; ki bazı durumlarda bu terimleri unutacağımız için, belki biz bile kendi kodumuzu rahat okuyamayabiliriz. Öte yandan, herkesin kullandığı terimleri kullandığımızda, biz unutsak bile, yanımızda o terimleri unutmayacak koca bir topluluk buluruz.

Bu topluluk, zaman zaman küçük bir takım bile olabilir. Belli bir süre beraber çalışan yazılım takımları, kendi terim dağarcıklarını yaratabilir. Her ne kadar yazılım topluluğunun standartları olmasa da, kendi takımının standartlarına uymak da bireysel hareket etmekten daha yararlıdır.

Örnek

Aşağıdaki örnek, aslında doğru isimlendirmelere sahip bir kod parçasını içeriyor. İsimlendirmeler açık ve basitçe anlaşılabilir şekilde yapılmış. Fakat yine de, standart terimleri kullanarak kodu daha da kolay anlaşılır kılmak mümkün!

<?php

class Library // Kütüphane
{
   private $books = []; // Kitaplar
   
   // getFirstBook: İlk kitabı al
   public function getFirstBook(): Book
   {
      if ($this->count() === 0) {
         throw new BookNotFoundException('Kütüphanede kitap yok.');
      }

      // array_shift, bir dizideki ilk elemanı döndürür.
      return array_shift($this->books);
   }

   // getNumberOfBooks: Kitapların sayısını al
   public function getNumberOfBooks(): int
   {
      return sizeof($this->books);
   }
}

Kısaca anlatmak gerekirse, Library adında bir sınıfımız, bu sınıfın içerisinde $books adında, kitapları sakladığımız bir dizimiz (array), getFirstBook adında, bize kütüphanedeki ilk kitabı döndüren bir fonksiyonumuz, ve son olarak getNumberOfBooks adında, bize kütüphanedeki kitap sayısını veren bir fonksiyonumuz var.

Temizlik zamanı

Terimlere verilebilecek en iyi örnekleri, PHP’nin standart kütüphanesinde bulmak mümkün: SPL.

SPL’yi kullanarak örnek kodumuzda iki iyileştirme yapacağız. Bu iyileştirmeyi yapmaktaki ilk amacımız standart terimleri kullanmak; çünkü kodumuzu daha anlaşılır kılmak istiyoruz. Fakat bunun olumlu bir yan etkisi olacak ve SPL sayesinde, kodumuz aynı zamanda basitleşecek.

İlk olarak, getNumberOfBooks fonksiyonumuzu değiştireceğiz. SPL’de tanımlı Countable arayüzünü kullanacağız. Böylece, PHP dilinde kodlama yaparken, sayılabilir bir elemana sahip sınıfların uyguladığı standart arayüzü kullanmış olacağız. Bu arayüz hakkında daha fazla bilgiyi burada bulabilirsiniz.

<?php

class Library implements Countable // Sayılabilir Kütüphane
{
   private $books = []; // Kitaplar
   
   // getFirstBook: İlk kitabı al
   public function getFirstBook(): Book
   {
      if ($this->count() === 0) {
         throw new BookNotFoundException('Kütüphanede kitap yok.');
      }

      // array_shift, bir dizideki ilk elemanı döndürür.
      return array_shift($this->books);
   }

   // count: Say
   public function count(): int
   {
      return sizeof($this->books);
   }
}

Yaptığımız tek şey, sınıfımıza Countable arayüzünü uygulattırmak ve getNumberOfBooks fonksiyonunun adını count olarak güncellemek oldu. Böylece, PHP diline hakim birisinin, Library sınıfını gördüğü zaman sayılabilir olup olmadığını anlamak için $library->count() fonksiyonunu denemesi yeterli olacak.

Daha güzeli ise ne biliyor musunuz? PHP’nin çekirdeğinde yer alan bir arayüz kullandığımız için, PHP’nin çekirdeğinde yer alan count() fonksiyonunu da artık kullanabileceğiz. Yani count($library) şeklinde de sonuç almamız mümkün. Çünkü artık Library sınıfımız, sayılabilir bir sınıf.

İkinci değişimimizi, BookNotFoundException istisnası (exception) üzerinde yapacağız. Bu istisna sınıfını biz yaratmak zorunda kaldık. Eğer kütüphanede kitap yoksa, getFirstBook fonksiyonumuz bir kitap döndürmek yerine bu istisnayı tetikliyor. Halbuki SPL bize UnderflowException adında hazır bir istisna sınıfı sunuyor. Bu istisna, örneğin boş bir diziden eleman almaya çalışırken tetiklenmesi için yaratılmış. Bu istisna sınıfı hakkında daha fazla bilgiyi burada bulabilirsiniz.

<?php

class Library implements Countable // Sayılabilir Kütüphane
{
   private $books = []; // Kitaplar
   
   // getFirstBook: İlk kitabı al
   public function getFirstBook(): Book
   {
      if ($this->count() === 0) {
         throw new UnderflowException('Kütüphanede kitap yok.');
      }

      // array_shift, bir dizideki ilk elemanı döndürür.
      return array_shift($this->books);
   }

   // count: Say
   public function count(): int
   {
      return sizeof($this->books);
   }
}

Böylece, kütüphanede kitap yokken bir kitap almaya çalıştığımızda, PHP’nin standart istisna sınıflarından biri tetiklenmiş olacak. Bu da kodumuzun sadece kendimiz tarafından değil, PHP topluluğu tarafından rahatça anlaşılabilmesini sağladığımız anlamına geliyor.

Yorum Gönderin

Bir Cevap Yazın

%d blogcu bunu beğendi: