Programlamada İsimlendirme

İsimlendirme, programlamanın önemli ama küçümsenmiş bir bölümüdür. Kod bir kez yazılır, projeye dahil olan kişiler tarafından birden fazla kez okunur. İsimlendirmeleri tutarsız ve anlamsız yapmak kodun okunmasını zorlaştırır. Okunabilirlik, kodun ne yaptığını daha kısa sürede anlamımızı sağlar. Kodu anlamak, yeniden yazmaktır. Yazılımcılar olarak zamanımızın büyük bir çoğunluğunu yazılan kodları anlayarak geçiriyoruz.

İyi isimler seçmenin en zor yanı, iyi tanımlayıcı beceriler ve ortak bir kültürel altyapı gerektirmesidir. Bir değişken ya da işlev için doğru ismi seçmek, deneyim ve saatlerce kod okuma gerektirir. Bunun için pratik yapmalısınız. Github’ta bulunan Open Source projeleri incelemekle başlayabilirsiniz. İsimlendirme için tek bir yol ve standart yoktur. Her programlama dili kendi kuralını önerebilir. Her proje veya takım kendi kurallarını tanımlayabilir.

İsimler, kodunuzu okuyan kişilere kodunuzun ne yaptığını anlatmakta olduğunuz en etkili araçtır. İsimlendirme yaparken yaygın olarak kullanılan isimlendirme tipleri vardır.

Camel Case: Her kelimenin ilk harfi büyük yazılır ve kelimeler arasında boşluk veya simge yoktur. Örnekler: ProjectFiles, UserNotes gibi. Programlamada yaygın olan bir varyasyon, küçük harfle başlamaktır. Örnek userNotes gibi.

Pascal Case: Pascal programlama dili tarafından popüler hale getirilmiştir. Kelimenin büyük harfle başladığı Camel Case’in bir alt kümesidir. UserNotes, bir Pascal Case’dir ama userNotes bir Pascal Case değildir.

Snake Case: İfadelerdeki veya bileşik kelimelerdeki kelimeler bir alt çizgiyle ayrılır. Örnekler: first_name, last_name, user_notes.

Kebab Case: Snake Case gibi ama kelimeler tire ile ayrılır. Örnekler: first-name, last-name, user-notes.

Screaming Case: Bütün kelimeler büyük yazılır. Örnekler: DEFAULTDATE, DEFAULT_DATE gibi.

Değişken ve fonksiyonlar için Camel Case, sınıflar için Pascal Case ve sabitler için Screaming Case kullanın. Bunlar dilden dile değişebilir.

Açıklayıcı İsimler Tercih Edin

İsimlendirme yaparken açıklayıcı isimler kullanınız. İsim, belirsizlik olmadan işlevin ne yaptığını belirtmelidir. Sadece kendinizin anlayacağı isimler kullanmaktan kaçınınız. Programlamayı tmp, i, j, x gibi genel isimlendirme ile öğreniriz ve bu alışkanlık haline gelir. Kodumuzu okuyan birisi bu yaptığımız isimlendirmeyi anlayabilmesi için kodu adım adım incelemesi gerekir. Bu okunabilirliği düşürür.

let d;
let t;

Yukarıdaki örneğe baktığımızda d ve t değişkenini sadece biz bilebiliriz. Belirli bir zaman sonra kendi kodunuza baktığınız zaman siz bile bu değişkenlerin ne yaptığını unutursunuz.

if (number > number2) {
    let tmp = number;
    number = number2;
    number2 = tmp;
}

Bazı durumlarda tmp isimlendirmesini kullanmak iyidir. Tmp isimlendirmesini sadece kısa ömürlü ve geçici olduğu durumlarda kullanılmalıdır.

Döngülerde değişkenleri isimlendirirken i, j, k gibi genel isimler kullanırız.

for (let i=0; i<days.length; i++) 
    for (let j=0; j<users.length; j++) 

Burada i ve j yerine sınıfın ilk harflerini kullanabiliriz. Günler için d, kullanıcılar için u gibi.

Yaptığınız isimlendirmelerin telaffuz edilebilir olduğundan emin olunuz.

Date genymdhms;
Date generationTimeStamp

Date modymdhms;
Date modificationTimestamp

