Akin Kaldiroglu Profile picture
Mar 10 13 tweets 3 min read
Clean Code'daki isimlendirme konusunda en temel problem "doğru isimlendirme"dir. Yani en iyi nasıl isim verilir tartışılır hep. Mantıksal olarak bunu önceleyen bir başka isimlendirme problemi var: Neyi isimlendirmeliyiz? İlk bakışta tuhaf gelen bu soruyu ve cevabını ele alayım:
Yazılımdaki anlama/anlaşılma zorluğu en temelde isimlendirilmesi gerekirken isimlendirilmemiş yapılar ile yanlış isimlendirilmiş yapılardan kaynaklanır. Yani problem yanlış isimlendirme kadar "isimlendirmeme"dir. Peki nedir isimlendirmeme?
İsim, bir soyutlamadır, koddaki her isim bir kod parçasını işaret eder.5 gibi bir değeri gösteren bir değişkenin ismi için bile bu doğrudur. Ayrıca isimlerin gösterdiği kod parçasıyla ilgili bir anlamı vardır. Anlam daha çok bağlamsaldır, yerine getirdiği işlev ile de ilgilidir.
İsimlendirilmeyen kod parçalarını göstermekte zorluk çekeriz, isimleri olmadığından anlamları da ya olmaz, ya da eksik veya muğlaktır. Yani ismi olmayan kod parçası üzerine konuşamayız, bilgi elde edemeyiz, test edemeyiz, aktaramayız, dokümante edemeyiz, vs.
Wittgenstein, "dilimin sınırları, dünyamın sınırlarıdır" derken dilin bu belirleyiciliğini kastediyordu. Mesela aşağıdaki kodu düşünün. Bu kodda neler üzerine konuşabiliriz? Sadece ismi olanlar üzerine. Peki şu ortadaki uzun, tek satırlık statement üzerine konuşabilir miyiz?
Konuşamayız. Muhtemelen "62-66. satırlar arası gibi" ya da "processCard metodundaki cardInfo’ya idNo atama” gibi dolaylı, belirsiz betimlemelerle konuşmak zorunda kalırız. Bu ise işlevsel bir konuşma değildir, fiziken ve zihnen yorar, hatalara sebebiyet verir. Peki sebebi nedir?
"62-66. satırlar arası"nın bir ismi yoktur. Zihinimiz, isimsiz düşünemez! İsmi olmayan şey yoktur da. Bir şeyin var olma ihtimali ancak isme sahip olmasıyla başlar. Bu kod için de doğrudur. Peki bu kodu nasıl bir isme sahip kılarız?Onu bir fonksiyon/metot yaparak, aşağıdaki gibi:
Şimdi şöyle cümleler kurabiliriz: "assignIdNoTocard'ı test ettin mi?" ya da "assignIdNoTocard ne yapıyor?" ya da "assignIdNoTocard'da bug var". Zihnimiz ismin sağladığı soyutlama ile, assignIdNoTocard'ı metodunu kavramaya başlar ve üzerine konuşma ve düşünme imkanına sahip olur.
Benzer şey, yani isme sahip olmadığı için konuşulamayan kod parçaları, aşağıdaki kodda da vardır. Soldaki Employee sınıfının ve tek tek parçalarının ismi vardır ama parçaların birlikteliklerinin ismi yoktur ve bunu da ancak sağdaki gibi isimlendirme ile çözebiliriz.
Dolayısıyla, "nasıl isimlendirme?" sorusu ancak neyi isimlendireceğimize karar verdikten sonra sorulabilir. İsimlendirilmesi gereken kod bir isme sahip değil ise, "nasıl isimlendirme" sorusu da sorulmaz. Ve koddaki muğlaklık hem isimsizlikten hem de yanlış isimlendirmeden doğar.
Kodda üzerine konuşmak durumunda olduğumuz her şeyin, değer, sabite, kod parçası, sıradışı durum, hata, vs.ismi olmak zorundadır. İsimlendirmeyi bir alışkanlığa çevirmek, kodumuzu isme sahip ufak-tefek parçalardan oluşur hale getirir, muğlaklığı azaltır, anlaşılmayı mümkün kılar.
İsimlendirmeye, "neyi isimlendirmeliyim?" ile başlamak, "nasıl isimlendirmeliyim?" sorusunu da kolaylar, daha doğru isimler vermemizi sağlar. Çünkü, yanlış isimler çoğunlukla, isimlendirilmemiş bir sürü kodu bir araya getirip anlamlı bir isim vermeye çalışmaktan kaynaklanır.
Bu zincirdeki kod parçaları tam olarak görülemiyorsa bir de şunu deneyeyim:

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Akin Kaldiroglu

Akin Kaldiroglu Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(