Precies genoeg
Toon op de eerste regel of remaining minstens requested is. Een groep die precies past is toegestaan.
Een bibliotheek reserveert een plek voor een activiteit. Genoeg vrije stoelen is één voorwaarde, maar de zaal moet ook open zijn en de bezoeker mag niet geblokkeerd zijn. Voordat een programma een keuze maakt, moet het zulke vragen kunnen beantwoorden.
Het type bool bevat precies twee waarden: true en false. In gewone taal betekenen die waar en onwaar. Je kunt zo'n waarde in een variabele bewaren en met Println bekijken, net zoals je eerder een getal of tekst toonde.
Schrijf true en false zonder aanhalingstekens. De string "false" is tekst die toevallig een woord bevat. Een bool met de waarde false is het antwoord op een vraag en kan later een keuze in je programma sturen.
Een vergelijking berekent zo'n antwoord. remaining >= requested vraagt of het aantal vrije plaatsen minstens het gevraagde aantal is. De uitkomst is een bool; de twee getalvariabelen veranderen niet.
| Teken | Vraag |
|---|---|
| == | Zijn de waarden gelijk? |
| != | Zijn de waarden verschillend? |
| < en > | Is de linkerwaarde kleiner of groter? |
| <= en >= | Is zij kleiner of gelijk, of groter of gelijk? |
package main
import "fmt"
func main() {
remaining := 12
requested := 12
isOpen := true
blocked := false
fmt.Println(remaining >= requested)
fmt.Println(remaining > requested)
fmt.Println(isOpen && !blocked)
}true false true
Er zijn precies twaalf plaatsen vrij en de groep vraagt twaalf plaatsen. De eerste vergelijking zegt true, want gelijk aan twaalf is voldoende. De tweede zegt false, want twaalf is niet groter dan twaalf.
Het verschil van één teken verandert dus de betekenis van de afspraak. Reken daarom niet alleen met een ruim overschot. Een geval precies op de grens maakt zichtbaar of gelijkheid wel of niet mag.
Met && combineer je twee bool-waarden als en. isOpen && hasSpace is alleen true als beide voorwaarden true zijn. Eén onwaar deel maakt het hele antwoord false.
Met || schrijf je of: minstens één van beide antwoorden moet true zijn. Bijvoorbeeld hasTicket || isGuest laat beide mogelijkheden toe. De uitkomst blijft ook true als beide delen tegelijk true zijn.
Het teken ! betekent niet en keert een bool om. Als blocked false is, levert !blocked true op. isOpen && !blocked leest daardoor als de zaal is open en de bezoeker is niet geblokkeerd.
Haakjes kunnen een combinatie verduidelijken. Schrijf bijvoorbeeld isOpen && (hasTicket || isGuest) als je wilt dat open zijn voor beide toegangsmogelijkheden verplicht is. Zonder die groepering kan een andere leesvolgorde een andere regel uitdrukken.
package main
import "fmt"
func main() {
remaining := 12
requested := 12
fmt.Println(remaining > requested)
fmt.Println(remaining >= requested)
}false true
De verkeerde vergelijking gebruikt > en weigert de groep die precies past. Het programma compileert en toont een geldige bool, maar die bool beantwoordt de verkeerde vraag. De juiste operator kiezen is dus onderdeel van het gedrag, niet alleen van de schrijfwijze.
Verwar ook == niet met =. Met = geef je een bestaande variabele een waarde; met == stel je een gelijkheidsvraag. In deze les bekijk je de antwoorden alleen; in de volgende module leer je instructies afhankelijk van dat antwoord uitvoeren.
De oefening heeft vijf vrije plaatsen, een aanvraag voor vijf plaatsen, een open zaal en een niet-geblokkeerde bezoeker. Toon eerst of de groep past, daarna of de open- en blokkeerregel klopt. Bekijk vervolgens of er strikt meer plekken nodig zijn dan beschikbaar en of de statustekst gelijk is aan READY.
Toon op de eerste regel of remaining minstens requested is. Een groep die precies past is toegestaan.
Toon op de tweede regel of isOpen waar is en blocked onwaar is.
Toon op de derde regel of requested strikt groter is dan remaining.
Toon op de vierde regel of status gelijk is aan de tekst READY.
De volgende les gebruikt tekstbewerkingen om ingevoerde namen op te ruimen.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.