Int pszqint;
Int publicAccessCount;

Sevimli olmayın ve rahatsız edici kelimeler kullanmayın. Yaptığınız isimlendirmelerin başkaları tarafından okunacağını unutmayın. İsimlendirmeleriniz genel ve olabildiğince profesyonel olmalı ve herhangi bir kültürel argo içermemelidir.

function killThemAll();
function kill();
function whack();
function eatMyShorts();
function giveSomeLove();
function myLove();

Gereksiz Kodlamalardan Kaçının

Değişkeni isimlendirirken gereksiz veri tipiyle birlikte isimlendirmekten kaçının. Bunlar herkes tarafından bilindiği için gerekli olmayabilir.

int ageInt;
String addressText;
float balanceFloat;

Anlamlı Ayrımlar Yapın

İsimlendirme yaparken çok özel kelimeler seçin ve boş kelimeler seçmekten kaçınınız.

getUserDetails() {...}
getUserInfo() {...}
getUserData() {...}

Yukarıdaki fonksiyonların birbirinden farkı ne?

class ProductInfo  
class ProductData

Ya da buradaki sınıfların birbirinden farkı ne?

getActiveAccount()
getActiveAccounts()
getActiveAccountInfo()

Buradaki gibi hangi fonksiyonu ne zaman çağıracağımızı nasıl anlayacağız?

Tam Sayıları İsimlendirme

Bazı değerler doğası gereği tam sayıdır. Yıl, gün, yaş gibi değerleri herkes tam sayı olduğunu bilir. Değişken adına tipini eklemenize gerek yok. Bir şeyin sayısını veya kaç tane olduğunu hesaplarken tam sayıları kullanırız. Bu tür değişkenleri isimlendirirken numberOf<isim> veya <isim>Count kullanabilirsiniz. Bu değişkene baktığımız zaman ne olduğunu hemen anlayabiliriz.

let users;
let numberOfUsers;
let userCount;

users değişkeninde kullanıcı sayısını tuttuğumuzu varsayarsak diğer iki değişkene göre anlamamız daha zor olacaktır.

İsimlendirmeye değişkeninin birimini ekleyebiliriz.

let alertShowDelay;
let alertShowDelayInMillis;
let alertShowDelayInMillisecs;

Kayan Noktalı Sayıları İsimlendirme

Çoğu yuvarlatılmamış ölçümler (ağırlık, genişlik, fiyat) kayan noktalı sayıdır. Bu tür değişkenleri isimlendirirken <isim>Amount kullanabilirsiniz.

let moneyAmount;

İsimlendirmeye değişkeninin birimini ekleyebiliriz.

let heightInCentimeters;
let successPercent;
let successRatio;

Mantıksal (Boolean) Değişkenleri İsimlendirme

Bir işlemin durumunu belirtmek için kullanırız. Mantıksal değişkenler true veya false değerini alırlar. Bu tür değişkenleri isimlendirirken isSomething, hasSomething, doesSomething, didSomething, shouldDoSomething, willDoSomething gibi kalıpları kullanabiliriz. Mantıksal değişkenleri pozitif olarak isimlendirmek her zaman daha iyidir.

let isDisabled;
let isEnabled;
let hasErrors;
let didUpdate;

Metinsel (String) Değişkenleri İsimlendirme

İsim, şehir, ülke, başlık gibi metinsel ifadelerdir. Bu tür değişkenleri direk isimlendirebiliriz. Eğer isimlendireceğimiz değişken bir sayısal ifade ise onu <isim>AsString, <isim>String şeklinde isimlendirebiliriz.

let year = parseInt(yearAsString);

Dizileri İsimlendirme

Bu tür değişkenleri isimlendirirken çoğul halini kullanın. users, cards, accounts gibi. Bazı durumlarda değişkene hangi işlemin olduğunu belirtebilirsiniz. queueOfEmails gibi.

Fonksiyonları İsimlendirme

Fonksiyonları fiil olarak isimlendiriniz. Fiil kısmı fonksiyonun ne yaptığını belirler.

function fetchPosts() {...}
function deletePost() {...}
function handleClick() {...}
function setUser() {...}
Kaynaklar: Kaynak 1, Kaynak 2, Kaynak 3, Kaynak 4