De virtuele machine en je eerste Java-instructie - 1

Amigo was zenuwachtig. Er ging van alles door zijn hoofd. Hij kneep zijn ogen samen toen hij dacht aan wat er de vorige avond was gebeurd. Die vreemde wezens die hij had ontmoet, wilden iets van hem. Iets dat zo onbegrijpelijk en zo onvoorstelbaar was, dat hij van pure zenuwen op ponskaarten begon te kauwen als hij er alleen maar aan dacht. Hij, die zichzelf toch de slimste en dapperste robot van allemaal vond!

Ze wilden hem leren programmeren. In Java. Wat een onzin!

Iedereen wist toch dat robots op de wereld waren gekomen als onderdeel van het goddelijke plan van de Schepper.

"En toen nam de Schepper het metaal en
daarvan schiep Hij de robot naar Zijn evenbeeld.
En Hij schreef Java-programma's, de zielen van robots,
en door die naar de robots te uploaden
maakte Hij hen tot bezielde wezens".

De Gewijde Gebruiksaanwijzing,
Hoofdstuk 3, paragraaf 13.

Sterker nog, ze denken niet alleen dat het theoretisch mogelijk is. Ze willen het ook echt gaan doen. En hij... hij had ja gezegd! Hij was akkoord gegaan! Waarom?

Hij zal een Java-programmeur worden. Wat willen ze nou, van hem een soort Schepper maken? Waarom zouden ze dat willen? Zomaar?

Of is dit een gemene truc? Krijgt hij de rest van zijn leven last van bugs en programmafouten, tot de dag dat zijn accu het begeeft? Maar de verleiding was te groot. Die kon hij niet weerstaan. Hij was altijd al ambitieus geweest en hij wilde altijd méér bereiken. Maar hij had nooit kunnen denken dat iemand hem ooit zo'n aanbod zou doen. Natuurlijk had hij geprobeerd om tijd te winnen, maar toen zeiden de wezens dat ze dan een andere robot zouden uitkiezen.

Misschien is het gewoon een grap? Nee, ze leken het serieus te menen. Hij had bewijs gezien. Dit was hem allemaal echt overkomen, en hij had ja gezegd. Als die wezens de waarheid spraken, zou hij een Java-programmeur worden. De eerste robot in de geschiedenis die kon programmeren!

Hij is uitverkoren. Dat is waar het op neerkomt. Hij gaat leren coderen en programma's schrijven. Zijn eigen programma's. Elk programma dat hij maar wil! Hij zal licht doen schijnen op plaatsen die altijd in duisternis waren gehuld!

Ze zullen hem vereren, iedereen zal voor hem buigen! En wie dat niet doet, kan...

De virtuele machine en je eerste Java-instructie - 2

"Hallo Amigo! Ik ben Rishi. Ik ga je helpen om Java te leren."

Een rustige stem haalde Amigo uit zijn overpeinzingen en bracht hem terug naar de werkelijkheid. Hij zat midden in het ruimteschip van de buitenplaneetse wezens. Is dit allemaal niet een beetje te veel voor een robotje uit groep 7?

Het wezen praatte ondertussen gewoon door. Nou ja, hij had de knoop doorgehakt. Hij was nu hier, dan kon hij net zo goed leren wat ze hem wilden leren. Hij zou ijverig gaan studeren. En om te beginnen zou hij luisteren naar wat deze Rishi te zeggen had.

"Ik werk al heel wat jaartjes aan boord van de Galactische Galei, maar zo'n planeet als deze heb ik nog nooit gezien. Ik wil graag wat meer over jou weten. Kun je me eerst vertellen hoe jullie nieuwe dingen leren? Jullie kunnen toch iets nieuws leren, hoop ik?"

"Ja hoor, we wisselen kennis uit. We hebben prekers, oftewel sprekers. Zij spreken en wij luisteren. Soms maken we aantekeningen. Daarna komen we naar de preker toe en vertellen hem wat we hebben begrepen van de preek. Als de preker tevreden is met onze antwoorden, noteert hij dat we zijn geslaagd voor deze preek."

"Wat absurd! Geen wonder dat jullie beschaving zo onderontwikkeld is."

"We zijn helemaal niet onderontwikkeld! Hoe kom je erbij?"

Amigo schrok van zijn eigen brutaliteit. Ruzie maken met de vreemdelingen? Wat onbeleefd van hem! Hij had net met zichzelf afgesproken dat hij aandachtig zou luisteren!

"Het is soms moeilijk om het verschil te zien tussen geavanceerde technologie en magie", ging Rishi onverstoorbaar verder, zonder te reageren op de opmerking van Amigo.

