[Tutorial] Absolute beginner (no, really ABSOLUTE) tutorial: conditionele statements (if/else. etc)
#1

Naar aanleiding van de vele berichtjes in een topic in het discussieboard leek het me slim om alles, in een gepaste manier, duidelijk te maken. In deze tutorial zullen we de beginselen leren van het programmeren met de taal PAWN.

In deze tutorial zullen we de volgende drie onderwerpen behandelen:
  • if-statements
  • else-statements
  • switch-statements
IF-statements
Een IF (ALS, in het Nederlands)-statement is een stuk code wat uitvoert als, en allen ALS, de expressie in de ronde haken waar is. Enkele voorbeelden:
pawn Код:
if(true) // deze code zal altijd uitvoeren maar is wel een goede if-statement
if monkey == blue // deze code is fout: het bevat geen ronde haken
if(monkey = blue) // deze if-statement lijkt op het eerste gezicht goed, maar is het niet. Deze code zal altijd uitvoeren: 'blue' wordt aan 'monkey' TOEGEWEZEN!
if(monkey == blue) // correcte if-statement
if(value >= 0) // correcte if-statement
if(value >= 0 && value < 0) // onmogelijk, maar de if-statement is wel goed opgebouwd.
Zo ziet de opmaak van een if-statement eruit:
pawn Код:
if(/*expressie*/)
{
    // code hier
}
Zorg altijd dat je vishaken (brackets / curly braces) aan elkaar linken! Als je hem opent maar niet sluit, krijg je foutmeldingen in je IDE (Pawno, hoogstwaarschijnlijk).

Als beginnend programmeur is het altijd goed om haken te plaatsen. Dit is overzichtelijk en makkelijk te debuggen MITS je je code goed uitgelijnd hebt. De nieuwe pawno wil dat al (loose indentation) en daardoor hou je je overzicht over je code. Zoals John Woods zei:
Quote:
Originally Posted by John woods
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Ook al ben je het zelf die je code onderhoud. ALTIJD zorgen dat het leesbaar blijft!

Zoals gezegd wordt de code in de vishaken uitgevoerd alleen als de expressie waar is. Ik zeg het nogmaals, als de EXPRESSIE waar is. Dit kan verwarrend zijn, daarom licht ik het toe met een stuk code:
pawn Код:
if(blueMonkey == false)
{
    paintMonkey(blue);
}
De expressie leest: als 'blueMonkey' gelijk is aan 'false' (onwaar) dan voer volgende code uit (verf de aap blauw). Nu lijkt het alsof de statement FALSE is, maar niets is minder waar: als de blueMonkey inderdaad false is, dan is de expressie true! Dus wordt de code uitgevoerd. Als dit te ingewikkeld is: het wordt ooit nog wel duidelijk

Wat nu als we iets anders willen doen als blueMonkey true is? We kunnen een extra if-statement erin doen:
pawn Код:
if(blueMonkey == false)
{
    paintMonkey(blue);
}
if(blueMonkey == true)
{
    paintMonkey(red);
}
Dit lijkt echter zeer onoverzichtelijk en het is stom programmeren aangezien een boolean maar 2 waarden kan hebben: true of false.

ELSE statements
Er is hoop! Een hoop om te leren

ELSE-statements zijn ervoor om iets te doen als de IF-statement NIET waar is. Let op dat je de ELSE bij de goede haken plaatst en niet laat zweven zonder een if-statement. Deze twee horen bij elkaar, drijf ze alsjeblieft niet uit elkaar

Een else statement ziet er als volgt uit:
pawn Код:
[...]
else {
    // code
}
De IF-statement is hier weggelaten. Zoals je ziet draagt de else-statement geen parameters (of, een expressie) met zich mee. Dat komt omdat deze code hoe dan ook wordt uitgevoerd als de if (die wel een expressie heeft) wordt uitgevoerd. We kunnen onze vorige code nu makkelijk herschrijven als volgt:
pawn Код:
if(blueMonkey == false)
{
    paintMonkey(blue);
} else {
    paintMonkey(red);
}
Ziet er veel beter uit toch? Het is ook veel overzichtelijker. De bovenstaande code leest zich als:
Quote:

