← Go/De eerste bouwstenen
Les 3 van 8
MODULE 01 · 03◷ 16 min

Maak tekst persoonlijk

Na deze les kun je
  • Een waarde in tekst invoegen
  • Tekst en een berekening combineren

Een reserveringsbericht is duidelijker als het de bestemming en het aantal plaatsen noemt. Je wilt dezelfde zin voor verschillende gegevens kunnen gebruiken, zonder telkens de hele boodschap over te typen. Met een vaste tekstvorm en losse waarden kun je dat overzichtelijk opschrijven.

Een tekstvorm met invulplaatsen

Met Printf geef je eerst aan hoe de uitvoer eruit moet zien en daarna welke waarden ingevuld worden. Die eerste string heet de formaattekst. Anders dan Println plaatst Printf niet vanzelf een nieuwe regel achter de uitvoer.

Een formaatcode is een invulplaats in de tekst. %s is hier bedoeld voor een string en %d voor een geheel getal. De letter achter het procentteken helpt Go kiezen hoe het de bijbehorende waarde moet tonen.

Na de formaattekst volgen komma's en de waarden. Die waarden heten de argumenten van de aanroep. De eerste invulplaats gebruikt het eerste argument na de tekst; de tweede invulplaats gebruikt het volgende.

In de codeBetekenis in dit voorbeeld
%sVoeg hier de bestemming als tekst in.
%dVoeg hier het aantal als geheel getal in.
\nBegin hier een nieuwe uitvoerregel.

\n is een escape-reeks: twee geschreven tekens die samen één speciaal teken voorstellen. In een gewone string tussen dubbele aanhalingstekens betekent deze reeks een nieuwe regel. Je ziet dus niet letterlijk een backslash en een n in het resultaat.

Een reservering samenvatten

Het voorbeeld gebruikt dezelfde getalvariabele voor het gereserveerde aantal en voor een berekening. Bekijk eerst welke waarde bij welke invulplaats hoort en druk daarna op Voorbeeld uitvoeren.

Een bericht voor de reiziger
package main

import "fmt"

func main() {
	destination := "Utrecht"
	seats := 3
	fmt.Printf("Naar %s: %d plaatsen.\n", destination, seats)
	fmt.Printf("Met twee extra: %d plaatsen.\n", seats + 2)
}
Verwachte uitvoer
Naar Utrecht: 3 plaatsen.
Met twee extra: 5 plaatsen.

Bij de eerste aanroep komt destination op de plaats van %s en seats op die van %d. De komma's tussen de argumenten worden niet afgedrukt. Alleen de leestekens en spaties in de formaattekst bepalen hier hoe de zin eruitziet.

Bij de tweede aanroep wordt seats + 2 eerst uitgerekend. Het resultaat gaat vervolgens naar %d. Net als in de vorige les verandert die berekening de oorspronkelijke variabele niet.

Veelgemaakte fout: de nieuwe regel vergeten

Twee aanroepen op twee regels broncode betekenen bij Printf niet automatisch twee uitvoerregels. In deze variant ontbreekt de afsluitende \n van het eerste bericht. Voer het programma uit en kijk waar het tweede bericht begint.

Veelgemaakte fout
package main

import "fmt"

func main() {
	destination := "Utrecht"
	seats := 3
	fmt.Printf("Naar %s: %d plaatsen.", destination, seats)
	fmt.Printf("Met twee extra: %d plaatsen.\n", seats + 2)
}
Verwachte uitvoer
Naar Utrecht: 3 plaatsen.Met twee extra: 5 plaatsen.

De berichten plakken aan elkaar, omdat de tweede aanroep doorgaat waar de eerste ophield. Voeg de nieuwe regel toe binnen de eerste formaattekst, op de plek waar het eerste bericht moet eindigen. Een lege regel tussen de aanroepen in je bronbestand verandert de uitvoer niet.

Van losse waarden naar een duidelijke zin

In de oefening staan de tekst name en het getal lessons al klaar. Gebruik ze om de begroeting en het nummer van de volgende les te maken. Kies bij iedere invulplaats de code die bij de soort waarde hoort.

Lees een aanroep in drie stappen: eerst de vaste tekst, dan de invulplaatsen en ten slotte de argumenten in dezelfde volgorde. Controleer ook de spatie na een komma of dubbele punt en het teken waarmee de zin eindigt. Die details zijn onderdeel van de gevraagde boodschap.

Een getal tussen aanhalingstekens is tekst en heeft hier dus een andere rol dan het gehele getal uit lessons. Houd de berekening buiten de formaattekst, net zoals in het reserveringsvoorbeeld. Dan kun je de gegevens later aanpassen zonder de zin opnieuw te schrijven.

AAN DE SLAG 0/2
1

De eerste stap

Gebruik name om de begroeting Welkom, Sam! op de eerste regel te tonen.

2

Nog een stap verder

Gebruik lessons om Volgende les: 5 op de tweede regel te tonen. Tel er eerst één bij op.

Wat je meeneemt

  • Printf combineert een vaste formaattekst met argumenten in volgorde.
  • %s toont hier tekst en %d een geheel getal.
  • Met \n bepaal je zelf waar een nieuwe uitvoerregel begint.

Je kunt nu waarden in een duidelijke tekstvorm tonen. De volgende les gebruikt gehele deling en resten om complete groepen en overgebleven spullen te berekenen.

main.go
UitvoerConsole
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/2 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.