← Go/De eerste bouwstenen
Les 8 van 8
MODULE 01 · 08◷ 28 min

Combineer de bouwstenen in een voorraadbericht

Na deze les kun je
  • Tekstbewerking, berekeningen en een bool in een klein programma combineren.
  • Tussenresultaten betekenisvolle namen geven en de volgorde van de berekening uitleggen.

Voor een buurtactiviteit tel je materialen, houd je reserveringen apart en plan je een levering. Je wilt daar een klein voorraadbericht van maken dat een collega direct kan lezen. Deze les combineert de bouwstenen die je al hebt gebruikt; er komt geen nieuwe besturingsvorm bij.

Begin met wat de aantallen betekenen

Een berekening is pas bruikbaar als duidelijk is welke vraag zij beantwoordt. stock is hier de huidige fysieke voorraad en reserved is het deel dat al aan iemand is toegezegd. De vrije voorraad is daarom stock - reserved.

Een geplande levering staat nog niet tussen de huidige spullen. Wil je de beschikbare voorraad na die levering weten, tel je delivery bij de vrije voorraad op. Bewaar de huidige en de toekomstige uitkomst apart, zodat een lezer ze niet met elkaar verwart.

NaamAfspraak in dit programma
stockAlle spullen die nu aanwezig zijn.
reservedHet al toegezegde deel van die voorraad.
availableWat nu nog vrij beschikbaar is.
afterDeliveryVrije voorraad na de geplande levering.

Een bericht met tussenstappen

Een voorraadbericht in duidelijke stappen
package main

import (
	"fmt"
	"strings"
)

func main() {
	material := "  Doeken  "
	stock := 12
	reserved := 4
	delivery := 3
	capacity := 5
	available := stock - reserved
	afterDelivery := available + delivery
	crates := (afterDelivery + capacity - 1) / capacity
	fmt.Printf("Materiaal: %s\n", strings.TrimSpace(material))
	fmt.Printf("Nu vrij: %d\n", available)
	fmt.Printf("Na levering: %d\n", afterDelivery)
	fmt.Printf("Kratten: %d\n", crates)
}
Verwachte uitvoer
Materiaal: Doeken
Nu vrij: 8
Na levering: 11
Kratten: 3

Het voorbeeld maakt eerst een leesbare materiaalnaam met TrimSpace. Daarna berekent het de vrije voorraad en telt de levering daarbij op. Pas als die waarden klaarstaan, worden ze in het bericht gebruikt.

De naam available geeft het resultaat een betekenis. Wie de volgende regel leest, hoeft niet opnieuw uit te zoeken waarom er twee getallen worden afgetrokken. Goede namen verminderen zo het werk dat een lezer in het hoofd moet doen.

Werk van invoer naar uitvoer

In dit kleine programma kun je drie gedeelten herkennen: beginwaarden, berekeningen en uitvoer. Go voert de instructies in main hier van boven naar beneden uit. Een tussenresultaat moet dus bekend zijn voordat een volgende regel het gebruikt.

Dat vraagt geen ingewikkeld ontwerp. Zet bijvoorbeeld eerst available := stock - reserved en daarna afterDelivery := available + delivery. De tweede regel laat meteen zien dat de levering bij het vrije deel hoort, en niet bij alles wat fysiek aanwezig is.

Verpakken en een grens controleren

De spullen gaan in kratten met een positieve vaste capaciteit. Gebruik de berekening uit de rekenles om het aantal benodigde kratten te bepalen. Ook een onvolledige laatste krat moet meegeteld worden.

Met afterDelivery % capacity == 0 vraag je daarnaast of alle spullen precies in volle kratten passen. Het antwoord is een bool. Nul als rest betekent hier dat er geen gedeeltelijk gevulde krat overblijft.

Dit antwoord staat los van het totale aantal kratten. Zowel één als vier volle kratten kunnen een rest van nul hebben. Toon daarom de gevraagde waarden afzonderlijk, zodat de collega zowel de hoeveelheid als de verdeling kan zien.

Veelgemaakte fout: reserveringen vergeten

Fysieke voorraad is niet hetzelfde als vrije voorraad
package main

import (
	"fmt"
	"strings"
)

func main() {
	material := "  Doeken  "
	stock := 12
	reserved := 4
	delivery := 3
	fmt.Println(strings.TrimSpace(material))
	fmt.Println(stock + delivery)
	fmt.Println(stock - reserved + delivery)
}
Verwachte uitvoer
Doeken
15
11

De foutvariant telt de levering bij de hele fysieke voorraad op. Het resultaat is groter dan wat je werkelijk aan nieuwe aanvragen kunt toezeggen. Het programma compileert wel, want optellen is geldig; de betekenis van de gebruikte aantallen klopt niet.

Controleer een berekening daarom ook met een klein voorbeeld op papier. Als twaalf spullen aanwezig zijn en vier al beloofd zijn, zijn er nu acht vrij. Een levering van drie maakt daarvan elf, niet vijftien.

Maak het bericht voor kabels

De oefening bevat 37 kabels, twaalf reserveringen, een levering van zes en acht plekken per krat. Ruim de materiaalnaam op, bereken de huidige vrije voorraad en gebruik de toekomstige vrije voorraad voor het kratplan. Toon het bericht in de vier gevraagde regels.

Deze gegevens voldoen aan onze aannames: aantallen zijn niet-negatief, reserveringen passen binnen de voorraad en de capaciteit is positief. In de volgende module leer je die voorwaarden met if en andere keuzes bewaken. Nu richt je je op de samenhang van de berekeningen.

AAN DE SLAG 0/4
1

Een duidelijke titel

Toon op de eerste regel Voorraad: Kabels, met de met TrimSpace opgeruimde material.

2

Wat nu vrij is

Toon op de tweede regel het aantal kabels dat nu nog niet gereserveerd is. Druk alleen het getal af.

3

Kratten na levering

Toon op de derde regel het totale aantal kratten voor de vrije kabels na levering. Reken ook een onvolledige laatste krat mee.

4

Past alles precies

Toon op de vierde regel of de toekomstige vrije voorraad exact in volle kratten past.

Samenvatting

  • Geef een tussenresultaat een naam die zijn betekenis uitlegt.
  • Houd huidige vrije voorraad en een toekomstige levering uit elkaar.
  • Combineer bekende tekst-, reken- en boolbewerkingen stap voor stap.

Hierna gebruik je voorwaarden om alleen de passende instructies uit te voeren.

main.go
UitvoerConsole
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.