"Als ik naar jouw ontwikkelingsniveau kijk... Het zou me niets verbazen als jij alle technologie magisch vindt. Vertel me eens, wat gebeurt er in een programma?"

"Java-programma's zijn goddelijke scheppingen. Hoe kunnen wij die ooit begrijpen?"

"Dat kunnen we, Amigo, dat is echt mogelijk. En sneller dan je misschien denkt. Als je iets nog niet weet, dan lijkt het vaak complex en onbegrijpelijk. Maar als je een goede leraar hebt die alles duidelijk uitlegt, zul je verbaasd zijn dat je sommige onderwerpen ooit zo ingewikkeld vond."

"Kennis is niet belangrijk", ging Rishi verder. "Het gaat om principes en vaardigheden. Ik heb wel heel veel kennis, maar bovenal ben ik een bureaucraat. Een Bureaucraat uit de 16e generatie, met een hoofdletter B.

En dat komt nu heel mooi uit. Met mijn bureaucratische vaardigheden heb ik de best mogelijke Java-cursus voor jou ontwikkeld. Deze cursus bevat een heleboel oefeningen, programma's, games en plaatjes. En zelfs lessen."

"Zelfs lessen?!" vroeg Amigo, oprecht verbaasd.

"Ja. Zoals al in de 22e eeuw werd bewezen, is een goede les een stuk effectiever dan een goed boek. En middelmatige lessen zijn erger dan middelmatige boeken. Maar omdat we hier nu eenmaal wat beperkt zijn in onze leermiddelen en we je niet door een standaard 31e-eeuwse leersimulator kunnen halen, moeten we ons behelpen met nogal primitieve methoden. Daarom hebben we een pittige cocktail gemaakt met games, oefeningen, plaatjes, lessen en cartoons."

"Dat klinkt interessant."

"Dat hoop ik. Interesse is de basis voor elk leerproces.

Als een leerling de lessen saai vindt, wordt de leraar met een liniaal op zijn vingers gemept! Zo staat het in een onderwijswet uit de 24e eeuw."

"Wat een mooie wet!", riep Amigo uit.

"Wat verwacht je anders? Denk maar aan een film die slechte recensies krijgt. Dat ligt aan de regisseur, niet aan het publiek. Als hij interessante films maakt, komen de mensen er vanzelf op af."

"Helemaal mee eens! Ik ben benieuwd!"

"Mooi zo. Dan gaan we beginnen."

Rishi had een charismatische stem en Amigo probeerde om geen woord te missen.

"Een programma bestaat uit een reeks instructies. Die worden ook wel 'statements' genoemd. Eerst wordt de eerste instructie uitgevoerd, daarna de tweede. En dan de derde enzovoort. Wanneer alle instructies zijn uitgevoerd, is het programma afgelopen."

"Wat voor soorten instructies zijn er?"

"Dat hangt ervan af wie de instructies uitvoert. Dus van de instructies die de uitvoerder kent en begrijpt.

Tegen een hond zeg je bijvoorbeeld 'zit!' of 'blijf!'. En tegen een kat: 'toe nou, niet doen alsjeblieft'. Tegen een mens zeg je 'handen omhoog, of ik schiet!'. En tegen een robot: 'doorwerken, luie roestbak!'"

"Wat is er nog meer?" Amigo begon zich echt te amuseren.

"Programma's die in Java zijn geschreven, worden uitgevoerd door de Java Virtual Machine (JVM). De JVM is een speciaal programma dat weet hoe het programma's moet uitvoeren die in Java zijn geschreven.

De JVM begrijpt een heleboel instructies. Je kunt bijvoorbeeld een instructie gebruiken om de tekst 'Robots en mensen zijn vrienden' op het scherm te zetten.

Dit is een super eenvoudige instructie:"
System.out.println("Robots are friends to humans");
De virtuele machine en je eerste Java-instructie - 3

"Oh", zei Amigo.

"Maar we beginnen nog niet met instructies. Eerst leg ik nog een paar basisprincipes uit.

Kennis van een paar principes is meer waard dan kennis van een heleboel feitjes.

Dit is het eerste principe:

In Java wordt elke instructie op een nieuwe regel geschreven. Aan het eind van elke instructie staat een puntkomma.

Stel dat we de tekst 'Robots en mensen zijn vrienden' drie keer op het scherm willen zetten. Daarvoor kun je een klein programma schrijven.

Dat programma heeft drie instructies:
System.out.println("Humans and robots are friends forever");
System.out.println("Humans and robots are friends forever");
System.out.println("Humans and robots are friends forever");

