0Pricing
Swift Academy · Ders

Değiştirmeyen Alternatifler

Yerinde değiştirmek yerine yeni değerler döndürün.

Değiştirmeyen Alternatifler, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Değiştirmek Yerine Döndürme

Bir örneği yerinde değiştirmek yerine, değişikliğin uygulandığı yepyeni bir değer değişiklik yapmayan bir yöntem tarafından döndürülebilir.

struct Counter {
    var value: Int
    func incremented() -> Counter {
        return Counter(value: value + 1)
    }
}
let c = Counter(value: 0)
let next = c.incremented()
print(c.value, next.value)

Özgün Değer Değişmeden Kalır

Hiçbir şey değiştirilmediği için özgün değer korunur ve yeni bir değer oluşturulur.

struct Vector {
    var x: Int
    var y: Int
    func scaled(by factor: Int) -> Vector {
        return Vector(x: x * factor, y: y * factor)
    }
}
let v = Vector(x: 2, y: 3)
let big = v.scaled(by: 10)
print(v.x, v.y, big.x, big.y)

let Örnekleriyle Çalışır

Değişiklik yapmayan yöntemler, alıcıyı değiştirmedikleri için let sabitleri üzerinde çağrılabilir.

struct Money {
    var cents: Int
    func plus(_ other: Int) -> Money {
        return Money(cents: cents + other)
    }
}
let m = Money(cents: 100)
print(m.plus(50).cents)

Adlandırma Kuralı

Swift kuralı şöyledir: değişiklik yapan yöntemler emir kipindeki fiilleri (sort), değişiklik yapmayan yöntemler ise geçmiş zaman ortacı biçimlerini (sorted) kullanır.

var nums = [3, 1, 2]
let ordered = nums.sorted()
nums.sort()
print(ordered, nums)

sorted ve sort

Standart kitaplık bu kurala uyar: sorted() yeni bir dizi döndürür, sort() ise diziyi yerinde değiştirir.

let a = [5, 2, 8, 1]
let b = a.sorted()
print(a)
print(b)

reversed ve Tersine Çevirme

Benzer şekilde reversed() değişiklik yapmaz. Burada sonucu Array ile somutlaştırıyoruz.

let a = [1, 2, 3]
let b = Array(a.reversed())
print(a, b)

Değişiklik Yapmayan Çağrıları Zincirleme

Değişiklik yapmayan yöntemler değer döndürdüğü için bunları akıcı bir biçimde zincirleyebilirsiniz.

let result = [4, 2, 9, 1].sorted().map { $0 * 2 }
print(result)

İşlevsel Tarz

Değerleri değiştirmek yerine yenilerini döndürmek, sınanması ve davranışı hakkında akıl yürütülmesi kolay olan işlevsel bir tarzı destekler.

struct Account {
    var balance: Int
    func deposited(_ n: Int) -> Account {
        return Account(balance: balance + n)
    }
}
let a0 = Account(balance: 0)
let a1 = a0.deposited(100).deposited(50)
print(a0.balance, a1.balance)

Paylaşılan Durum Hatalarından Kaçınma

Yeni değerler üretmek, özellikle iş parçacıkları arasında, yanlışlıkla yapılan paylaşılan değişiklikleri önler.

struct Settings {
    var volume: Int
    func with(volume newVolume: Int) -> Settings {
        return Settings(volume: newVolume)
    }
}
let base = Settings(volume: 5)
let loud = base.with(volume: 11)
print(base.volume, loud.volume)

Ne Zaman Değişiklik Yapılmalı

Bir döngüde tek bir örneği art arda güncelliyorsanız, yerinde değişiklik yapmak birçok kopya oluşturmaktan daha verimli olabilir.

var total = 0
for n in 1...5 {
    total += n
}
print(total)

Her İki Biçimi de Sunma

İyi tasarlanmış türler, standart kitaplıkta olduğu gibi, bazen her iki biçimi de sunar; böylece çağıranlar değişiklik yapmayı veya yeni bir değer oluşturmayı seçebilir.

struct Text {
    var value: String
    func uppercased() -> Text {
        return Text(value: value.uppercased())
    }
    mutating func uppercase() {
        value = value.uppercased()
    }
}
var t = Text(value: "hi")
let u = t.uppercased()
t.uppercase()
print(u.value, t.value)

Kısa Sınama

Değişiklik yapmayan tasarımı sınayın.

Özet

Değişikliğe alternatif olarak değişiklik yapmayan bir yöntem, değişikliğin uygulandığı yeni bir değer döndürür; özgün değeri olduğu gibi bırakır ve let örnekleriyle çalışır. Swift kuralı, emir kipindeki adları (sort) geçmiş zaman ortacı biçimleriyle (sorted) eşleştirir.

let a = [3, 1, 2]
let b = a.sorted()
print(a, b)

Sıkça Sorulan Sorular

“Değiştirmeyen Alternatifler” dersi ücretsiz mi?

Evet — “Değiştirmeyen Alternatifler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Değiştirmeyen Alternatifler” dersinde ne öğreneceğim?

Yerinde değiştirmek yerine yeni değerler döndürün. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Değiştirmeyen Alternatifler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Değer Türleri ve Değişmezlik
  2. mutating Anahtar Sözcüğü
  3. Mutating ve self Yeniden Ataması
  4. Değiştirmeyen Alternatifler
← Swift Academy Sayfasına Dön