0Pricing
Swift Academy · Pelajaran

Batasan Generik dan Klausa where

Menerapkan beberapa batasan, persyaratan tipe yang sama, dan ekstensi bersyarat.

Batasan Generik dan Klausa where adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Ringkasan Dasar-Dasar Generik

Generik memungkinkan Anda menulis kode yang fleksibel dan dapat digunakan kembali, yang bekerja dengan tipe apa pun.

func identity<T>(_ value: T) -> T { return value }
print(identity(42))
print(identity("hello"))

Batasan Satu Tipe

Batasi parameter generik agar memenuhi protokol menggunakan T: Protocol.

func largest<T: Comparable>(_ a: T, _ b: T) -> T {
  return a > b ? a : b
}
print(largest(3, 7))

Beberapa Batasan dengan &

Wajibkan suatu tipe memenuhi beberapa protokol dengan menggabungkannya menggunakan &.

func process<T: Equatable & Hashable>(_ items: [T]) -> Set<T> {
  return Set(items)
}
print(process([1,2,2,3]))

Klausa where pada Fungsi

Klausa where setelah daftar parameter memungkinkan Anda menambahkan batasan yang lebih spesifik.

func allEqual<T: Equatable>(_ array: [T]) -> Bool where T: CustomStringConvertible {
  guard let first = array.first else { return true }
  return array.allSatisfy { $0 == first }
}

where pada Ekstensi

Perluas suatu tipe hanya jika parameter generiknya memenuhi persyaratan.

extension Array where Element: Numeric {
  var sum: Element { reduce(0, +) }
}
print([1,2,3].sum)

Persyaratan Tipe yang Sama

Batasi dua tipe terkait agar menjadi tipe yang sama dengan T == U.

func zip2<A: Sequence, B: Sequence>(_ a: A, _ b: B) -> [(A.Element, B.Element)]
  where A.Element == B.Element {
  return Swift.zip(a, b).map { ($0.0, $0.1) }
}

Kesesuaian Bersyarat

Buat tipe generik memenuhi suatu protokol secara bersyarat ketika parameternya memenuhi batasan.

extension Array: Equatable where Element: Equatable {
  // stdlib already does this, shown for illustration
}
print([1,2] == [1,2])

Kelas Generik dengan Batasan

Generik kelas juga dapat membawa batasan, sehingga keamanan tipe terjamin saat pembuatan instans.

class Box<T: Codable> {
  var value: T
  init(_ v: T) { self.value = v }
}
let box = Box(42)

Protokol dengan Batasan Tipe Terkait

Gunakan where dalam definisi protokol untuk membatasi tipe terkait.

protocol Container {
  associatedtype Item: Equatable
  var items: [Item] { get }
  func contains(_ item: Item) -> Bool
}

Beberapa Klausa where

Susun beberapa kondisi where yang dipisahkan koma untuk persyaratan yang kompleks.

func merge<C: Collection>(_ a: C, _ b: C) -> [C.Element]
  where C.Element: Comparable, C.Element: Hashable {
  return Array(Set(a + b)).sorted()
}

Spesialisasi Tipe Generik

Swift melakukan spesialisasi fungsi generik saat kompilasi untuk tipe konkret, sehingga memungkinkan optimasi kinerja.

// @_specialize instructs the compiler to emit a specialized version
@_specialize(where T == Int)
func add<T: Numeric>(_ a: T, _ b: T) -> T { a + b }

Pemeriksaan Singkat

Bagaimana Anda mewajibkan tipe generik agar memenuhi Comparable dan Hashable sekaligus?

Ringkasan Pelajaran

Batasan generik dengan T: Protocol, beberapa batasan melalui &, klausa where untuk persyaratan yang tepat, persyaratan tipe yang sama, dan kesesuaian bersyarat memberi Anda kendali yang tepat atas kode generik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Batasan Generik dan Klausa where” gratis?

Ya — teks lengkap “Batasan Generik dan Klausa where” 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 “Batasan Generik dan Klausa where”?

Menerapkan beberapa batasan, persyaratan tipe yang sama, dan ekstensi bersyarat. 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 1 dari 4.

Berapa lama pelajaran “Batasan Generik dan Klausa where” 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. Batasan Generik dan Klausa where
  2. Tipe Opaque dengan Kata Kunci some
  3. Existential dengan any dan Penghapusan Tipe
  4. Tipe Associated Utama dan Typed Throws
← Kembali ke Swift Academy