Clean Code: Dikkat Edilmesi Gereken Püf Noktaları
Yazılımı geliştirirken, kodun temiz ve düzenli olması sadece estetik bir arzu değil, aynı zamanda uzun vadede kodun bakımını, anlaşılabilirliğini, performansını ve sürdürülebilirliğini artıran kritik bir unsurdur. “Clean Code” prensipleri, bir yazılımcının kod yazma yaklaşımını şekillendiren ve kod kalitesini artıran önemli kılavuzlardır.
Temiz kod yazmanın faydaları:
- Daha az hata: Hataları daha kolay bulmanızı ve düzeltmenizi sağlar.
- Daha hızlı geliştirme: Kod üzerinde çalışmayı ve yeni özellikler eklemeyi kolaylaştırır.
- Daha iyi ekip çalışması: Ekipteki diğer geliştiricilerin kodunuzu daha kolay anlamasını ve katkıda bulunmasını sağlar.
- Daha iyi sürdürülebilirlik: Projenin uzun vadede bakımı ve güncellenmesini kolaylaştırır.
İşte dikkat edilmesi gereken püf noktalar:
1. Anlaşılır isimler seçin.
Değişken, fonksiyon ve sınıf isimleri yeterince açıklayıcı ve anlamlı olmalıdır. Aşırı kısaltmalardan kaçınılmalıdır. Bu sayede kodun okunması ve anlaşılması daha kolay olur.
// Kötü örnek
let a = 5;
let b = 10;
const abcd = () => a * b
// İyi örnek
let width = 5;
let height = 10;
const calculateArea = () => width * height
2. Fonksiyon ve sınıfları küçültün.
Fonksiyon ve sınıflar yazılırken boyuta dikkat edilmeli, mümkün olduğunca kısa ve öz olmalıdır. Birden çok işlevi karşıyalayan fonksiyonlar yerine parçalara ayırarak her fonksiyona bir görev verilmelidir.
// Kötü örnek
function calculateTotalPrice() {
// ................
}
// İyi örnek
function calculateSubTotal() {
// ...
}
function calculateTax() {
// ...
}
function calculateTotalPrice() {
const subTotal = calculateSubTotal();
const tax = calculateTax();
return subTotal + tax;
}
3. Kod tekrarını önleyin.
Kod tekrarını azaltmak, bakım maliyetini düşürür ve hata olasılığını azaltır. Ortak işlevi yapan kodlar fonksiyonlar aracılığıyla tek yerden kullanılmalıdır.
// Kötü örnek
function calculateRectangleArea(width, height) {
const area = width * height;
console.log(`Rectangle: ${area}`);
}
function calculateTriangleArea(width, height) {
const area = (width * height) / 2;
console.log(`Triangle: ${area}`);
}
function calculateCircleArea(radius) {
const area = radius * radius * Math.PI;
console.log(`Circle: ${area}`);
}
// İyi örnek
function calculateRectangleArea(width, height) {
return calculateArea(width, height);
}
function calculateTriangleArea(width, height) {
return calculateArea(width, height) / 2;
}
function calculateCircleArea(radius) {
return calculateArea(radius, radius) * Math.PI;
}
function calculateArea(a, b) {
return a * b;
}
console.log(`Rectangle: ${calculateRectangleArea(5, 10)}`);
console.log(`Triangle: ${calculateTriangleArea(5, 10)}`);
console.log(`Circle: ${calculateCircleArea(5)}`);
4. Hata kontrolü ve istisnalar ekleyin.
Hatalara ve istisnalara dikkat etmek, kodun güvenilirliğini artırır. Hataların uygun şekilde ele alınması, kullanıcı deneyimini iyileştirir ve kodun kalitesini artırır.
// Kötü örnek
function divide(dividend, divisor) {
return dividend / divisor;
}
// İyi örnek
function divide(dividend, divisor) {
if (divisor === 0) throw new Error("dividing cannot be zero");
return dividend / divisor;
}
5. Temiz bağımlılıklar oluşturun.
Az bağımlılık, modülerlik ve yeniden kullanılabilirlik açısından önemlidir. Temiz bir yapı oluşturmak için, gereksiz bağımlılıklar ortadan kaldırılmalıdır.
// Kötü örnek
function sendEmailToUser(userId, message) {
const user = getUserFromDatabase(userId);
const email = user.email;
const smtpClient = createSMTPClient();
smtpClient.send(email, message);
}
// İyi örnek
function sendEmailToUser(userId, message, emailService) {
const userEmail = emailService.getUserEmail(userId);
emailService.sendEmail(userEmail, message);
}
const emailService = {
getUserEmail: (userId) => {
return getUserFromDatabase(userId).email;
},
sendEmail: (email, message) => {
const smtpClient = createSMTPClient();
smtpClient.send(email, message);
}
};
6. Doğru yorumlama yapın.
Kod, kendisini açıkça ifade etmeli ve kolayca okunabilir olmalıdır. Ancak bazı durumlarda kod kendini açıklamak için yetersiz kalabilir. Böyle zamanlarda yorum satırları eklemek daha açıklayıcı olabilir. Ayrıca, kullanılan yaklaşımın neden tercih edildiği de belirtilebilir.
// Kötü örnek
function calculateTotalPrice(items) {
let totalPrice = 0;
for (let i = 0; i < items.length; i++) {
totalPrice += items[i].price;
}
return totalPrice;
}
// İyi örnek
function calculateTotalPrice(items) {
let totalPrice = 0;
// Calculate price for each item
for (let i = 0; i < items.length; i++) {
totalPrice += items[i].price;
}
return totalPrice;
}
7. Sürekli iyileştirme yapın.
Bir yazılım projesi, sadece bitmiş bir ürün değil, aynı zamanda sürekli olarak geliştirilen bir olgudur. Kodun iyileştirilmesi için sürekli olarak yenilikleri takip etmeli, gereksiz kodları kaldırmalı ve yenilikçi çözümler kullanmalıdır. Bu şekilde, kod kalitesi sürekli olarak yüksek seviyede tutulabilir.
8. Test edilebilir olun.
Kodun test edilebilir olması, projenin güvenilir olması için önemlidir. Kodun kolay test edilebilir olması için fonksiyonlar küçük ve bağımsız bir şekilde tasarlanmalıdır. Test etme sürecini otomatikleştirmek, yapılan değişiklikler esnasında diğer fonksiyonların bozulma riski azaltacak ve hatanın hızlı fark edilmesini sağlayacaktır.
9. Performans optimizasyonunu sağlayın.
Clean Code kavramı, kodun sadece anlaşılır olması değil, aynı zamanda performans açısından da optimize edilmiş olmasıdır. Gereksiz döngüler, yanlış algoritma seçimi, yavaş veri yapıları gibi durumlar kodun performansını düşürebilir. Bu nedenle, kodu optimize etmek ve performansı artırmak için bu noktalara dikkat etmek önemlidir.
10. Versiyon kontrolünü kullanın.
Kodu versiyonlayarak kullanmak her zaman önemlidir. Versiyon kontrolü, eski kodlara geri dönmeyi, aynı dosya üzerinde çalışmayı ve farklı özelliklerin ve iyileştirmelerin izini sürmeyi sağlar. Bu sayede, kod daha iyi organize edebilir ve hatalar daha hızlı bir şekilde düzeltilebilir.
Sonuç:
Clean Code kavramı, yazılım geliştirme sürecinde önemli bir rol oynamaktadır. Bu prensipleri uygulamak, kodun daha anlaşılır, bakımının daha kolay ve geliştirme sürecinin daha verimli olmasını sağlar. Sadece mevcut projenin başarısını artırmakla kalmaz, aynı zamanda gelecekteki geliştirmeler için de sağlam bir temel oluşturur.