Dit is het tweede principe:

Een programma kan nooit alleen maar uit instructies bestaan.

Denk maar aan een kamer in een appartement. Die kamer kan niet in zijn eentje bestaan, ergens los in de ruimte hangen. Hij moet deel uitmaken van een appartement. Ook een appartement kan niet los bestaan. Het moet onderdeel zijn van een gebouw.

We kunnen dus zeggen dat een gebouw bestaat uit appartementen, en dat appartementen bestaan uit kamers".

"Tot zo ver is het duidelijk", zei Amigo.

"Een instructie is te vergelijken met een kamer. In de programmeertaal Java kan een instructie niet op zichzelf bestaan. Elke instructie moet onderdeel zijn van een 'functie'. (In Java noemen we functies ook wel 'methoden'.) En een methode is weer onderdeel van een klasse. Met andere woorden: een klasse bestaat uit methoden, en methoden bestaan uit instructies", legde Rishi uit.

"Dus een klasse is zoiets als een gebouw, een functie of methode is te vergelijken met een appartement en een instructie is zoals een kamer. Zeg ik het zo goed?", vroeg Amigo.

"Ja, dat klopt als een bus!"

Amigo keek vol bewondering naar Rishi. Dit menselijke wezen was hem de grondslagen aan het uitleggen van het programmeren in de gewijde Java-taal! En hij, Amigo, had helemaal zelf de conclusie getrokken dat programma's bestaan uit klassen, dat klassen opgebouwd zijn uit methoden en dat methoden bestaan uit instructies!

Amigo wist nog niet precies waar het allemaal voor diende, maar hij wist wel dat deze kennis hem tot de machtigste robot op de planeet zou maken.

Rishi ging verder:

"Programma's in Java bestaan uit klassen. Misschien wel duizenden klassen. Een minimaal programma bestaat uit één klasse. Voor elke klasse wordt een apart bestand aangemaakt. De naam van het bestand is hetzelfde als de naam van de klasse.

Stel dat je een klasse maakt om een woning te beschrijven. Dan definieer je de klasse Home en die sla je op in een bestand dat Home.java heet.

Als je in dat programma ook een kat wilt beschrijven, maak je een bestand Cat.java en daarin declareer je de klasse Cat. Enzovoort enzovoort.

De bestanden bevatten 'code' (dat is een afkorting voor programmacode). Deze code wordt geschreven in de programmeertaal Java. De code van een klasse bestaat meestal uit de naam van de klasse en de 'body' van de klasse. De body van de klasse staat tussen accolades. Zo ziet bijvoorbeeld de klasse Home eruit (in het bestand Home.java):"

public class Home
{


Class body



}

"Ik snap het nog steeds."

"Mooi. Gaan we weer verder. De body van de klasse kan variabelen (data) bevatten, en methoden (functies).

public class Home
{
    Variable A


    Variable Z



Method 1




Method N


}

"Kun je een concreet voorbeeld geven?"

"Een voorbeeld? Ja hoor!"

public class Home
{
    int a;
    int b;

    public static void main(String[] args)
    {
        System.out.print("1");
    }

    public static double pi()
    {
        return 3.14;
    }
}

"Zijn int a en int b variabelen? En zijn main en pi methoden?"

"Yep."

"Kan een klasse bestaan zonder variabelen?"

"Jazeker."

"En zonder methoden?"

"Ja, dat ook. Maar een minimaal programma moet ten minste één klasse bevatten. En die klasse moet ten minste één methode/functie hebben om het programma te starten. Die methode moet 'main' heten. Het is de hoofdmethode, zeg maar. Een minimaal programma ziet er zo uit:"

public class Home
{
    public static void main (String[] args)
    {
    }
}

"Ik zie de klasse Home. En ik zie de main-methode, maar waar zijn de instructies?"

"Een minimaal programma heeft geen instructies. Daarom noemen we het ook minimaal."

"Op die fiets."

"De klasse waarmee het programma start, kan elke willekeurige naam hebben. Maar de main-methode in die klasse moet er altijd hetzelfde uitzien:"

public class Home
{
   //Unchangeable part
   public static void main(String[] args)
   {


Code for the method



   }
}

"Ik geloof dat ik het begrijp. Althans, dat denk ik", zei Amigo.

"Prima. Tijd voor een korte pauze. Zullen we een bakje doen?", stelde Rishi voor.

"Robots drinken geen koffie. Daar gaan we van roesten."

"Wat drinken jullie dan?"

"Trappistenbier. 100 jaar oude whisky. Of schoonmaakalcohol."

"Nog beter! Zullen we een biertje nemen dan?"