als blueMonkey gelijk is aan 'false', voer dan de methode paintMonkey() uit met parameter 'blue'. Anders voer de methode paintMonkey uit met parameter 'red'.

Wat nu eigenlijk als je meerdere else-statements wil. We halen er nu een stukje bij waarbij we de kleur ophalen van de aap (ik weet ook niet waarom nu weer een aap.. het kwam in me op). De methode die we gebruiken is 'getMonkeyColour()'.
pawn Код:
if(getMonkeyColour() == blue)
{
    // something
} else {
    // something
} // maar.. ik wil meer! Wat nu als hij rood, of paars, of geel.. of.... POLKADOT!
Daarvoor is er de:
ELSE IF statement
Klopt, die hebben we niet genoemd in het begin. een elseif statement is eigenlijk gewoon een extra ifstatement in een else:
pawn Код:
if(getMonkeyColour() == blue)
{

} else if(getMonkeyColour() == red)
{

} else {
// hij is niet blauw en niet rood
}
die elseif statements kun je natuurlijk zo lang maken als je zelf wilt. Deze zijn echter net als een IF-statement opgebouwd! Er moet dus een expressie tussen de ronde haken komen.

Met deze kennis kun je ook eenvoudig een switch statement opzetten, maar hierover zet ik meer in een volgende tutorial. Anders is het zo veel voor de eerste keer.

Hoofdstuk 2: Switch statements
Nu je een tijdje hebt gehad om gewend te raken met if en else statements is het nu tijd voor de switch-statement. Een switch statement is eigenlijk een grote verzameling van IF-IFELSE statements. Neem het volgende voorbeeld:
pawn Код:
if(randomNumber == 1) {}
else if(randomNumber == 2) {}
else if(randomNumber == 3) {} // et cetera
Dit ziet er niet overzichtelijk uit en is moeilijk om te beheren. De bovenstaande code kan je makkelijk vervangen door een switch-statement.

Een switch statement begin je met:
pawn Код:
switch(variabele)
De variabele is een nummer die je wilt controleren. Om het vorige voorbeeld er weer bij te pakken:
pawn Код:
switch(randomNumber)
{

}
Dit noemt men ook wel de 'body' van een switch-statement. Op dit moment kan je daar natuurlijk niets mee dus we gaan hem vullen met de if-elseif statements. Natuurlijk bedoelen we dit niet op deze manier:
pawn Код:
switch(randomNumber)
{
    if(randomNumber == 1) elseif(...);
}
Want dan zou het extra code kosten. We werken daarom met 'cases'. Ik beschrijf nu eerst 1 case:
pawn Код:
switch(randomNumber)
{
    case 1: { printf("OMG"); }
}
dit staat gelijk aan:
pawn Код:
if(randomNumber == 1) { printf("OMG"); }
Hanteer de bovenstaande notatie trouwens niet in jouw eigen projecten! Het is geen goede codeerstyle!

Om het hele verhaal nu even netjes af te maken met een volledige switch:
pawn Код:
switch(randomNumber)
{
    case 1: { printf("OMG"); }
    case 2: { printf("NOWAI"); }
    case 3: { printf("MONKEYBOY!"); } // dat zijn lekkere koekjes btw :D
}
Veel geluk!
Reply
#2

Goed hoor, maar waarom met apen lol.
Reply
#3

Quote:
Originally Posted by alpha500delta
Посмотреть сообщение
Goed hoor, maar waarom met apen lol.
Zoals ik heb aangegeven,, heb ook ik geen idee xD
Reply
#4

Duidelijk en goed uitgelegd Voor beginners is dit een goede tutorial!

Toch nog wel even zeggen (moest je het nog niet weten):

