Introduction to Clean Code in Turkish
Temiz Kod Nedir?
Neden Temiz Kod Yazmalıyız?
Temiz Kod Nasıl Yazılır?
Temiz Kod Yazmaya Giriş
- İsimlendirme Kuralları
3. • Bu eğitimin sonunda siz yazılımcı arkadaşlarımızın;
• Daha rahat okunabilir ve kolay güncellenebilir
• Daha az hataya açık
• Daha güzel
• Daha TEMİZ
• Kod yazma alışkanlığı edinmesi amaçlanmaktadır.
Amaç
Public
4. • Temiz Kod Nedir?
• Neden Temiz Kod Yazmalıyız?
• Temiz Kod Nasıl Yazılır?
• İsimlendirme Kuralları
• Canlı Kodlama
Temiz Kod
Public
6. • Temiz kod, okunabilen ve kodu geliştiren yazılımcının
dışında geliştirilebilen koddur.
• Birim ve kabul testleri vardır.
• Anlamlı isimlendirmelere sahiptir.
• Tek bir çözüm yolu sunmaktır.
• En az bağımlılığa sahip, temiz ve net API tanımlarına
sahiptir.
Temiz Kod Nedir?
Public
7. • Bir kodu okurken ne yaptığını anlamıyor iseniz?
• Geliştirdiğiniz bir kod sizi yavaşlatıyor ise?
• Kod üzerinde yaptığınız her değişiklik, kodun başka
yerlerini bozuyor ise?
• Bir kod değişikliği yapmak için onlarca modül kodu
güncelliyor iseniz?
Temiz Kod Nedir?
Public
8. • Kod geliştirdiğimiz projenin zamanında bitmesi
• Okunabilir kod, her zaman daha rahat güncellenebilir.
• Temiz kod daha az hataya açıktır.
• Temiz kodun başka koda etkisi azdır.
• Temiz kod tek bir problemi çözmeye odaklıdır.
Neden TemizKod Yazmalıyız?
Public
9. • İsimlendirme Kuralları
• Metotlar
• Yorumlar
• Kod Formatlama
• Nesne ve Veri Yapıları
• Hata Ayıklama
• Birim Testleri
• Sınıflar
Temiz Kod Nasıl Yazılır?
Public
10. Eğer bir değişken ismi, kendisini açıklamak için bir
yorum gerektiriyor ise, o isim doğru bir isim
değildir.
int d; // elapsed time in days
Public
12. • Açıklayıcı ve Net Değişken İsimleri
• Okunabilir Değişken İsimleri
• Arandığında Bulunabilen Değişken İsimleri
• Anlamlı Ayrıştırma Yapılan Değişken İsimleri
• Kodlama, Ön Ek ve Son Eke Sahip Olmayan Değişken
İsimleri
• Sınıf ve Metot İsimleri
İsimlendirme Kuralları
Public
13. Açıklayıcı ve Net Değişken İsimleri
• Bu mu?
int d; // elapsed time in days
• Yoksa bunlar mı?
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
Public
14. Okunabilir Değişken İsimleri
• Bu mu?
class DtaRcrd102 {
private Date genymdhms;
private Date modymdhms;
private final String pszqint = "102";
};
• Yoksa bunlar mı?
class Customer {
private Date generationTimestamp;
private Date modificationTimestamp;
private final String recordId = "102";
};
Public
15. Arandığında Bulunabilen Değişken İsimleri
• Bu kod mu?
for (int j=0; j<34; j++) {
s += (t[j]*4)/5;
}
• Yoksa bu kod mu?
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j=0; j < NUMBER_OF_TASKS; j++) {
int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}
Public
16. Anlamlı Ayrıştırılabilen Değişken İsimleri
• Aynı kodun içinde tanımlı isimler ayrıştırılabilmelidir.
XYZControllerForEfficientHandlingOfStrings
XYZControllerForEfficientStorageOfStrings
• Yazılımcılar isimlendirmelerinizi anlamlandırmaya
çalışmamalıdır (u -> url)
• Bir değişken ismi
– Problem alanı
– Çözüm alanından seçilmelidir
Public
17. Kodlanmayan Değişken İsimleri
• Bir değişken ismi içerisinde ‘değişken’ geçmemelidir.
nameVariable
• Bir ‘isim’ tutan değişken ‘String’ ile tanımlanmamalıdır.
nameString
• Bir ‘sınıf’ ismi içinde ‘nesne’ ismini almamalıdır.
CustomerObject
Public
18. Ön ve Son Eke Sahip Olmayan Değişken İsimleri
• Sınıf ve metotlar ön ve son eklere ihtiyaç
duymayacak kadar ufak olmalıdır.
public class Part {
private String m_dsc; // The textual description
void setName(String name) {
m_dsc = name;
}
}
---------------------------------------------------------------------
public class Part {
String description;
void setDescription(String description) {
this.description = description;
}
}
Public
19. Sınıf ve Metot İsimleri
• Bir sınıf ismi ‘fiil’ olmamalıdır.
• Bir sınıf ismi ‘isim’ veya ‘isim cümlesi’ olmalıdır.
Customer, WikiPage, Account
• Bir metot ismi ‘fiil’ veya ‘fiil cümlesi’ olmalıdır.
postPayment, deletePage, save.
• Erişimciler (getters) ve Mutasyoncular (setters)
– Değişken tipine göre başına ‘get’ ve ‘set’ koyularak
isimlendirilmelidir.
getName, setName
Public
20. Unutmayalım ki, temeli sağlam olmayan bir bina,
en ufak sallantıda hem o binada oturanlara, hem
de o binaya daha sonradan taşınan kişilere zarar
verir.
Public
21. Neler Öğrendik?
• Temiz Kod Nedir?
• Neden Temiz Kod Yazmalıyız?
• Temiz Kod Nasıl Yazılır?
• İsimlendirme Kuralları
Public
Şimdi bu arkadaşın X firmasına yeni başlamış bir yazılımcı olduğunu düşünelim.
Sizce bu arkadaş şu anda nasıl bir koda bakıyor olabilir? – Cevap bekle
İşte hepimiz yazılımcı olarak bu tarz süreçlerden geçmişizdir.
Yeni bir firmada çalışmaya başladığımızda her zaman sıfırdan bir proje yapmak mümkün değildir.
Bazen projelerin başlarında, bazen ortalarında, bazen ise en kritik zamanlarında projeye dahil olabiliriz.
Peki böyle bir dönemde karşımızda nasıl bir kod görmek isteriz?
İşte bu eğitim ile siz yazılımcı arkadaşlarımıza,
Nasıl daha rahat ve kolay güncellenebilir
Nasıl daha az hataya açık
Nasıl daha güzel
Ve en önemlisi nasıl daha temiz
Kod yazma alışkanlığı kazandırabiliriz, beraber onu inceleyeceğiz.
Bu eğitim süresinde sırası ile
Temiz kod nedir diyerek temiz kodu açıklamaya
Temiz kod yazmamızın önemine
Temiz kodun nasıl yazıldığına
En temelden yani isimlendirme kurallarından başlayarak değineceğiz
En sonunda da şu anda üzerinde çalıştığımız bir proje kodunu kullanarak beraber ufak bir canlı kodlama yapacağız.
Temiz kod gerçekten de bu resimde anlatıldığı gibi, bir kodu okurken veya incelerken, ne kadar kısa sürede ne kadar çok «WTF» dediğimizdir.
Eclipse Strategy’nin yaratıcısı Dave Thomas’a göre ise
Bu kod sizce nasıl bir koddur? Kirli
İşte temiz kod tüm bu özelliklerin olmadığı yani
Kodu okuduğunuz zaman bir önceki kodu yazan yazılımcı arkadaşa küfür etmediğiniz!
Kodu okuduğunuzda anladığınız
Yazdığınız kodun başka bir kod kesitini bozmadan çalıştığı
Gerçekten bir satır kod güncellemesi yapmak istediğinizde sadece bir satırda bu değişikliği yaptığınız
Kod temiz koddur.
Evet, yazılım geliştiriciler bir proje üzerinde çalışırken her zaman proje teslim tarihini göz önüne almaktadır. Şirket için de yazılımcı için de en önemlisi bir projenin zamanında yetişmesidir? Belki de en önemli nokta budur?
İşte sadece bu noktadan yola çıkarak, gerçekten kod geliştirdiğimiz bir projenin zamanında bitmesini istiyorsak temiz kod yazmalıyız.
Neden? – Cevaplar
Çünkü :
Okunabilir kod her zaman daha rahat güncellenebilmektedir
Temiz yazılan bir kod daha az hataya açıktır. Hata yapmak daha zordur. Temiz kod yazarken kullanılacak error handling mekanizmaları kodun daha az hatalı olmasına sebep olacaktır.
Kod unit ve acceptance testlerine sahip olacağı için hatalar daha kolay ortaya çıkacaktır.
Temiz yazılan kod en az dependency (bağımlılığa sahiptir)
Temiz yazılan kod bir tek işi yapmaktadır. O sebeple orada yapılacak hata sadece o kısmı etkileyecektir.
Temiz kod yazmak için geliştirilen yazılımın her parçasında dikkat edilmesi gereken noktalar vardır.
Bu eğitimde biz bu noktaların en temelinden, yani isimlendirme kurallarından bahsedeceğiz.
Diğer noktaların ise daha sonraki eğitimlerde üzerinden geçiyor olacağız.
Peki bir değişken isminin temiz olduğu nasıl anlaşılabilir?
Bir değişkene isim vermek, yeni doğmuş bir çocuğa isim vermek gibi olmalıdır.
Nasıl çocuğunuza çocuk 1, çocuk 2 gibi sallama bir isim vermiyor iseniz, yazdığınız kodu da çocuğunuz gibi düşünebilirsiniz, ona da düzgün bir isim vermelisiniz.
İşte bir değişken isminin temiz olması için;