Memilih antara some, any, dan generik
Pilih generik untuk pengetikan statis yang homogen, some P untuk menyembunyikan tipe konkret yang tetap, dan any P untuk polimorfisme heterogen.
Memilih antara some, any, dan generik adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. 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 3 pelajaran total.
Kapan menggunakan yang mana?
Pedoman umum:
- Generik: tipe konkret yang sama pada setiap pemanggilan; pemeriksaan terbaik saat kompilasi dan performa terbaik.
- some P: menyembunyikan tipe kembalian konkret, yang tetap untuk setiap fungsi.
- any P: mencampur konformer (heterogen), dengan dispatch dinamis.
Generik: homogen
Generik ideal untuk data homogen dan optimisasi (dispatch statis, penyisipan fungsi).
protocol Shape { func area() -> Double }
struct Circle: Shape { let r: Double; func area() -> Double { .pi * r * r } }
struct Square: Shape { let s: Double; func area() -> Double { s * s } }
// Generic: one concrete Shape type per call site (homogeneous)
func totalAreaGeneric<S: Sequence, T: Shape>(_ xs: S) -> Double where S.Element == T {
xs.reduce(0) { $0 + $1.area() }
}
print(totalAreaGeneric([Circle(r:1), Circle(r:2)])) // OK
// totalAreaGeneric([Circle(r:1), Square(s:2)]) // ❌ different typesOpak: disembunyikan tetapi tetap
some P mengembalikan tipe yang tetap tetapi tersembunyi. Sangat cocok ketika Anda menginginkan enkapsulasi tanpa kehilangan kinerja statis.
// Opaque factory hides the concrete type while guaranteeing Shape
func unitShape(flag: Bool) -> some Shape {
// Must return the SAME underlying type on all paths; pick one.
Circle(r: 1)
}
let s = unitShape(flag: true)
print(String(format: "%.2f", s.area())) // 3.14any P: heterogen
any P memungkinkan tipe mixed dalam satu koleksi atau variabel; metode melakukan dispatch secara dinamis melalui antarmuka protokol.
// Existential: store mixed conformers
let mixed: [any Shape] = [Circle(r: 1), Square(s: 2)]
let sum = mixed.reduce(0) { $0 + $1.area() } // dynamic dispatch
print(String(format: "%.2f", sum))Perbandingan bentuk API
Pilih permukaannya:
- Generik: pemanggil mengendalikan tipe konkret.
- Opak: Anda menyembunyikan tipe, yang tetap untuk setiap fungsi.
- Eksistensial: Anda dapat mengubah tipe konkret secara dinamis.
// Three API shapes for the same idea: "make a Shape"
// 1) Generic return — exposes concrete type to caller
func makeGeneric<T: Shape>(_ t: T) -> T { t }
// 2) Opaque return — hides concrete type but fixed
func makeOpaqueCircle() -> some Shape { Circle(r: 1) }
// 3) Existential return — can return any conformer
func makeExistential(_ big: Bool) -> any Shape { big ? Square(s: 3) : Circle(r: 1) }
let g: Circle = makeGeneric(Circle(r: 2)) // caller knows concrete type
let o = makeOpaqueCircle() // caller sees only Shape
let e = makeExistential(true) // could be Circle or Square at runtime
print(g.area(), o.area(), e.area())Ringkasan cepat
Panduan:
- Utamakan generik untuk performa dan pengetikan kuat ketika data bersifat homogen.
- Gunakan some P untuk menyembunyikan tipe kembalian dan menjaga API tetap stabil.
- Gunakan any P untuk koleksi yang mirip plugin atau mixed.
- Hindari any P untuk protokol dengan tipe terkait/Self, kecuali Anda menggunakan penghapusan tipe.
Pemeriksaan keputusan: pilih some/any/generik
Pemeriksaan singkat: Opsi mana yang menyembunyikan tipe kembalian konkret yang tetap di balik protokol P?
Ringkasan
Ringkasan:
- Generik = homogen, paling cepat, paling statis.
- some P = menyembunyikan tipe konkret, tetap untuk setiap fungsi.
- any P = heterogen, dispatch dinamis.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memilih antara some, any, dan generik” gratis?
Ya — teks lengkap “Memilih antara some, any, dan generik” 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 3 pelajaran total.
Apa yang akan aku pelajari di “Memilih antara some, any, dan generik”?
Pilih generik untuk pengetikan statis yang homogen, some P untuk menyembunyikan tipe konkret yang tetap, dan any P untuk polimorfisme heterogen. 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 3 dari 3.
Berapa lama pelajaran “Memilih antara some, any, dan generik” 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
- some P (tipe hasil opak): menyembunyikan tipe konkret
- any P (eksistensial): kompromi dan pengiriman dinamis
- Memilih antara some, any, dan generik