Alternatif Tanpa Mutasi
Kembalikan nilai baru alih-alih mengubah nilai di tempat.
Alternatif Tanpa Mutasi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Mengembalikan Nilai, Bukan Mengubah
Alih-alih mengubah instans secara langsung, metode tanpa mutasi dapat mengembalikan nilai baru yang sudah menerapkan perubahan tersebut.
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)Nilai Asli Tetap Tidak Berubah
Karena tidak ada yang dimutasi, nilai asli tetap dipertahankan dan nilai baru dihasilkan.
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)Bekerja pada Instans let
Metode tanpa mutasi dapat dipanggil pada konstanta let karena metode tersebut tidak mengubah penerima.
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)Konvensi Penamaan
Konvensi Swift: metode mutasi menggunakan kata kerja imperatif (sort), sedangkan metode tanpa mutasi menggunakan bentuk partisip lampau atau bentuk -ed/-ing (sorted).
var nums = [3, 1, 2]
let ordered = nums.sorted()
nums.sort()
print(ordered, nums)sorted vs sort
Pustaka standar mengikuti konvensi ini: sorted() mengembalikan array baru, sedangkan sort() mengubah array secara langsung.
let a = [5, 2, 8, 1]
let b = a.sorted()
print(a)
print(b)reversed vs Pembalikan
Demikian pula, reversed() tidak mengubah nilai asli. Di sini kita mewujudkannya dengan Array.
let a = [1, 2, 3]
let b = Array(a.reversed())
print(a, b)Merangkai Pemanggilan Tanpa Mutasi
Metode tanpa mutasi mengembalikan nilai, sehingga Anda dapat merangkainya dengan lancar.
let result = [4, 2, 9, 1].sorted().map { $0 * 2 }
print(result)Gaya Fungsional
Mengembalikan nilai baru alih-alih melakukan mutasi mendukung gaya fungsional yang mudah diuji dan dipahami.
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)Menghindari Bug pada State Bersama
Menghasilkan nilai baru menghindari mutasi bersama yang tidak disengaja, terutama di antara utas.
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)Kapan Sebaiknya Melakukan Mutasi
Jika Anda berulang kali memperbarui satu instans dalam perulangan, mutasi langsung dapat lebih efisien daripada membuat banyak salinan.
var total = 0
for n in 1...5 {
total += n
}
print(total)Sediakan Keduanya
Tipe yang dirancang dengan baik terkadang menyediakan kedua bentuk tersebut, seperti pustaka standar, sehingga pemanggil dapat memilih antara mutasi atau nilai baru.
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)Pemeriksaan Singkat
Uji rancangan tanpa mutasi.
Ringkasan
Sebagai alternatif terhadap mutasi, metode tanpa mutasi mengembalikan nilai baru yang sudah menerapkan perubahan, membiarkan nilai asli tetap utuh, dan dapat digunakan pada instans let. Konvensi Swift memasangkan nama imperatif (sort) dengan nama berbentuk -ed/-ing (sorted).
let a = [3, 1, 2]
let b = a.sorted()
print(a, b)Pertanyaan yang Sering Diajukan
Apakah pelajaran “Alternatif Tanpa Mutasi” gratis?
Ya — teks lengkap “Alternatif Tanpa Mutasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Alternatif Tanpa Mutasi”?
Kembalikan nilai baru alih-alih mengubah nilai di tempat. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Alternatif Tanpa Mutasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tipe Nilai dan Kekekalan
- Kata Kunci mutating
- mutating dan Penetapan Ulang self
- Alternatif Tanpa Mutasi