Competentie: Ik kan methoden met een returnwaarde gebruiken.
Specifieke leerdoelen:
SaxionApp.readString()
en SaxionApp.readInt()
om de invoer in variabelen op te slaan.void
, en het is de keuze van de programmeur of een methode een waarde retourneert.void
-methode op te slaan of het gebruik van een onverenigbaar variabelentype.De opdrachten kunnen gevonden worden in de losse modulen.
In de vorige submodule heb je geleerd om variabelen aan te maken en te gebruiken. Nu gaan we de variabelen vullen met waardes die echt variabel zijn: input van de gebruiker en returnwaarde of return value van methodes.
Een methode kan naast een praktische uitwerking in een programma (bijv. iets laten zien op het scherm) ook gebruikt worden voor een deelresultaat zoals bijv. een berekening. De waarde die de methode teruggeeft is vaak afhankelijk van de argumenten die aan de methode worden meegegeven. Verder komt er natuurlijk invoer van de gebruiker. In de applicaties die jullie kennen kan dat input zijn via toetsenbord, muisklik of slepen over het scherm. In deze module werken we alleen met input die ingetypt wordt, input via het toetsenbord dus. Deze input zou weer als argument doorgegeven kunnen worden aan een methode, die er iets mee doet en weer een returnwaarde teruggeeft.
De SaxionApp heeft een aantal methodes waarmee input van de gebruiker wordt gevraagd. De cursor knippert en pas als de gebruiker ENTER
geeft, gaat het programma weer verder met de input die is gegeven.
Het meest overzichtelijke is om de input van de gebruiker meteen in een variabele te stoppen en er dan mee verder te werken. Je kunt zelfs de input vragen om de variabele te initialiseren, zoals je ziet gebeuren in onderstaande methodes van SaxionApp:
String name = SaxionApp.readString(); //Ask the user for a String and store the result
int value = SaxionApp.readInt(); //Ask the user for a whole number and store the result
Het verschilt per toepassing wat voor type input het programma nodig heeft. En het is zaak om input van de gebruiker te controleren hierop voor je verder gaat. Want zoals we bij de module over variabelen hebben gezien: je kunt geen string in een getal stoppen en je kunt ook niet rekenen met een character.
De SaxionApp is in staat om ongeldige invoer te controleren en een nette foutmelding te geven als er iets niet klopt. We noemen dit het “afvangen” van foutieve invoer.
De methodes uit het voorbeeld hierboven zullen niet toestaan dat er input wordt gegeven die niet past in de variabele. Als je bij de readInt
methode een woord invult zal je zien dat het systeem een foutmelding geeft, maar niet zal crashen. Het is goed om je te beseffen dat dit zorgvuldig geprogrammeerd is. Geniet ervan in deze module, later zul je het zelf moeten gaan regelen.
De returnwaarde van een methode heeft altijd een type, het returntype. Een programmeur die een methode maakt, kan ieder type kiezen uit alle types die in het programma bekend zijn. Maar er moet wel gekozen worden: een methode kan maar één returnwaarde geven.
Wat er precies wordt teruggegeven door een methode moet je opzoeken in de javadoc
van deze methode of je bekijkt het in de code van de methode zelf. Meestal kan je op basis van de methodenaam echter ook wel een voorspelling doen. Maar let op! Dit is niet gegarandeerd. Een programmeur kan een methode de naam “returnINT” geven en doodleuk een String teruggeven. Het loont het wel om het returntype te controleren.
Wij gebruiken methodes uit de SaxionApp. Bijvoorbeeld, de methoden getRandomValueBetween
en getWidth
leveren beiden een waarde van het type int op.
Een methode hoeft echter niet altijd een waarde op te leveren. In dit geval zeggen we dat het type van de terugkeerwaarde void is (void betekent leegte in het Engels).
De methode pause
levert bijvoorbeeld niets op en dit wordt aangeduid met het woordje void
.
Of een methode iets moet gaan opleveren of niet, is de keuze van de programmeur. Met ervaring zal je hier leren keuzes in gaan maken.
Net als de user input wil je een returnwaarde vrijwel altijd opslaan in een variabele. En net als bij userinput kun je dit soms prima combineren met de intialisatie van een variabele, zoals hieronder gebeurt:
int width = SaxionApp.getWidth(); // Declare a variable called with and initialize with the return value of getWidth()
Als je probeert de returnwaarde van een methode die niets teruggeeft (void
) op te slaan, zal je een foutmelding krijgen.
Hetzelfde gaat op voor het gebruik van een verkeerd type. Als een methode een double waarde teruggeeft, kan je deze niet zomaar in een integer variabele opslaan. Je zal hier iets mee moeten doen voordat dit kan (bijv. typecasten).
Tenslotte is het mogelijk om returnwaardes gelijk te gebruiken zonder deze in een variabele op te slaan. In de code hieronder wordt de returnwaarde direct geprint op scherm.
SaxionApp.printLine(SaxionApp.readString()); //Ask the user for a string and directly print it on screen, without storing it
Dit kan, maar het gaat wel ten koste van leesbaarheid van de code. En na dit statement is de returnwaarde weg en kan niet meer gebruikt worden.