0Pricing
Swift Academy · Pelajaran

Klausa where pada Fungsi

Tambahkan batasan terperinci pada fungsi generik.

Klausa where pada Fungsi 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.

Di Luar Batasan Sederhana

Batasan seperti <T: Collection> menjelaskan T itu sendiri. Namun, terkadang Anda perlu membatasi tipe terkait milik T, seperti Element. Itulah fungsi klausa where.

func sumInts<C: Collection>(_ c: C) -> Int where C.Element == Int {
    c.reduce(0, +)
}
print(sumInts([1, 2, 3]))

Persyaratan Tipe yang Sama

where C.Element == Int mengharuskan elemen koleksi tepat bertipe Int, sehingga operasi khusus bilangan bulat dapat dilakukan.

func describe<C: Collection>(_ c: C) -> String where C.Element == Int {
    "Sum is " + String(c.reduce(0, +))
}
print(describe(Set([1, 2, 3])))

Persyaratan Protokol pada Elemen

Anda dapat mengharuskan elemen mematuhi suatu protokol, bukan harus memiliki satu tipe tertentu, sehingga solusi menjadi lebih fleksibel.

func joinAll<C: Collection>(_ c: C) -> String
    where C.Element: CustomStringConvertible {
    c.map { $0.description }.joined(separator: ", ")
}
print(joinAll([1, 2, 3]))

Klausa Pembatas Setelah Tanda Tangan

Klausa where berada di antara tipe hasil dan badan fungsi. Batasan di dalam <> dan klausa where bekerja bersama.

func maxElement<C: Collection>(_ c: C) -> C.Element?
    where C.Element: Comparable {
    c.max()
}
print(maxElement([4, 9, 2])!)

Menghubungkan Dua Parameter Tipe

Klausa where dapat menghubungkan tipe elemen dari dua tipe generik yang berbeda menggunakan ==.

func combine<A: Collection, B: Collection>(_ a: A, _ b: B) -> [A.Element]
    where A.Element == B.Element {
    Array(a) + Array(b)
}
print(combine([1, 2], Set([3])))

Beberapa Kondisi Pembatas

Cantumkan beberapa persyaratan yang dipisahkan dengan koma untuk menyatakan batasan gabungan.

func report<C: Collection>(_ c: C)
    where C.Element: Comparable, C.Element: CustomStringConvertible {
    if let m = c.max() { print("max:", m.description) }
}
report([5, 1, 9])

Membatasi Tipe Terkait Bertingkat

Anda dapat menjangkau tingkat yang lebih dalam, misalnya dengan mengharuskan elemen dari suatu elemen memenuhi syarat, saat bekerja dengan koleksi bertingkat.

func flatten<C: Collection>(_ c: C) -> [Int]
    where C.Element: Collection, C.Element.Element == Int {
    c.flatMap { Array($0) }
}
print(flatten([[1, 2], [3]]))

Klausa Pembatas dengan Elemen yang Dapat Dibandingkan

Mengharuskan elemen bersifat Equatable memungkinkan Anda mencari dalam koleksi generik.

func indexOf<C: Collection>(_ x: C.Element, in c: C) -> C.Index?
    where C.Element: Equatable {
    c.firstIndex(of: x)
}
if let i = indexOf(2, in: [1, 2, 3]) { print("found") }

Metode Generik dengan Klausa Pembatas

Metode di dalam tipe generik juga menggunakan where, biasanya untuk menambahkan perilaku hanya pada tipe elemen tertentu.

struct Wrap<T> {
    let items: [T]
    func total() -> Int where T == Int { items.reduce(0, +) }
}
print(Wrap(items: [1, 2, 3]).total())

Manfaat bagi Keterbacaan

Batasan yang rumit lebih mudah dibaca dalam klausa where daripada jika dipadatkan ke dalam tanda kurung sudut, terutama jika terdapat beberapa kondisi tipe terkait.

func first<C: Collection>(_ c: C) -> String
    where C.Element: CustomStringConvertible {
    c.first.map { $0.description } ?? "empty"
}
print(first([10, 20]))

Klausa Pembatas di Pustaka Standar

Metode seperti joined() pada rangkaian yang berisi rangkaian menggunakan klausa where secara internal untuk menyatakan persyaratannya dengan tepat.

let nested = [[1, 2], [3, 4]]
print(Array(nested.joined()))

Pemeriksaan Singkat

Uji pemahaman Anda tentang klausa where pada fungsi.

Rangkuman

Klausa where memungkinkan Anda membatasi tipe terkait milik tipe generik: mengharuskan elemen menjadi tipe tertentu (== Int), mematuhi protokol (: Comparable), menghubungkan elemen dari dua parameter, atau menjangkau tipe terkait yang bertingkat. Klausa ini berada setelah tanda tangan dan menjaga batasan yang rumit tetap mudah dibaca.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Klausa where pada Fungsi” gratis?

Ya — teks lengkap “Klausa where pada Fungsi” 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 “Klausa where pada Fungsi”?

Tambahkan batasan terperinci pada fungsi generik. 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 “Klausa where pada Fungsi” 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 Parameter Tipe
  2. Klausa where pada Fungsi
  3. Membatasi Tipe Terkait
  4. Subskrip dan Ekstensi Generik
← Kembali ke Swift Academy