Clean Code Nedir? Nasıl Yazılır?

Appcent Akademi
Appcent
Published in
5 min readMay 13, 2022

Clean code nedir? Nasıl yazılır? Kod nasıl temiz hale getirilir? Bir kod nasıl daha kolay ve anlaşılır olur? Clean code kullanma kuralları nelerdir? Hepsi yazımızda…

Clean Code (Temiz Kod) Nedir?

Eğer bir kod, hatasız, düzenlenebilir ve kolay anlaşılabilir, istenildiğinde daraltılabilir ya da genişletilebilir ise buna clean code (temiz kod) denilmektedir. Bu kavram ilk olarak Robert Cecil Martin tarafından “Clean Code” kitabında kullanılmıştır. Clean code;

  • Karmaşık olmamalı, basit düşünülüp basit uygulanmalıdır.
  • Kodun sonradan düzenlenmesinin kolay olması için ilk etapta kolay düzenlenebilir şekilde yazılmalıdır.
  • Tüm süreç mantıklı ve net bir şekilde yapılandırılmıştır.
  • Kodun farklı bölümleri arasındaki bağlantı oldukça açıktır.
  • Her sınıfın, işlevin, yöntemin ve değişkenin görevi veya rolü hemen anlaşılabilir.
  • Uyarlanabilir ve genişletilebilirdir. Bu aynı zamanda koddaki hataları düzeltmeyi de kolaylaştırır.
  • Kod içinde hiçbir amaca hizmet etmeyen gereksiz satırlar yer almamalıdır.
  • Mümkün olduğunca verimli, okunabilir ve bakımı yapılabilir kodlama stili ile yazılmalıdır.

Clean Code Oluşturmak İçin Hangi Kavramlara Dikkat Edilmelidir?

Kodunuzun clean code (temiz kod) olarak anılması için yazdıklarınızın kolay ve anlaşılır olması beklenir. Kodun anlaşılıp anlaşılamayacağı hakkında fikir edinmek için şu koşulları sağlayıp sağlamadığına bakabilirsiniz:

Readability (Okunabilirlik): Kod okunduğunda anlaşılıyor mu? Yeterince açık ve basit bir dili var mı?

Changeability (Değiştirilebilirlik): Kodun daha sonra siz ya da başkaları tarafından düzenlenmesi mümkün mü?

Extensibility (Genişletilebilirlik): Koda eklemeler yapmak mümkün mü?

Maintainability (Sürdürülebilirlik): Kodun değiştirilmesi veya genişletilmesi kolay mı?

Clean Code (Temiz Kod) Nasıl Yazılır?

a) Genel kurallar

  • Kodu mümkün olduğunca basit tutun ve kompleks ifadelerden kaçının.
  • Standart yaklaşımları uygulamaya özen gösterin.
  • Başka kod üzerinde çalışıyorsanız kodu sade ve basit hale getirin.
  • Problemin ana kaynağını bulmaya odaklanın.

b) Tasarım prensipleri

  • Kod tekrarlarından kaçının.
  • İmplementasyon ayrıntılarını gizleyin, soyutlayın.
  • Kodu genişletilebilir tutun.
  • Kodu modüllere ayırın ve her modülün farklı bir görevi olsun.
  • Gereksiz fonksiyonlardan ve ön optimizasyondan kaçının.
  • Tutarlılığa önem verin ve kodda sürprizlerden kaçının.
  • Kodu bulduğunuzdan daha iyi bırakın. Buna İzci Kuralı adı verilmektedir.

c) Anlaşılabilirlik için ipuçları

  • Açıklayıcı değişken isimleri tercih edin.
  • Yöntemler konusunda da tutarlı bir çizgide ilerleyin.
  • Object Türleri, Primitif (İlkel) Türlere tercih edin çünkü nesneler yerine ilkellerin kullanılması kodu daha az esnek yapar. İlkel veri türlerini kontrol etmek çok daha zordur.
  • Mantıksal bağımlılıktan kaçının. Aynı sınıfta içinde başka bir şeye bağlı olarak çalışan metotlar yazmayın.

d) Adlandırma için ipuçları

  • Adlandırma için anlamlı ayrımlar oluşturun. Açıklayıcı ve net isimler seçmeye özen gösterin ya da genel olarak adlandırma başlığı yazıp fonksiyon, değişken, vb. adlandırmayı da alt başlık olarak ekleyebilirsiniz.
  • Aradığınızı kolay bir şekilde bulmanızı sağlayacak kelimeler seçin.
  • Telaffuzu kolay ve akılda kalıcı kelimeler seçin.
  • Sihirli sayıları (olduğu gibi kullanılan ham sayıları) adlandırılmış sabitlerle değiştirin. Örneğin, sayfa başına 12 satır yazdırıyorsanız, 12 sayısı olduğu gibi kullanılmamalı, page_number gibi bir sabitin arkasına gizlenmelidir.
  • Adlandırmaya dair daha fazla bilgi için “Değişken Nedir? Değişken Tanımlama Kuralları Nelerdir?” isimli Medium yazımızı okuyabilirsiniz.

e) Fonksiyon ipuçları

  • Tek bir görevi olan, ismi açıklayıcı olan ve daha az argüman alan fonksiyonlar tercih edin.
  • Yüzlerce satıra sahip fonksiyonlara dağınık fonksiyonlar denir. Bu nedenle satır uzunluğuna dikkat edin.
  • Fonksiyonunuz side effect (yan etki) içermemelidir.
  • Flag (true/false) argümanlarından kaçının. Flag (bayrak) değişkeninin anlamını hatırlamak zorunda kalmayacağınız şekilde farklı yöntemler tanımlayıp arama yaptığınızda neyi bulmak istediğinizi daha net bir şekilde ifade edebilirsiniz.

