Yazılımda isimlendirmeye büyük önem vermemizin sebebi, isimlendirmenin doğru kullanıldığında bizi büyük zahmetten kurtarmasından kaynaklanıyor. Örneğin bir fonksiyonu doğru isimlendirdiğimiz zaman, o fonksiyonun ne yaptığını görmek için içindeki koda bakmamıza gerek kalmaz. Bu da bize hem zaman kazandırır, hem de mental kapasitemizi gereksizce harcamamızın önüne geçer.

Muğlak olmayan isimlerden önce, muğlaklık nedir onu konuşsak sanırım daha iyi olur.

Muğlak bir isimle karşılaştığımızda, bu ismin tam olarak neyi kastettiğini anlayamayız. Muğlak isim, birden fazla anlama geliyor olabilir. Ya da başka bir isimle büyük benzerlik gösterdiği için, o iki ismi birbirinden ayıramayabiliriz.

Örnek olarak “Şekerim var.” cümlesini düşünebiliriz. Sizce bu cümle ne anlam ifade ediyor? Cümlenin öznesi, bize şeker hastalığı olduğunu mu anlatmaya çalışıyor, yoksa evinde şeker bulundurduğunu mu? Bunu, cümlenin içinde bulunduğu yazıyı okumadan bilmemiz mümkün değil. Aynı şekilde kodlama yaparken de muğlak bir isimle karşılaştığımızda, ne anlama geldiğini öğrenmek için kodun içeriğini okumak zorunda kalıyoruz.

Muğlaklığı düşündüğümüzde, muğlak olmayan ismin belki de ayırıcı bir isim olması gerektiğini söyleyebiliriz.

Örnek

<?php

class Book // Kitap
{
   // markAsRead: Okunmuş say
   // page: Sayfa
   public function markAsRead(int $page): void
   {
      // ...
   }
}

Yukarıda çok basit bir örnek var. Book sınıfına ait tek fonksiyonumuz var. Bu markAsRead isimli fonksiyon, $page isminde bir argüman alıyor.

Peki sizce bu fonksiyon ne yapıyor? Ben size birkaç olasılık sayayım:

  1. Kitabı tamamen okunmuş sayabilir.
  2. Kitabın sayfa sayısını, verilen sayfa argümanıyla karşılaştırıp, eğer verilen sayfa sayısı yeterliyse okunmuş sayabilir.
  3. Kitabı, belirli bir sayfa sayısına kadar okunmuş sayabilir.
  4. Kitabın belirli bir sayfasını okunmuş sayabilir.

Daha fazla örnek dahi çıkarabilirim. Çünkü ne fonksiyonun ismi bize ayırıcı bir tanı sunuyor, ne de argümanın ismi bize yardımcı oluyor.

Temizlik zamanı

Fonksiyonumuz markAsRead‘in anlaşılır olmamasının temel sebebi, bir kitabın okunmuş sayılabilecek birden fazla elemanının olması. Kendisi, belli bir bölümü ya da sayfası gibi. Argümanımız $page‘in bize yardımcı olmamasının sebebi ise, bu sayfa sayısının ne olduğunu tam olarak bilemememizden kaynaklanıyor.

Peki diyelim ki böyle bir fonksiyonla karşılaştık, ne yaptığını anlamadık, biz de fonksiyonun içindeki kodu okumaya karar verdik. Diyelim ki, bu fonksiyon aslında kitabı, belirli bir sayfasına kadar okunmuş saymakla görevli. Nasıl bir fonksiyon imzasına sahip olmalıyız?

<?php

class Book // Kitap
{
   // markAsReadUntil: 'e kadar okunmuş say
   // currentPage: Şu anki sayfa
   public function markAsReadUntil(int $currentPage): void
   {
      // ...
   }
}

Fonksiyon ismini de, argüman ismini de biraz uzattık. Uzun isimler kullanmak da çok yararlı değil; fakat bu durumda bir gereklilik. Çünkü isimlerimizi uzatarak, fonksiyonun sadece imzasıyla ne yaptığını anlatabilmesini sağladık.

Üstelik, fonksiyon imzasını İngilizce olarak okuduğumuz zaman adeta bir cümle yaratmış olduğumuzu göreceğiz: Mark as read until current page. Fonksiyon ismi ile argüman isminin çevirisini de aynı şekilde yaptım: Şu anki sayfa ‘e kadar okunmuş say ya da düzeltilmiş hâliyle, şu anki sayfaya kadar okunmuş say.

Gördüğünüz gibi, artık fonksiyonumuzun ne yaptığı açık ve net ortada. Kim ki bu fonksiyonu kullanacak olsun, fonksiyonun içindeki kodu okumasına artık gerek kalmadı. 🙂

Yorum Gönderin

Bir Cevap Yazın

%d blogcu bunu beğendi: