Swift Academy · Ders

İşlevlerde where Cümleleri

Genel işlevlere ayrıntılı kısıtlar ekleyin.

2. ders / 413 adım

İşlevlerde where Cümleleri, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Basit Kısıtlamaların Ötesi

<T: Collection> gibi bir kısıtlama, T'nin kendisini açıklar. Ancak bazen Element gibi ilişkili türlerini kısıtlamanız gerekir. where koşulu bunu sağlar.

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

Aynı Tür Gereksinimi

where C.Element == Int, koleksiyonun öğelerinin tam olarak Int olmasını gerektirir ve tamsayılara özgü işlemleri mümkün kılar.

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

Öğe Üzerinde Protokol Gereksinimi

Öğenin tam olarak tek bir tür olmasını istemek yerine bir protokole uymasını gerektirebilirsiniz; bu daha esnektir.

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

where İmza Sonrasında Gelir

where koşulu, dönüş türü ile işlev gövdesi arasında yer alır. <> içindeki kısıtlamalar ile where koşulu birlikte çalışır.

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

İki Tür Parametresini İlişkilendirme

Bir where koşulu, == ile iki farklı jeneriğin öğe türlerini birbirine bağlayabilir.

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])))

Birden Çok where Koşulu

Bileşik kısıtlamaları ifade etmek için virgülle ayrılmış birden çok gereksinim listeleyin.

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])

İç İçe İlişkili Türleri Kısıtlama

İç içe koleksiyonlarla çalışırken daha derine inebilir; örneğin bir öğenin öğesini kısıtlayabilirsiniz.

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

Equatable Öğelerle where

Equatable öğeler gerektirmek, jenerik bir koleksiyonda arama yapmanızı sağlar.

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") }

where Kullanan Jenerik Yöntemler

Jenerik türlerin içindeki yöntemler de where kullanır ve çoğu zaman yalnızca belirli öğe türleri için davranış ekler.

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

Okunabilirlik Avantajı

Karmaşık kısıtlamalar, özellikle birden çok ilişkili tür koşulu olduğunda, açı ayraçlarının içine sıkıştırılmak yerine bir where koşulunda daha anlaşılır okunur.

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

Standart Kitaplıkta where

Dizi dizileri üzerindeki joined() gibi yöntemler, gereksinimlerini kesin biçimde ifade etmek için dahili olarak where koşulları kullanır.

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

Hızlı Kontrol

İşlevlerdeki where koşulları konusundaki anlayışınızı sınayın.

Özet

where koşulları, bir jeneriğin ilişkili türlerini kısıtlamanızı sağlar: bir öğenin belirli bir tür olmasını (== Int), bir protokole uymasını (: Comparable), iki parametrenin öğelerini ilişkilendirmeyi veya iç içe ilişkili türlere ulaşmayı gerektirebilirsiniz. Bu koşullar imzadan sonra yer alır ve karmaşık kısıtlamaların okunabilir kalmasını sağlar.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Swift öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
122
Dersler
409

Sıkça Sorulan Sorular

“İşlevlerde where Cümleleri” dersi ücretsiz mi?

Evet — “İşlevlerde where Cümleleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“İşlevlerde where Cümleleri” dersinde ne öğreneceğim?

Genel işlevlere ayrıntılı kısıtlar ekleyin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“İşlevlerde where Cümleleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tür Parametresi Kısıtları
  2. İşlevlerde where Cümleleri
  3. İlişkili Türleri Kısıtlama
  4. Genel Alt Betikler ve Uzantılar
← Swift Academy Sayfasına Dön