f) Yorum satırı

  • Kendinizi her zaman kodlarla açıklaman önceliğiniz olsun.
  • Gereksiz yorumlardan da kodlardan da kaçının.
  • Kodu yorum satırı halinde tutmayın.
  • Kapanış için yorum satırı eklemeyin.
  • Yorumu kodun açıklaması veya sonuçların uyarısı olarak kullanın.

“Don’t Use a Comment When You Can Use a Function or a Variable”

― Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship

g) Source Kod

  • Değişkenleri kullanımlarına uygun olarak tanımlayın.
  • Kavramları dikey olarak ayırın. Birbiriyle bağlı olan kodlar dikey olarak yoğun görünmelidir.
  • Bağlı ve benzer fonksiyonlar birbirine yakın olmalıdır.
  • Kod satırlarını kısa tutun ve yatay hizalama yapmayın.
  • Kodun oluşturduğu girintilere müdahale etmeyin.

h) Nesne ve veri yapıları için ipuçları

  • Hibrit yapılardan kaçının.
  • Kodun iç yapısını gizleyin.
  • Az sayıda örnek değişkeni ile çalışmaya özen gösterin.
  • Statik metotları statik olmayanlara tercih edin.

j) Testler

  • Testler okunabilir ve hızlı olmalıdır.
  • Bağımsız ve tekrar edilebilir olmalıdır.

Bu prensiplere özenilmeyip temiz bir kod ortaya konamaz ise kodun kötü kokması denilen code smells durumu ortaya çıkar.

Code Smells () Nedir?

Karşı tarafın iyi analiz edilememesi, kısa sürede baştan savma bir şekilde yazılan kodlar, yanlış geliştirme yöntemleri kullanmak ve tecrübe eksikliği gibi sebeplerden temiz kod yazılamayabilir. Tipik code smells örnekleri şunlardır:

  • yinelenen kod
  • ölü kod
  • uzun yöntemler
  • uzun parametre listesi
  • yorumlar
  • gereksiz ilkel değişkenler
  • veri kümeleri

Code smells’in temel sebepleri şu şekilde sıralanabilir:

Fragility (Kırılganlık): Tek bir değişiklik kodun pek çok yerinde hata oluşturuyordur.

Rigidity (Sertlik): Yazılım değişikliğe açık değildir. En ufak bir değişiklik geri kalan birçok kısımda da değişiklik yapmanıza yol açıyordur.

Immobility (Hareketsizlik): Kodun bölümlerini başka projelerde yeniden kullanmak mümkün değildir. Çok yüksek çaba ve risk içerir.

Opacity (Saydamlık): Kodu anlamak oldukça zordur.

Needless Complexity: Gereksiz karmaşıklık vardır.

Needless Repetition: Gereksiz tekrarlar vardır.

Clean Code (Temiz Kod) Kullanımının Faydaları

  1. Bakımı Daha Kolay

Hızlı ve kötü kokan bir kod yazmak, yazarken zamandan tasarruf etmenizi sağlayabilir ancak daha sonra oluşan hataları düzeltmek size çok daha fazla zaman kaybettirebilir. Dağınık kod düzenlenmesi gereken kısımları tespit etmeyi de zorlaştırır.

2. Hataları Tespit Etmek Çok Daha Kolay

Kodu geliştirirken ve birden fazla ek özellik getirirken hataların tespit edilmesi çok daha zor ve kritiktir. Kötü kod ile çalışırken bir değişiklik eklemek mayın tarlası gibidir. Geliştirici kodun yeni bölümünün neden başka bir bölümünde bozulmaya yol açtığını ararken adeta bir dedektife dönüşebilir. Ancak temiz ve iyi tanımlanmış kod ile bu sorun ortadan kalkar.

3. Anlaşılması Daha Kolay

Sadece bir kişinin anlayabileceği kod ne işe yarar? Çoğu zaman, birden fazla geliştirici bir proje üzerinde çalışmaya başlar ya da yeni bir geliştirici ekibi projeyi devralır. Birkaç sene sonra projenizi okuduğunuzda eğer kötü bir kod yazdıysanız kendi kodunuzu anlamakta siz bile zorlanabilirsiniz.

4. Arama Motorlarının Anlaması Daha Kolay

Özellikle web geliştiriciler için arama motorlarının kodunuzu anlaması son derece önemlidir. Web sitenizde ne kadar uzun ve dağınık kod varsa, arama motoru örümceklerinin aradıkları içeriği bulmak için o kadar fazla inceleme yapması gerekecektir. Bu da sitenizin uygun şekilde dizine eklenmesini engelleyebilir.

5. Müşteriyi Etkilemesi Daha Kolay

Müşteri kötü kodlamanızı görmeyebilir, ancak kötü kodlamanın yarattığı teknik sorunlar, hatalar, çok uzun süren değişiklikler gibi sorunları görecektir.

Clean code gibi daha pek çok yazılım terimine açıklık getirdiğimiz Appcent Akademi Medium ve Instagram hesaplarımızı takipte kalın!

LinkedIn | Instagram | Kommunity | Twitter

--

--

Appcent Akademi
Appcent
Writer for

Teknoloji ve dijitalleşen dünya ile ilgili bilgi ve deneyimlerimizi paylaşıyoruz