#Klooienmetcomputers

Go with the flow

Arnout van Kempen over rommelen in een digitale wereld.

Rust is net als C behoorlijk vormvrij. Spaties worden genegeerd, je kan lege regels toevoegen waar je wilt, etcetera. Toch zijn er wel wat afspraken waar 'men' zich aan houdt. Bijvoorbeeld waar de {} komen te staan om een codeblock aan te geven, of hoe je inspringt (niet met tab, maar met 4 spaties). Als je nu geen zin hebt daar heel goed op te letten, maar je wilt toch graag code schrijven die 'men' prettig leesbaar vindt, dan heeft Rust daar een handige tool voor: rustfmt.

Dat werkt buitengewoon simpel. Stel, je hebt met cargo new test een projectje test gemaakt, dan staat in test/src/main.rs je code. Als je die in de standaard Rust opmaak wilt zetten, dan doe je simpelweg:

cd test/src
rustfmt main.rs

En dat is alles. Je code is exact hetzelfde gebleven, maar de opmaak is gestandaardiseerd.

Om de zaak nog wat leesbaarder te maken, voeg je natuurlijk commentaar toe. Dat werkt exact hetzelfde als in C. Dus // voor een regel commentaar en /*   */ voor een blok commentaar.

Maar dat is allemaal voor de leesbaarheid, nu wat inhoud: flow control. Zoals iedere taal, heeft ook Rust de twee noodzakelijke elementen: keuzes en herhalingen. Keuzes in Rust werken vooral met if.

De werking is vergelijkbaar met C, met een opvallende uitzondering: if is een expressie, en levert dus een resultaat. Dit kan je gebruiken, zoals je in C met de ? operator kan werken.

Dus dit is goed Rust:

if a==b {
    codeblock;
} else {
    codeblock;
}

 Rust is hier wel iets stricter van C: de voorwaarde moet een boolean zijn. Je kan dus niet, zoals in C, zoiets zeggen als if 3 {…

Verder mag je na een else gewoon weer een nieuwe if plaatsen, en zo in een soort meervoudige if-structuur verschillende opties aflopen.

Waar je in C schreef:  a = voorwaarde ? b : c; schrijf je in Rust:

let a = if voorwaarde { b } else { c };

Je maakt hier gebruik van het feit dat if een expressie is, en een codeblock dat eindigt met een waarde zonder ; ook. Let wel op, a, b en c moeten hetzelfde type hebben!

Herhalingen doet Rust met loop, while en for. De eerste twee werken redelijk voor de hand liggend. De eerste herhaalt onbeperkt, de tweede zolang aan een voorwaarde wordt voldaan. Je kan een loop verlaten met break, dat meteen een waarde kan meegeven aan loop. Net als if is loop dus ook weer een expressie. Dus

loop {
    codeblock;
}

zal het codeblock oneindig herhalen, terwijl

let a = loop {
    i += 1;
    if i == 5 {
        break i;
    }
}

zal eindigen met a == 5.

Binnen een loop, while of for, kan je naast break om het codeblock te verlaten, ook continue gebruiken om direct aan de volgende herhaling te beginnen. Beide commando’s hebben altijd betrekking op het codeblock waarin ze staan. Allemaal net als in C.

while voorwaarde {
    codeblock;
}

doet wat je verwacht: een loop die wordt herhaald zolang aan voorwaarde wordt voldaan. 

Echt anders dan in C is de for loop. Je kan om te beginnen, net als in C, een variabele een reeks laten doorlopen: 

for i in 1..5 {} doorloopt de reeks van 1 tot 5 en
for i in 1..=5 {} doorloopt de reeks van 1 tot en met 5. Tenslotte
for i in (1..5).rev {} doorloopt de reeks 4, 3, 2, 1.

maar daarnaast kan je nog iets anders aardigs doen, bijvoorbeeld met een array:

let a = [1, 2, 3, 4, 6];
for i in a {} doorloopt de reeks 1, 2, 3, 4, 6.

En a mag hier echt van alles zijn. Strings, tuples, wat je maar wilt.

Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op www.github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.

Arnout van Kempen di CCO CISA is Senior manager Risk & Compliance bij Baker Tilly. Hij schrijft op persoonlijke titel. Hij is lid van de Commissie Financiële verslaggeving & Accountancy van de AFM en lid van de signaleringsraad van de NBA. Daarnaast is hij diaken van het bisdom 's-Hertogenbosch.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.