Direct naar de hoofdinhoud
Module 1 · Les 3 van 53/50 in de cursus~10 min
Modulelessen (3/5)

Constanten en jota

Constanten zijn onveranderlijke waarden die bekend zijn tijdens het compileren. In Go zijn ze dat gedeclareerd met const en kan typed of untyped zijn. Ongetypeerde exemplaren hebben een superkracht: ze passen zich aan het type aan dat de context vereist, en sparen u zodat u geen expliciete conversies hoeft te schrijven.

Basissyntaxis

Go
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"

MaxRetry is getypt (int): je kunt het alleen toewijzen aan een int. PI en Name zijn niet getypt: ze gedragen zich als "letterlijk" en passen zich aan de context.

Go
const PI = 3.14

var f float32 = PI  // ok: PI è non tipata, diventa float32
var d float64 = PI  // ok

const blokken

U kunt meerdere constanten in een blok groeperen:

Go
const (
    StateInitial = "INIT"
    StateReady   = "READY"
    StateError   = "ERROR"
)

iota: de opsommingsteller

Binnen een const blok begint de speciale identificatie iota bij 0 en wordt op elke regel met 1 verhoogd. Het is het idioom voor het maken van opsommingen:

Go
const (
    Monday = iota // 0
    Tuesday       // 1
    Wednesday     // 2
    Thursday      // 3
    Friday        // 4
)

Volgende regels erven de expressie als ze er geen bieden. Daarom is het schrijven van Tuesday voldoende zonder = iota te herhalen.

Patronen met uitdrukkingen

iota kan verschijnen in willekeurige expressies:

Go
const (
    KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
    MB                          // 1 << 20
    GB                          // 1 << 30
    TB                          // 1 << 40
)

Een waarde overslaan

Als u geen waarde aan een regel wilt toekennen (omdat u iota wilt toch verhogen), gebruik dan de lege identificatie _:

Go
const (
    _  = iota // scarta 0
    KB        // 1
    MB        // 2
)

Jouw beurt

Oefening#go.m1.l3.e1
Pogingen: 0Laden…

Declareer een constante PI met waarde 3.14 op pakketniveau en druk deze vervolgens af in main.

Editor laden…
Toon hint

`const PI = 3.14` gaat op pakketniveau, buiten main.

Oplossing beschikbaar na 3 pogingen

Oefening#go.m1.l3.e2
Pogingen: 0Laden…

Definieer een const-blok met de dagen van de week (maandag, dinsdag, woensdag) genummerd vanaf 1 met iota.

Editor laden…
Toon hint

Gebruik `iota + 1` op de eerste regel van het blok; daaropvolgende regels nemen de expressie over.

Oplossing beschikbaar na 3 pogingen

Quiz#go.m1.l3.e3
Klaar

Wat print dit programma?

Go
const (
    A = iota * 2
    B
    C
)
fmt.Println(A, B, C)
Antwoordmogelijkheden

Samenvatten

  • const voor onveranderlijke waarden die bekend zijn tijdens het compileren.
  • Niet-getypeerde constanten passen zich aan de context aan: geen conversie nodig.
  • const ( ... ) blokkeert groepsgerelateerde waarden.
  • iota begint bij 0 in elk blok en wordt regel voor regel verhoogd.
  • Patronen: opsomming (= iota), bitmasker (= 1 << iota), eenheden (= 1 << (10*iota)).