Swift Academy · Oppitunti

Geneeriset funktiot ja tyypit

Kirjoittakaa geneerisiä funktioita ja tyyppejä tyyppiparametrien (esim. ) avulla. Näkekää, miten kääntäjä päättelee tyypit ja pitää koodin turvallisena ja uudelleenkäytettävänä.

Oppitunti 1/38 vaihetta

Geneeriset funktiot ja tyypit on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 3 oppituntia.

Miksi geneerisiä tyyppejä?

Geneeristen tyyppien avulla voitte kirjoittaa yhden funktion tai tyypin, joka toimii monien tyyppien kanssa ja säilyttää samalla tyyppiturvallisuuden. Näette, miten <T> toimii tyyppiparametrina ja miten päättely tekee kutsuista yksinkertaisia.

Geneerinen funktio

Geneerinen funktio käyttää tyyppiparametria (<T>). Kääntäjä tarkistaa tyypit jokaisella kutsulla.

// Generic swap for any type T
func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = 1, y = 2
swapValues(&x, &y)
print(x, y)  // 2 1

var s1 = "A", s2 = "B"
swapValues(&s1, &s2)
print(s1, s2) // B A

Geneerinen tyyppi

Myös tyypit voivat olla geneerisiä: määritelkää Stack<Element> ja käyttäkää sitä uudelleen Int-, String- ja muiden tyyppien kanssa.

// A minimal generic stack
struct Stack<Element> {
    private var items: [Element] = []
    mutating func push(_ x: Element) { items.append(x) }
    mutating func pop() -> Element? { items.popLast() }
    var top: Element? { items.last }
}

var intStack = Stack<Int>()
intStack.push(10); intStack.push(20)
print(intStack.top ?? -1)   // 20

var textStack = Stack<String>()
textStack.push("hi"); textStack.push("bye")
print(textStack.pop() ?? "?")

Tyyppien päättely

Swift usein päättelee geneeriset tyypit, joten niitä tarvitsee harvoin määrittää kutsuissa erikseen.

// The compiler infers T from arguments/assignments
func makePair<T>(_ a: T, _ b: T) -> (T, T) { (a, b) }

let pair1 = makePair(1, 2)          // T inferred as Int
let pair2 = makePair("a", "b")      // T inferred as String
print(pair1, pair2)

Toiston välttäminen

Ilman geneerisiä tyyppejä koodi toistetaan jokaiselle tyypille erikseen. Geneeriset tyypit poistavat toistoa säilyttäen staattiset tarkistukset.

// Non-generic overloads would duplicate logic:
func eqInt(_ a: Int, _ b: Int) -> Bool { a == b }
func eqStr(_ a: String, _ b: String) -> Bool { a == b }
// A single generic can replace both:

Huomautuksia ja nimeäminen

Huomautuksia:

  • Käyttäkää selkeitä nimiä: T, Element tai toimialuekohtainen nimi.
  • Pitäkää rajapinnat pieninä ja kohdennettuina.
  • Seuraavaksi: lisätkää rajoitteita where-lauseella rajoittaaksenne T:tä tarvittaessa.

Merkinnän <T> merkitys

Pikatarkistus: Mitä <T> tarkoittaa geneerisessä funktiossa?

Kertaus

Kertaus: Määritelkää geneerisiä funktioita merkinnällä <T> ja luokaa geneerisiä tyyppejä, kuten Stack<Element>. Swift päättelee tyypit kutsuissa, joten koodi pysyy uudelleenkäytettävänä ja turvallisena.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Geneeriset funktiot ja tyypit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Geneeriset funktiot ja tyypit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Geneeriset funktiot ja tyypit”?

Kirjoittakaa geneerisiä funktioita ja tyyppejä tyyppiparametrien (esim. ) avulla. Näkekää, miten kääntäjä päättelee tyypit ja pitää koodin turvallisena ja uudelleenkäytettävänä. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.

Kuinka kauan ”Geneeriset funktiot ja tyypit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Geneeriset funktiot ja tyypit
  2. Rajoitteet (where) ja tyyppipäättely
  3. Geneeriset algoritmit kokoelmille
← Takaisin: Swift Academy