Код:
switch(randomNumber)
{
    case 1: { printf("OMG"); }
    case 2: { printf("NOWAI"); }
    case 3: { printf("MONKEYBOY!"); } // dat zijn lekkere koekjes btw :D
}
Kan ook gewoon zo hoor (zolang het maar 1 statement is):

Код:
switch(randomNumber)
{
    case 1: printf("OMG");
    case 2: printf("NOWAI");
    case 3: printf("MONKEYBOY!");
}
Reply
#5

Zeer duidelijk uitgelegd, bedankt!

-J
Reply
#6

Quote:
Originally Posted by Sinner
Посмотреть сообщение
Duidelijk en goed uitgelegd Voor beginners is dit een goede tutorial!

Toch nog wel even zeggen (moest je het nog niet weten):

Код:
switch(randomNumber)
{
    case 1: { printf("OMG"); }
    case 2: { printf("NOWAI"); }
    case 3: { printf("MONKEYBOY!"); } // dat zijn lekkere koekjes btw :D
}
Kan ook gewoon zo hoor (zolang het maar 1 statement is):

Код:
switch(randomNumber)
{
    case 1: printf("OMG");
    case 2: printf("NOWAI");
    case 3: printf("MONKEYBOY!");
}
het kan zelfs zo:

Код:
switch(randomNumber)
{
    case 1: printf("OMG"), printf("2STATMENTS? OMFGWTFFLULZBBQ");
    case 2: printf("NOWAI"), printf("heer agien?");
    case 3: printf("MONKEYBOY!"), printf("GUT2BKIDD'NMEH");
}
maar dat was beetje offtopic.

goeie tut, je moet alleen wel ff het verschil opmerken tussen elseif en else if.
elseif compiled niet (je hebt het wel in je tut staan: elseif)
Reply
#7

Quote:
Originally Posted by mamorunl
Посмотреть сообщение
pawn Код:
if(monkey = blue) // deze if-statement lijkt op het eerste gezicht goed, maar is het niet. Deze code zal altijd uitvoeren: 'blue' wordt aan 'monkey' TOEGEWEZEN!
Wat handig kan zijn in sommige gevallen. Doch, als je dit wil doen moet je altijd dubbele ronde haken gebruiken. De compiler zal anders een warning geven: Possibly unintended assignment (mogelijk onbedoelde toewijzing) omdat dit een vaak voorkomende fout is. Zelf gebruik ik vaak deze code:

pawn Код:
if((vehicleid = GetPlayerVehicleID(playerid)))
{
    SetVehiclePos(vehicleid, x, y, z);
    SetVehicleFacingAngle(vehicleid, a);
    // ...
}
else return SendClientMessage(playerid, color, message);
Reply
#8

tyvm legodude, ik heb het veranderd

Staat alleen erg lullig en er kan niet goed worden gezien wat er bedoeld wordt, Vince Aangezien dit een absolute beginner tutorial is,, lijkt me dit toch makkelijker
Reply
#9

pawn Код:
if(value >= 0 && value <= 0) // onmogelijk, maar de if-statement is wel goed opgebouwd.
pawn Код:
new value = 0;
Dus toch wel mogelijk ; o
hihi

maar
pawn Код:
if(value >= 0 && value < 0)
dan is die wel onmogelijk
Reply
#10

Nog even op reageren dan.

Quote:
Originally Posted by mamorunl
Посмотреть сообщение
pawn Код:
if monkey == blue // deze code is fout: het bevat geen ronde haken
Dit had ik ook nog maar recent ontdekt, maar als je dit doet werkt het wel:
pawn Код:
if monkey == blue *then // do stuff
Quote:
Originally Posted by Gamer_Z
Посмотреть сообщение
pawn Код:
if(value >= 0 && value < 0)
dan is die wel onmogelijk
Dat is in feite een check voor NaN (Not a Number). Kleine uitleg over NaN kan je wil vinden hier: http://nl.wikipedia.org/wiki/NaN, Maar ook in een van ******' topics. Edit: Hier http://forum.sa-mp.com/showthread.ph...ighlight=IsNaN
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)