Genel

Clean Code – 2. Fonksiyonlar

Fonksiyonlar : Programlama da yaptığımız herşeyin temelinde fonksiyonlar yatmaktadır. Başlıca java da bir text metin yazdırmaya çalışsak bile main metotu içerisinde yazmamız gerekiyor. Kitap 2. bölümde (aslında 3.) fonksiyonlardan bahsediyor.

Kitap bu bölümde bir fonksiyon paylaşıyor, aşağıdaki fonksiyon zamanında yazılmış bir proje için geliştirilmiş. Hadi 3 dakikanız var ve bu fonksiyon ne iş yapar çözün deniyor.

3 dakika içerisinde muhtemelen kodu anlamadınız. kod çok fazla sayıda tuhaf tanımlama ve çoklu if ifadesinden ötürü karmaşıklaşmış. Peki aşağıdaki kod ne iş yapıyor ?

Bu kod ile önceki kod aslında aynı işlevi yapıyor, sadece 2. kod daha açık, tüm detaylar anlaşılmasada test stringine sahip ise teardown ve setup kısmına bazı parametreler göndererek eklemeler yapıp bize sayfanın htmlini döndürdüğünü, bir test frameworkü olduğunu düşünebiliriz.

SMALL (Küçük): Kural 1 – Fonksiyonlar küçük olmalıdır. Kural 2 – Kural 1 ‘den de küçük fonksiyonlar yazmalıyız. Kitap bize fonksyionun en fazla 20 satır olması gerektiğini vurguluyor ve 1 satır 150 karakter uzunluğunda olmamalı diyor.

Yukarıdaki kod daha da küçük yazılırsa bunun gibi olur, kitapta basit bir hikaye anlatıyor, hikayede ana vurgu kodunuzdaki fonksiyonlar sadece tek bir şey yapacak kadar kısa olmalıdır.

1 Şey Yap : Fonksiyonlarda bu kuralı bir prensip haline getirmeliyiz. ilk kod’ta buffer oluşturma, sayfa getirme, sayfada arama, paths ‘leri oluşturma ve html getirme gibi çok şey yapıyor. son kod ise test sayfalarına setup ve teardownsları dahil ediyor. “FUNCTIONS SHOULD DO ONE THING. THEY SHOULD DO IT WELL. THEY SHOULD DO IT ONLY.” -> Kitap fonksiyonlar için bir şey yapmalı iyi yapmalı ve sadece bunu yapmalıdır diyor.

Switch ifadeleri : Switch ifadelerini küçültmek zordur. Doğası gereği switch ifadesi N tane işlem yapabilir. Fakat küçük seviyeli bir sınıfa gömebiliriz ve tekrarlamasının önüne geçebiliriz. Buna imkan sağlayan şey polimorfizmdir.

Aşağıdaki fonksiyonda bir kaç problem vardır. İlki büyüktür ve her employee tipi eklendiğinde büyüyecektir. Bundan ötürü SRP ve OCP ‘yi ihlal ediyor ve kod parçası birden fazla iş yapıyor.

Kodun çözümü abstract factory ‘dir. Abstract factory içerisine metotlar ekliyoruz. EmployeFactory ‘i interface oluşturuyoruz. Bu interface ‘i implemente eden bir sınıfta switch ifadesini artık metot değil Employee abstractindaki metotları alacak sınıflara dönüştürdük.

Kısaca Employee sınıfından türeyen sınıflar artık polimorfik olarak switch ‘teki türüne göre çalıştırılacak. Clean Code 1 ‘deki gibi fonksiyon isimlerini yaptığı işi açıklayacak şekilde iyi seçmeniz gerekiyor. Fonksiyona verilen ismin uzun olmasından da korkmayın.

Fonksiyon parametresinin ideali sıfırdır. Maks. 3 argümanlı fonksiyonlar kabul görürken 3 ‘ten fazlası gözden geçirilmelidir. Genel olarak 1 parametreli fonksiyonlar ya bir şeye dönüşüyor (InputStream fileOpen(“MyFile”)) yada bize soru soruyordur (boolean fileExists(“MyFile”)).

event tabanlı işlemler içinse dikkatli olun ve yazdığınız isimlendirme çok açıklayıcı olsun (void passwordAttemptFailedNtimes(int trials)). Boolean fonksiyonlar ise birden fazla iş yapar. Tehlikeli ve ayırılmalıdır.

2 ve 3 ‘ten fazla parametreli fonksiyon varsa bu argümanlardan bir kaçı sınıf ile sarmalanmalıdır.

Bir fonksiyon kullanırken içeriğinin bir yan etkisi olup olmadığını kontrol edin. Misal aşağıdaki kod ‘ta bir gizli kod vardır. Kullanıcının parolasını kontrol ediyor gibi görünse de içerisinde oturumla ilgili bir işte yapmaktadır. Tehlikelidir.

fonksiyonlar ya bir şey yaparlar ya da bir şeylere cevap verirler fakat 2sini aynı anda yapamazlar. Misal aşağıdaki kod if içerisinde kullanılırsa kafa karışıklığına neden olur. Bunu gidermek için resimdeki gibi kullanılmalıdır. public boolean set(String attribute, String value);

 

Kitap Fonksiyonlar bölümünün sonunda Dont Repeat yourself ile kodun kopyalandığı kısımların temizlenmesi gerektiğine vurguda bulunuyor. Bu tarz metotları yazmanın nasıl bir makale yazılıyor ve sürekli düzeltiliyorsa, kod tarafının da düzeltilmesi gerektiğini söylüyor.İlk başta tekrarlayan yapılan, çok fazla parametre alan fonksiyonlar olsa da sonrasında düzeltildiğini anlatıyor. Tabi bunu yaparken test sınıflarını da yazıyor ve kodu test ediyor. Kısaca fonksiyonlar dilin fiili, sınıflar isimleridir.

Son söz : Usta yazılımcılar kodlarında programı yazmaktan ziyade hikaye anlatmayı tercih ederler. Yazdığınız kod o kadar açık ve temiz olmalı ki okuyan kişi tüm parçaları anlamalıdır.

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir