• Cts. Nis 27th, 2024

Arif GÖKÇE

Senior Software Engineer

Clean Code ve Yazılım Geliştirme Süreci 

Clean code ve Yazılım Geliştirme Süreci” kavramına bugün göz atacağız, çünkü günümüzde kod yazmanın önemi giderek artmaktadır. Yazılım geliştirme sürecinde, kodlarınızı sade, anlaşılır ve bakımı kolay bir şekilde yazmak, hem güzelleştirmek hem de akıllıca düzenlemek isteyen geliştiricilerin hedefidir. Temiz kod, yazılım projelerinin sürdürülebilirliğini ve kalitesini artırmak için önemli bir rol oynamaktadır. Eğer Solid prensiplerine uygun bir kod yazıyorsanız, clean code prensiplerine de uyduğunuz zaman gerçek anlamda mükemmel bir iş çıkarmış olacaksınız. Siz de kodlamaya gülümseyerek bakmak istiyorsanız, doğru yerdesiniz! Şimdi “clean code ve Yazılım Geliştirme Süreci” konusunu daha yakından inceleyelim!😊

Clean code ile Net ve Anlaşılır Kod: “Kodlama Sanatı”

İyi bir kod, okunabilir, anlaşılır ve sade olmalıdır. Kodunuzda gereksiz karmaşıklığı önleyerek, kodunuzu net ve anlaşılır hale getirebilirsiniz. Şöyle düşünün, kodunuz bir tablo gibi olsaydı, onu düzenli bir şekilde katlamak yerine, onu zarif bir şekilde sergilemek isterdiniz, değil mi? 💡

Kötü bir örnek olarak, aşağıdaki karmaşık kod parçasına bir göz atalım:

if (x > 0 && y < 100 || z == true)

{

// Karmaşık işlemler

// ...

}

Bu kod, birden fazla mantıksal operatör içeriyor ve okunması oldukça zor. Oysa aynı kodu aşağıdaki gibi daha net ve anlaşılır hale getirebiliriz:

bool isXPositive = x > 0;

bool isYLessThan100 = y < 100;

bool isZTrue = z == true;

if (isXPositive && isYLessThan100 || isZTrue)

{

// Daha anlaşılır işlemler

// ...

}

Bakın, kodumuz daha düzenli ve okunabilir hale geldi! Şimdi kodlarımızı daha şık ve zarif hale getirme zamanı geldi! 💅

Fonksiyonlar: “Kodun Temel Yapı Taşları”

Fonksiyonlar, kodunuzun temel yapı taşlarıdır ve kodunuzun okunabilirliğini, yeniden kullanılabilirliğini ve sürdürülebilirliğini etkiler. Bir fonksiyon, sadece tek bir işi yapmalı ve bu işi iyi yapmalıdır. İşte size basit bir örnek:

}

// Kötü bir örnek: Fonksiyon karmaşıklığı

public void ProcessOrder(Order order)

{

// Karmaşık işlemler

// ...

}

// İyi bir örnek: Fonksiyon berraklığı

public void ValidateOrder(Order order)

