Ruby voor nieuwkomers voorwaardelijke overzichten en lussen

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.


Inhalen

  • Deel 1: Ruby installeren en aan de slag gaan
  • Deel 2: Variabelen, datatypes en bestanden 
  • Deel 3: Werken met klassen
  • Deel 4: Conditionals en loops

Bekijk Screencast


Voorwaardelijke nummer 1: als verklaring

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.

elsif

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.

Uitspraken versus uitdrukkingen

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 een modifier

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?

Voorwaardelijke # 2: Tenzij verklaring

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

Voorwaardelijke # 3: zaak / bij verklaring

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

Breaking Up Expressions

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

Loop # 1: While Loop

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]

Loop # 2: Until Loop

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

Loop # 3: voor Loop

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

Dat is het!

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.)