0Pricing
Swift Academy · Pelajaran

Mutasi, Berbagi, dan Aliasing Tak Terduga

Memahami cara referensi bersama menyebabkan bug dan cara tipe nilai mencegahnya.

Mutasi, Berbagi, dan Aliasing Tak Terduga adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Selamat Datang

Pemberian alias terjadi ketika dua variabel merujuk ke objek yang sama. Pada tipe nilai, hal ini mustahil; pada tipe referensi, hal ini menimbulkan bug yang mengejutkan. Memahami perbedaan ini sangat penting.

Tipe Nilai Tidak Memiliki Alias

```swift var a = [1,2,3] var b = a // independent copy a.append(4) print(b) // [1,2,3] — unchanged ``` Setiap penugasan tipe nilai membuat salinan yang mandiri.

Tipe Referensi DO Memiliki Alias

```swift class Counter { var value = 0 } let a = Counter() let b = a // SAME object a.value += 1 print(b.value) // 1 — b sees the change! ``` `a` dan `b` sama-sama menunjuk ke objek memori dinamis yang sama.

Pemberian Alias pada Parameter Fungsi

```swift func increment(_ c: Counter) { c.value += 1 } let shared = Counter() increment(shared) print(shared.value) // 1 — mutated by the function ``` Kelas diteruskan berdasarkan referensi—fungsi tersebut memutasi objek asli.

Masalah: Keadaan Bersama yang Dapat Diubah

```swift class Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // aliased! cache.items.append("data") print(cache2.items) // ["data"] — unexpected! ``` Beginilah bagian-bagian kode yang tampaknya tidak berkaitan dapat saling memengaruhi.

Mengatasinya dengan Tipe Nilai

```swift struct Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // independent copy cache.items.append("data") print(cache2.items) // [] — unaffected ```

Mengatasinya dengan Kelas yang Menyalin

```swift func process(_ c: Counter) { var local = Counter() local.value = c.value // copy values, not reference local.value += 1 } ``` Ketika Anda memerlukan semantik referensi tetapi tidak ingin membuat alias, salin nilainya secara eksplisit.

Keamanan Utas dan Pemberian Alias

Berbagi referensi yang sama menjadi sangat berbahaya antar-utas: ```swift // Thread 1: cache.items.append("a") // Thread 2 simultaneously: cache.items.append("b") // ❌ data race! ``` Tipe nilai dalam Swift Concurrency mencegah hal ini secara bawaan—hanya aktor yang dapat berbagi status yang dapat diubah.

Mendeteksi Berbagi Referensi yang Tidak Disengaja

Thread Sanitizer (TSan) milik Xcode mendeteksi balapan data saat program berjalan. Aktifkan fitur ini melalui Scheme > Diagnostics > Thread Sanitizer. Swift Exclusivity Enforcement mendeteksi pelanggaran berbagi referensi pada satu utas untuk parameter `inout` saat program berjalan.

Pola Berbagi Referensi yang Disengaja

Terkadang berbagi referensi memang disengaja—misalnya tembolok global: ```swift class AppCache { static let shared = AppCache() // intentional shared reference var data: [String: Any] = [:] } ``` Dokumentasikan pembagian yang disengaja dengan jelas; secara bawaan, gunakan tipe nilai untuk menghindari berbagi referensi yang tidak disengaja.

Pemeriksaan Singkat

Apa yang terjadi ketika Anda menetapkan instans kelas ke variabel baru?

Ringkasan

Hal-hal penting: • Tipe nilai (struktur) — penugasan membuat salinan; tidak mungkin terjadi berbagi referensi • Tipe referensi (kelas) — penugasan membagikan referensi; berbagi referensi dapat terjadi • Berbagi referensi antar-utas = balapan data • Secara bawaan, gunakan struktur; gunakan kelas hanya jika identitas bersama diperlukan • Gunakan TSan dan Swift Exclusivity untuk mendeteksi masalah Berikutnya: graf campuran nilai/referensi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mutasi, Berbagi, dan Aliasing Tak Terduga” gratis?

Ya — teks lengkap “Mutasi, Berbagi, dan Aliasing Tak Terduga” 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 “Mutasi, Berbagi, dan Aliasing Tak Terduga”?

Memahami cara referensi bersama menyebabkan bug dan cara tipe nilai mencegahnya. 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 2 dari 4.

Berapa lama pelajaran “Mutasi, Berbagi, dan Aliasing Tak Terduga” 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. Stack vs Heap: Tempat Nilai Disimpan
  2. Mutasi, Berbagi, dan Aliasing Tak Terduga
  3. Graf Nilai/Referensi Campuran
  4. Merancang API untuk Semantik Nilai
← Kembali ke Swift Academy