Struktūrinis programavimas
Pamoka 3 / 11 Funkcijos ~40 min
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.