Swift 5.9: If ve Switch Gelişmeleri

Swift #2iOS #28Yazılım #37

Suat Karakuşoğlu yazdı.

Figure 1: Karar

İçerik

Switch ve if karar grameri fonksiyonel programlama dinamiklerine daha yakın olması adına ufak yetenekler kazandı.

Swift Evolution 380 önerisi ile Swift 5.9 ile kullanmaya başladığımız bu özelliği biraz tanıyalım.

Expression’lar dönüş değeri olan fonksiyonel programlamaya uygun ifadelerdir.

If Expression

If Expression karar ifadesinde hızlı atama yapmayı sağlayan bir yetenek kazandı.

  let weightStatus =  if weight > 100.0 {"Overweight"} else {"Fit"}

Bu aşağıdaki ternary expression ile çok yakın bir yazıma sahip ancak daha okunabilir.

  // Sample ternary expression
  let weightStatus =  weight > 100.0 ? "Overweight" : "Fit"

Switch Expression

Switch expression olmasıyla çok daha güzel hale geldi.

Önceden calculatedPenalty ile yaptığımız iş şimdi yeni Switch yeteneği ile bu örnek kodlarda gördüğümüz üzere calculatedPenalty’ye direkt atama yapabilir durumda.

  typealias Dollar = Double
  func calculatePenaltyTicket(speed: Int) -> Dollar {
      let maxSpeed = 80
      let basePenalty = 100.0

      if speed <= maxSpeed {
          return 0.0
      }

      let exceedingSpeed = speed - maxSpeed
      let exceedingPercentage = (Double(exceedingSpeed) / Double(maxSpeed)) * 100

      // Eski yöntem ile yapılması böyleydi.
      var calculatedPenalty = 0.0
      switch exceedingPercentage {
      case 10...20:
          calculatedPenalty = basePenalty * 1.25
      case 20...40:
          calculatedPenalty = basePenalty * 1.50
      case 40...80:
          calculatedPenalty = basePenalty * 2.0
      case 80...:
          calculatedPenalty = basePenalty * 3.0
      default:
          calculatedPenalty = basePenalty
      }

      return calculatedPenalty
  }

Switch Yeni Yöntem

  // Yeni switch ifadesi direkt =calculatedPenalty='ye atama yapabilir
  let calculatedPenalty = switch exceedingPercentage {
  case 10...20: basePenalty * 1.25
  case 20...40: basePenalty * 1.50
  case 40...80: basePenalty * 2.0
  case 80...: basePenalty * 3.0
  default: basePenalty
  }

Return Inference

Burada aynı zamanda return etmenin gerekmemesi de dikkatinizi çekmiştir. Bu yetenek Return ifadesinin infer edilmesi ile Swift 5.1’de gelmişti.

Swift’in inference motoru, derleyici zamanında kodun doğru çalışmasını garantilerken aynı zamanda geliştiricinin de daha az ve öz kod yazmasına yardımcı oluyor.

Sonuç olarak

Swift dili fonksiyonel yaklaşımları çoğu zaman yol haritasına alıp uygulayan bir yaklaşımla ilerliyor.

Bu yol haritası Swift Evolution üzerinden takip edilen bir yönetime sahip. Buradaki tartışmaları ve önerileri takip etmek dile hakim olabilmek adına güzel içgörüler sağlayabilir.

Kaynakça