{

// Siparişin geçerliliğini doğrula

// ...

Yukarıdaki örnekte, kötü bir fonksiyon örneğinde fonksiyonun içinde karmaşık işlemler bulunmaktadır, bu da fonksiyonun karmaşıklığını artırır ve bakımını zorlaştırır. Oysa iyi bir fonksiyon örneğinde fonksiyonun adı açık ve anlamlıdır, fonksiyonun görevi berrak ve sadece siparişin geçerliliğini doğrulamakla sınırlıdır. Fonksiyon ayrıca bir sonuç döndürerek fonksiyonun sonucunu kullanıcıya geri döndürmektedir. Bu, fonksiyonun kullanımını daha esnek hale getirir ve hataların tespitini kolaylaştırır. Fonksiyon berraklığı, kodunuzun daha anlaşılır ve bakımı daha kolay olmasını sağlar.

Temiz fonksiyonlar yazmak, kodunuzun okunabilirliğini artırır, yeniden kullanılabilirliğini ve sürdürülebilirliğini güçlendirir. Fonksiyonlarınızın tek bir işi yapmasına dikkat etmek, kodunuzun karmaşıklığını azaltır ve hataların tespitini kolaylaştırır. Unutmayın, fonksiyonlar kodunuzun temel yapı taşlarıdır ve iyi bir temel, güçlü bir kod tabanı için önemlidir.

Değişken ve Fonksiyon İsimleri: “Bilge Kodlama”

Değişken ve fonksiyon isimleri, kodunuzun anlaşılırlığını önemli ölçüde etkiler. Unutmayın, kodunuzun okunabilir olması, gelecekteki siz gibi başkalarının da kodunuzu anlaması için önemlidir. Bu nedenle, değişken ve fonksiyon isimleri konusunda bilgece seçimler yapmalısınız. İşte size bir örnek:

// Kötü bir örnek: Anlamsız değişken isimleri

int a = 5;

int b = 10;

int c = a + b;

// İyi bir örnek: Anlamlı değişken isimleri

int sayi1 = 5;

int sayi2 = 10;

int toplam = sayi1 + sayi2;

Gördüğünüz gibi, anlamlı değişken isimleri kullanmak, kodunuzun anlaşılırlığını artırır ve gelecekte kodunuzu okuyacak olanlar için işleri kolaylaştırır. Ayrıca, kodunuzu okurken daha az kafa karışıklığı yaşarsınız ve gülümseyen bir kod deneyimi yaşarsınız! 

// Toplama işlemi için iki sayıyı toplayan fonksiyon

int Topla(int sayi1, int sayi2)

{

int toplam = sayi1 + sayi2; // Sayıları toplayarak toplam değişkenine atama yapılır

return toplam; // Toplam değeri döndürülür

}

int sayiA = 5; // Birinci sayı

int sayiB = 10; // İkinci sayı

int sonuc = Topla(sayiA, sayiB); // Topla fonksiyonu çağrılarak sonuç değişkenine atama yapılır

Console.WriteLine("Sonuç: " + sonuc); // Sonucun ekrana yazdırılması

Gördüğünüz gibi, gereksiz yorumlar, kodunuzun okunabilirliğini azaltabilir. Ancak, anlamlı yorumlar, kodunuzun anlaşılırlığını artırabilir ve kodunuzun rehberi gibi kullanılabilir. Böylece, kodunuzda anlamlı ve eğlenceli yorumlar ekleyerek, gülümseten bir kod deneyimi yaşayabilirsiniz! 

Hata İşleme: “Hata Değil, Macera!”

Hata işleme, yazılım geliştirmenin ayrılmaz bir parçasıdır. Ancak, hatalarla baş etmek için kodunuzu karmaşıklaştırmak yerine, basit ve etkili hata işleme stratejileri kullanabilirsiniz. Unutmayın, hataların olabileceğini kabul ederek, kodunuzda macera dolu bir yolculuğa çıkabilirsiniz!

// Kötü bir örnek: Karmaşık hata işleme

try

{

// Karmaşık işlemler

}

catch (Exception ex)

{

// Hatanın ayrıntılarını gizleme

Console.WriteLine("Bir hata oluştu.");

Log(ex);

throw;

}

// İyi bir örnek: Basit ve etkili hata işleme

if (sayi2 == 0)

{

Console.WriteLine("Bir hata oluştu: sıfıra bölme hatası!");

}

else

{

int sonuc = sayi1 / sayi2;

Console.WriteLine("Sonuç: " + sonuc);

}

Gördüğünüz gibi, karmaşık hata işleme mantıklı değildir ve kodunuzda gereksiz karmaşıklığa yol açabilir. Bunun yerine, basit ve etkili hata işleme stratejileri kullanarak kodunuzda macera dolu bir deneyim yaşayabilirsiniz!

Clean code ve Refaktör: “Kod Temizliği Şenliği!”

Kodunuzu düzenli tutmak ve gereksiz karmaşıklığı önlemek, kodunuzun temiz ve bakımı kolay olmasını sağlar. Refaktör, kodunuzu daha okunabilir, sürdürülebilir ve temiz hale getirmek için kullanılan bir teknik olup, yazılım geliştirme sürecinin ayrılmaz bir parçasıdır. İşte size bir örnek:

// Kötü bir örnek: Karmaşık kod

if (sayi1 > sayi2 && sayi1 % 2 == 0 || sayi2 % 2 != 0)

{

// Karmaşık işlemler

}

// İyi bir örnek: Daha okunabilir ve temiz kod

bool isSayi1Buyuk = sayi1 > sayi2;

bool isSayi1Cift = sayi1 % 2 == 0;

bool isSayi2Tek = sayi2 % 2 != 0;

if (isSayi1Buyuk && isSayi1Cift || isSayi2Tek)

{

// Daha basit ve anlaşılır işlemler

}

Gördüğünüz gibi, kodunuzu düzenli ve temiz tutmak, okunabilirliği artırır ve kodunuzun bakımını kolaylaştırır. Refaktör, kodunuzda bir şenlik havası yaratır ve kodunuzu daha keyifli bir hale getirir!

# Kötü bir örnek: Sıkıcı yorumlar

# Müşteri sınıfı

class Musteri:

def __init__(self, ad, soyad, yas):

self.ad = ad # Müşteri adı

self.soyad = soyad # Müşteri soyadı

self.yas = yas # Müşteri yaşı

# İyi bir örnek: Esprili yorumlar

# Şimdi biraz mizah katıyoruz, müşteri sınıfına "VİP" (Very Important Person) yorumu ekliyoruz

class Musteri:

def __init__(self, ad, soyad, yas):

self.ad = ad # Müşteri adı, yani "VIP" (Çok Önemli Kişi)

self.soyad = soyad # Müşteri soyadı, yani "Müşteri" (Aslında Şaka yapıyorum, Soyadı)

self.yas = yas # Müşteri yaşı, yani "Gizli" (Bu da Gizli Şaka)

Yorum: “Kodun Açıklaması Şakası!”

Kodunuzda yorum eklemek, kodunuzu anlamak için önemli bir araçtır. Ancak, sadece açıklamalı ciddi bir dil kullanmak yerine, esprili ve eğlenceli yorumlar ekleyerek kodunuzda biraz mizah katabilirsiniz!

Gördüğünüz gibi, yorumlara biraz mizah katmak, kodunuzda eğlenceli bir atmosfer yaratır ve okuyucularınızı gülümsetebilir.

Test: “Eğlenceli Deneyimlerle Dolu Testler!”

Kodunuzun doğru çalıştığından emin olmak için testler eklemek, yazılım geliştirmenin vazgeçilmez bir parçasıdır. Ancak, testleri sadece bir zorunluluk olarak değil, aynı zamanda eğlenceli bir deneyim olarak da görmek önemlidir! Testlerinizi eğlenceli bir deneyim haline getirmek için biraz yaratıcı olabilirsiniz.

// Kötü bir örnek: Sıkıcı testler

test('Çıkarma işlemi doğru sonuç vermelidir', () => {

expect(cikarma(5, 3)).toBe(2);

expect(cikarma(10, 7)).toBe(3);

expect(cikarma(8, 4)).toBe(4);

});

// İyi bir örnek: Eğlenceli testler

test('Çıkarma işlemi doğru sonuç vermelidir', () => {

expect(cikarma(5, 3)).toBe(2); // Zorluğu: Kolay Peeling (Kolay Soyulma)

expect(cikarma(10, 7)).toBe(3); // Zorluğu: Orta Çatlama (Medium Crack)

expect(cikarma(8, 4)).toBe(4); // Zorluğu: Sert Fındık (Hard Nut)

});

Gördüğünüz gibi, test isimlerine eğlenceli ve yaratıcı isimler ekleyerek, testlerinizi sadece bir zorunluluktan ziyade eğlenceli bir deneyim haline getirebilirsiniz.

Düzen: “Kod Düzeni Şovu!”

Kod düzeni, kodunuzun okunabilirliğini artıran önemli bir faktördür. Ancak, kod düzenini sadece bir zorunluluk olarak değil, aynı zamanda bir şov olarak da görebilirsiniz! Kodunuzu düzenlemek ve okunabilirliği artırmak için bazı eğlenceli yaklaşımlar deneyebilirsiniz.

# Kötü bir örnek: Karma karışık kod

def abc(x): return x+2

def defg(y): return y*3

def hijkl(z): return z-1

# İyi bir örnek: Kod düzeni şovu

def eglenceli_kod(x):

return x + 2

def daha_fazla_eglenceli_kod(y):

return y * 3

def en_cok_eglendigimiz_kod(z):

return z - 1

py

Gördüğünüz gibi, kodunuzdaki fonksiyon, değişken ve diğer elemanlara eğlenceli ve anlamlı isimler vererek, kod düzenini bir şova dönüştürebilirsiniz.

Hata Mesajları: “Esprili ve Kullanıcı Dostu!”

Kodunuzda hatalar meydana geldiğinde, kullanıcı dostu ve esprili hata mesajları eklemek, kullanıcı deneyimini artıran bir faktördür. Hataların oluştuğunda kullanıcıları sıkmadan, onlara yardımcı olacak ve bir gülümseme yaratacak hata mesajları kullanabilirsiniz.

// Kötü bir örnek: Sıkıcı hata mesajları

throw new Error("Hata kodu: 500");

// İyi bir örnek: Esprili hata mesajları

throw new Error("Ups! Bir hata oluştu. Sanırım kodlar arasında korsanlık var! Hata kodu: 500");

Clean code ve Yorumlar: “Mizah Dolu Açıklamalar!”

Kodunuzda yorumlar eklemek, kodunuzu daha anlaşılır hale getiren önemli bir uygulamadır. Ancak, yorumları sadece teknik açıklamalar olarak değil, aynı zamanda mizah dolu açıklamalar olarak da kullanabilirsiniz. Bu, kodunuzda biraz eğlence ekleyerek geliştiricilere keyifli bir okuma deneyimi sunabilir.

// Kötü bir örnek: Sıkıcı yorumlar

// Kullanıcıyı güncel bilgilerle doldur

// Verileri veritabanından al

// Kullanıcıya sonuçları gönder

// İyi bir örnek: Mizah dolu yorumlar

// Kullanıcıyı güncel bilgilerle doldur (Çaylak kullanıcıları bile, sadece 1 çırpıda)

// Verileri veritabanından al (Bu arada, hız rekorunu kırdık!)

// Kullanıcıya sonuçları gönder (Onları büyülü bir yolculuğa çıkartıyoruz!)

Gördüğünüz gibi, yorumlara biraz mizah ekleyerek kodunuzu daha keyifli bir okuma deneyimi haline getirebilirsiniz.

Clean code ve Version Kontrolü: “Maceralı ve Şaşırtıcı Geçmiş!”

Version kontrolü, yazılım geliştirme sürecinde vazgeçilmez bir araçtır. Ancak, commit mesajlarınızı sadece teknik açıklamalar olarak değil, aynı zamanda maceralı ve şaşırtıcı hale getirebilirsiniz. Bu, kodunuzun version kontrol geçmişini daha eğlenceli ve ilginç hale getirebilir.

// Kötü bir örnek: Sıkıcı commit mesajları

commit -m "Kod düzenlemesi yapıldı"

// İyi bir örnek: Maceralı commit mesajları

commit -m "Ölümcül bugları avlayarak kodu kurtardık! "

Gördüğünüz gibi, sıradan commit mesajları yerine, maceralı ve şaşırtıcı commit mesajları kullanarak version kontrol geçmişinizi daha keyifli ve ilgi çekici hale getirebilirsiniz.

Ve işte makalemin tamamı! Umarım eğlenceli cümleler, espriler ve gülücüklerle dolu bu makale, yazılım geliştirme sürecinizi daha keyifli hale getirir ve kodlarınıza biraz mizah eklemenin önemini vurgular. Her zaman teknik açıklamaların yanı sıra eğlenceli ve kullanıcı dostu bir yaklaşım benimsemek, yazılım dünyasında daha renkli ve eğlenceli bir deneyim sunabilir. Unutmayın, kod yazmak zor olabilir, ancak biraz mizah ve eğlence, yazılım geliştirmeyi daha keyifli hale getirebilir! 😄🚀

Arif Gökçe

SOFTWARE DEVELOPMENT CONSULTANT