Olmazsa Olmazlardan: Clean Code! (iOS)

Cem Kazım
blutv
Published in
3 min readDec 29, 2021

--

Merhabalar herkese! Bir yazıyla daha karşınızdayım. Bugünkü yazımda yazılım geliştirme süreçlerinde geliştiricilerin, aynı projede beraber çalıştıkları diğer geliştiriciler için daha anlaşılır kod yazabilmelerini sağlayan Clean Code pratiklerinden bahsedeceğim. Normalde çok önemsenmediğini düşündüğüm fakat geliştirme sürecini oldukça olumlu yönde etkileyen ve hayat kurtaran bu pratiklerin ne gibi durumları handle ettiğini gelin hep beraber görelim.

Clean Code Nedir?

Clean Code’u tanımlarken ismi itibarıyla temiz kod diyebiliriz. Yazdığımız kodların anlaşılabilir hale gelmesini sağlayan ve Spaghetti Code dediğimiz karman çorman olmuş kod bloklarının daha temiz ve düzenli hale getirilmesiyle ortaya çıkan bir durum diyebiliriz. Aşağıdaki örnekle bu kavramları daha iyi anlayalım.

Şimdi bir adet Spaghetti Code diyebileceğimiz bir kod örneği oluşturalım.

Burada View Controller sınıfına bir adet UITableView ve bir adet UICollectionView objeleri ekledim. Görüldüğü üzere, viewDidLoad metodu oldukça şişmiş durumda. Ayrıca delegeler de işin içine dahil olunca okunabilirlik oldukça azaldı. Aslına bakarsanız bu kodları çalıştırdığımızda problemsiz bir şekilde çalışacaktır. Fakat bu kodların algınızı ne kadar fazla yorduğu aşikar. Bunu Clean Code ile nasıl daha düzenli hale nasıl yaklaştırabiliriz gelin ona da bi’ göz atalım.

Yapmış olduğum değişiklikleri tanımlayacak olursam;

  1. View Controller class’ına tanımlanmış olan cleanTableView ve cleanCollectionView objelerine ait kurulum kodlarını, metotlar halinde “setupXView” guideline’ına uygun olacak şekilde birbirlerinden ayırdım ve bu iki metodu daha sonra viewDidLoad içerisine ekledim.
  2. View Controller’ın UITableView ve UICollectionView ‘a ait delegeleri iki farklı extension olacak şekilde metotlarını ayırdım.

Burada size bahsettiğim Clean Code pratiklerinden olan metotlaştırma yöntemiydi. Bunun gibi farklı tercihler de mevcuttur. Amacı, kalabalık oluşturan kodları, akışı etkilemeyecek şekilde birbirlerinden ayırmak ve kod bloklarını düzenli hale getirmek.

Bir örnekle daha bu konunun kapsamını genişletelim.

Yukarıda görmüş olduğunuz kodda, musicButtonTapped ve movieButtonTapped adında iki adet buton aksiyonu dinleyen metotlarımız var. Bunlar için şöyle bir örnek senaryo kurguladım; musicButtonTapped’e tıklandığında showMusicGroupAlertView metodu, movieButtonTapped’e tıklandığında da showMusicGroupAlertView metodu tetiklensin. Bu metotların da görevi koddan anlaşılacağı üzere popup view göstermek.

Şimdi buradaki kodları nasıl daha temiz hale getirebiliriz ona bakalım.

Burada yapılan değişikliği şöyle tanımlayabiliriz;

  1. Her ne kadar çıktıları farklı olsa da fonksiyonel açıdan aynı işi yapan metotları ayrı ayrı tanımlamak yerine tek bir reusable metoda indirgedim.
  2. Bu metoda farklı datalar alabilmesi için title, message ve okButtonTitle gibi dışarıdan alınabilecek gerekli argümanları ekledim. Bu sayede popup gösterimi yapılmak istenilen aksiyon metotlarında sadece showAlertView metodunu çağırılması yeterli olacaktır.

İki örnekte de görüldüğü üzere Clean Code yaklaşımı ile sonuçları daha basitleştirerek, aynı çıktıyı üreten kodlar üretmiş olduk. İlk kodlarda da Code Smell olarak tanımlayabileceğimiz durumlarla karşılaşmıştık. Peki nedir bu Code Smell?

Code Smell Nedir?

Bu kavramı kötü kokan kod olarak tanımlayabiliriz. Biraz göreceli bir kavram olsa da belli noktalarda baş göstermeye başladığını anlayabiliriz. Bunlardan en belirgin örneği “Duplicated Code” yazmak. Bu durum aynı işlevi görebilecek fakat kod satırlarınızı oldukça şişirebilecek durumlarda meydana gelir. Üstteki kod örneğinde popup gösteren metotları tek bir metota indirgeyerek oradaki duplicated code sorununu çözmüş olduk.

Clean Code ile ilgili daha fazla bilgi edinmek için Robert Martin’in Clean Code kitabını ya da Martin Fowler’in Refactoring: Improving the Design of Existing Code kitaplarını inceleyebilirsiniz.

Bu yazımda sizlere bazı Clean Code pratiklerinin yararlarından bahsettim. Bir sonraki yazıda görüşmek üzere, hoşçakalın. :)

--

--