3 / 4 📖 Teorija
Keli grąžinimai ir kopijos spąstai
Dvi savybės, kurių prireiks nuolat.
Keli grąžinimai. Go funkcija gali grąžinti kelias reikšmes iš karto — dažniausiai rezultatą ir požymį „ar pavyko":
func pagesPerDay(pages int, days int) (int, bool) {
if days == 0 {
return 0, false // cannot divide by zero
}
return pages / days, true
}
perDay, ok := pagesPerDay(380, 10)
if ok {
fmt.Println("Per day:", perDay)
}
Šitą (reikšmė, ok) porą sutiksi visur — 10 pamokoje ji taps (reikšmė, klaida).
Kopijos spąstai. Go visada perduoda kopiją (pass by value). Funkcija gauna parametro dublikatą, ne originalą:
func markRead(read bool) {
read = true // changes only the local COPY
}
read := false
markRead(read)
fmt.Println(read) // false — the original never changed!
Spąstai. Dažniausia pradedančiųjų klaida su funkcijomis: funkcija „pakeičia" reikšmę, o kviečiančiojo kintamasis lieka koks buvęs — nes keitei kopiją. Kol kas taisyklė paprasta: jei funkcija turi kažką pakeisti, tegul grąžina naują reikšmę. Tikras įrankis keisti originalą — rodyklės — tavęs laukia 11 pamokoje.