Ruby is een van de populairste talen die op internet wordt gebruikt. We zijn een nieuwe screencastserie gestart op Nettuts + die u kennis laat maken met Ruby, evenals de geweldige frameworks en tools die horen bij de ontwikkeling van Ruby. In dit hoofdstuk zullen we bekijken hoe conditionele statements en loops werken in Ruby.
De if-instructie is een van de eerste soorten vertakkingen die u tijdens het programmeren leert. U kunt raden wat het betekent: als dit waar is, doe dan één ding; als dat niet zo is, doe dan iets anders. In Ruby zijn deze vrij eenvoudig te schrijven:
name = "Andrew" als naam == "Andrew" zet "Hallo Andrew" einde als naam == "Andrew" zet "Hallo Andrew" anders zet "Hallo iemand anders" einde
Na het sleutelwoord als
, code in uw voorwaardelijke verklaring. Daarna komt de code die moet worden uitgevoerd als de voorwaarde true retourneert. Je sluit de verklaring af met de einde
trefwoord. Als je wilt, kun je een knijpen anders
verklaring daar, die voorspelbaar wordt uitgevoerd als de voorwaarde onwaar is.
Het is niet moeilijk om te controleren op meerdere voorwaarden. Zet er net zoveel elsif
statements zoals je wilt tussen de als
en anders
statements. Ja dat is elsif
, een huwelijk van anders
en als
.
order = : size => "medium" def make_medium_cofee zet "medium statement maken" einde #assume andere functies als order [: size] == "small" make_small_coffee; elsif order [: size] == "medium" make_medium_coffee; elsif order [: size] == "large" make_large_coffee; anders make_coffee; einde
Zoals ik al zei, kunt u er net zoveel hebben elsif
voorwaarden en de bijbehorende codeblokken als je wilt.
De meeste programmeertalen maken een onderscheid tussen uitspraken en uitdrukkingen. A-statements is een codeconstruct dat niet tot een bepaalde waarde evalueert. Een uitdrukking is een codeconstruct doet retourneer een waarde. Het aanroepen van een functie is bijvoorbeeld een uitdrukking, omdat deze een waarde retourneert. Een if-statement is echter precies dat, een statement, omdat er geen waarde wordt geretourneerd. Dit betekent dat je dit niet in je JavaScript kunt doen:
message = if (someTruthyValue) "dit is waar"; else "this is false";
Uiteraard kun je dit niet doen omdat de if-instructie geen waarde teruggeeft die je kunt toewijzen bericht
.
U kunt dit echter met Ruby doen, omdat statements eigenlijk uitdrukkingen zijn, wat inhoudt dat ze een waarde retourneren. Dus we kunnen dit doen
message = if order [: size] == "small" "making small" elsif order [: size] == "medium" "medium maken" anders "koffie zetten" einde
Welk blok van de code wordt uitgevoerd, wordt de waarde van bericht
.
Als je er geen hebt elsif
of anders
clausules en uw if-instructie heeft slechts één regel, u kunt deze gebruiken als een modifier voor een "normale" regel.
zet "koffiezetten" als klant.wilt_koffie?
In de meeste programmeertalen willen we de terugkeer van de voorwaardelijke uitdrukking ongedaan maken, we moeten het ontkennen, meestal met de knal (!
) operator.
engine_on = true als! engine_on # betekent "if not engine_on" zet "servicing engine" #moet niet gezet worden, want "not engine_on" is false end
Maar Ruby heeft echt een leuke tenzij
operator, die ons ervan weerhoudt dat te moeten doen, en ons tegelijkertijd veel leesbaardere code geeft:
tenzij engine_on # "tenzij engine_on" beter is dan "als niet engine_on" "service-engine" eindigt
Net als als
, je kunt gebruiken tenzij
als een modifier:
zet "servicing engine" tenzij engine_on
Als je veel opties hebt om door te werken, gebruik je if / elsif / else
kan enigszins omslachtig zijn. Probeer de case-statement.
uur = 15 keer wanneer uur < 12 puts "Good Morning" when hour > 12 && uur < 17 puts "Good Afternoon" else puts "Good Evening" end
Het is een beetje - misschien als een switch / case
verklaring in JavaScript (of andere talen), behalve dat er geen variabele is die u aan het evalueren bent. Binnen in de case / end
sleutelwoorden, u kunt er zoveel plaatsen wanneer
uitspraken zoals je wilt. Volg dat wanneer
door de voorwaardelijke uitdrukking, en dan gaan de regels van de code erachteraan. Net als de if-instructie, is de case-instructie feitelijk een uitdrukking, dus u kunt deze toewijzen aan een expressie en een geretourneerde waarde vastleggen.
uur = 15 bericht = case wanneer uur < 12 "Good Morning" when hour > 12 && uur < 17 "Good Afternoon" else "Good Evening" end puts message
Als u bekend bent met JavaScript, weet u dat de codeblokken in een if-statement worden omringd door accolades. We doen dit niet in Ruby, dus het lijkt misschien dat Ruby afhankelijk is van de witruimte. Niets is minder waar (neem dat, pythonistas :)).
Als we uw verklaringen als oneliners willen schrijven, moet u de verschillende delen van de uitspraken scheiden ... maar hoe? Nou, je kunt puntkomma's gebruiken:
als naam == "Andrew"; some_code; anders; some_code; einde
Als je het uiterlijk niet leuk vindt (wat ik niet doe), kun je het trefwoord plaatsen dan
tussen de conditionele expressies en de regel code.
als naam == "Andrew" dan sode_code; einde
Dit werkt ook voor een case-statement.
geval wanneer x> 20; zet "<20" when x < 20 then puts "<20" end
Dit zijn dus voorwaardelijke uitspraken (ik bedoel, uitdrukkingen). Hoe zit het met loops? Laten we eerst kijken naar while loops.
Een while-lus wordt verder uitgevoerd totdat de opgegeven voorwaarde onwaar is:
arr = ["John", "George", "Paul", "Ringo"] i = 0 while arr [i] zet arr [i] i + = 1 einde
Hier lopen we over een array; wanneer arr [i]
geeft false terug (wat betekent dat er geen items meer in de array zijn), de loop stopt met het uitvoeren. Binnen de lus drukken we het huidige item in de array af en voegen er een toe aan onze increment-variabele.
Je kan ook gebruiken terwijl
als een modifier
arr = ["John", "George", "Paul", "Ringo"] i = -1 zet arr [i + = 1] terwijl arr [i]
Net als tenzij
is het tegenovergestelde van als
, tot
is het tegenovergestelde van terwijl
. Het zal blijven lus tot de voorwaarde waar is:
days_left = 7; tot days_left == 0 puts "er zijn nog steeds # days_left in de week" days_left - = 1 einde
En natuurlijk is het ook een modifier.
days_left = 8 zet "er zijn nog # days_left - = 1 in de week" tot days_left == 1
Ja, Ruby heeft een for-lus. Nee, het is niet zoals de for-lus in andere talen. Het werkt als een foreach-lus, voor het doorlussen van de waarden in een array of hash:
arr = ["John", "George", "Paul", "Ringo"] voor item in arr zet item einde
Als u een hash overslaat, kunt u twee variabelenamen gebruiken, één voor de sleutel en één voor de waarde:
joe = : name => "Joe",: age => 30,: job => "plumber" voor sleutel, val in Joe zet "# key is # val" einde
Ik hoop dat je geniet van onze Ruby for Newbies Screencast-serie. Als er iets is dat u graag zou willen zien, laat het me dan weten in de comments! (En als je de video's niet bekijkt, zou dat zo moeten zijn. Aan het einde van elk filmpje staat een alleen-screencast-bonus.)