0Pricing
Swift Academy · Pelajaran

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

  1. Tipe Nilai dan Kekekalan
  2. Kata Kunci mutating
  3. mutating dan Penetapan Ulang self
  4. Alternatif Tanpa Mutasi
← Kembali ke Swift Academy