Okuma Notları: The Art Of Readable Code (2)

Kitap #5Yazılım #35

Yusuf Kaya yazdı.

İçerik

Merhabalar, geçtiğimiz sayıda The Art Of Readable Code kitabının okuma notlarının ilk bölümünü paylaşmıştım. Bu sayıda da ikinci bölümünü paylaşacağım.

Koşullardaki Argüman Sırası

Koşullu ifadelerde ve döngülerde, argüman sırasını mantıklı bir şekilde düzenlemek okunabilirliği artırır. Örneğin, length >= 10 gibi değişkenin sol tarafta olması daha okunabilirdir. Ancak iki tarafın da değişken oladuğu durumlarda ifadelerde daha değişken olanın solda olması okunabilirliği artırır.

  let length = 10
  if lengthOfUser >= length {
      ...
  }

if/else Bloklarının Sırası

if/else ifadelerini kullanırken, genellikle pozitif senaryoları önce ele almak ve daha basit durumları önceden kontrol etmek kodun okunabilirliğini artırabilir.

Ternary Operator

Ternary Operator, tek satırda koşullu bir ifade yazmak için kullanılır. Ancak, karmaşık durumları tek bir satırda ifade etmek, okunabilirliği azaltabilir.

  let firstCard = 11
  let secondCard = 10
  print(firstCard == secondCard ? "Kartlar Aynı" : "Kartlar Farklı")

Fonksiyonlardan Erken Dönme

Fonksiyonun içinde erken return ederek kodun karmaşıklığını azaltabilir ve koruyucu ifadeler kullanarak kodun okunabilirliği arttırılabilir.

  func calculateXY(x: Int, y: Int) {
      if x != y {
          return
      }
           ...
  }

Swift dilinde early return edebilmek için özellikle guard anahtar kelime olarak bulunmaktadır.

  func greet(_ name: String?) -> String {
      guard let name = name else { return "Hello, Stranger" }

      return "Hello, \(name)"
  }

İç İçe Geçmiş Kod Bloklarını Azaltma

Derinlemesine iç içe geçmiş kod blokları okunabilirliği azaltır. Kodumuzu düzgün ve lineer bir şekilde düzenlemek, İç içe geçmeyi önleyebilir.

Değişkenleri Açıklamak

Anlaşılması zor ifadeler için daha açıklayıcı alt değişkenler tanımlayarak okunabilirliği arttırabiliriz. Örneğin:

  if line.split(separator: ":")[0].trimmingCharacters(in: .whitespaces) == "root" {
      // ...
  }

  // YERİNE
  let username = line.split(separator: ":")[0].trimmingCharacters(in: .whitespaces)
  if username == "root" {
      // ...
  }

Değişkenleri Özetlemek

Bir ifadenin açıklamaya ihtiyacı olmasa bile, ifadeyi daha yönetilebilir ve anlaşılır bir isimle temsil eden özet değişkenleri oluşturmak faydalı olabilir.

  let userOwnsDocument = request.user.id == document.ownerId
  if userOwnsDocument {
      // ...
  } else {
      // ...
  }

Gereksiz Değişkenlerden Kurtulmak

Yukarıdaki başlıklarda “açıklayıcı” veya “özet” değişkenlerin kodu dahaokunabilir hale getirebileceğini gördük. Bu tür değişkenler, devasaifadeleri parçalayarak ve okunabilirliği arttırdığı için faydalıydı.

Ancak bu başlıkta, okunabilirliği artırmayan değişkenleri ortadankaldırmaya odaklanıyoruz. Bu tür bir değişken kaldırıldığında, yeni koddaha kısa ve aynı derecede anlaşılır hale gelir.İhtiyaç duyulmayan ara değişkenleri ortadan kaldırmak, kodun dahaanlaşılır hale gelmesini sağlar.

Örneğin:

  func removeOne(array: [Int], valueToRemove: Int) {
      var indexToRemove: Int? = nil
      for i in 0..<array.count {
          if array[i] == valueToRemove {
              indexToRemove = i
              break
          }
      }
      if let index = indexToRemove {
          array.remove(at: index)
      }
  }

indexToRemove değişkeni sadece ara bir sonucu tutmak için kullanılır. Bu tür değişkenler bazen hemen elde edildiğinde sonucu ele alarak ortadan kaldırılabilir:

  func removeOne(array: [Int], valueToRemove: Int) {
      for i in 0..<array.count {
          if array[i] == valueToRemove {
              array.remove(at: i)
              return
          }
      }
  }

Fonksiyon erken dönerek, indexToRemove tamamen ortadan kalktı ve kod oldukça basitleşti. Genel olarak, işi mümkün olan en kısa sürede tamamlamak iyi bir stratejidir.

Kaynakça