Vartioehdot
Selkeät aikaiset paluut.
Vartioehdot on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Siistit varhaiset palautukset
Guard-lause on metodin alussa tehtävä tarkistus, joka palautuu heti virheellisten tai poikkeavien tapausten kohdalla. Se pitää päälogiikan tasaisena ja helppolukuisena.
def greet(name)
return "Hello, stranger" if name.nil?
"Hello, #{name}"
end
puts greet(nil)
puts greet("Ada")Ongelma: syvä sisäkkäisyys
Ilman guard-lauseita tarkistukset kasautuvat sisäkkäisiksi if-lohkoiksi. Var sinainen työ päätyy syvälle ruudun oikeaan reunaan piiloon.
def charge(user)
if user
if user[:active]
puts "Charging #{user[:name]}"
end
end
end
charge({ name: "Sam", active: true })Ratkaisu: guard-lauseet
Kääntäkää jokainen ehto päinvastaiseksi ja palautukaa heti. Onnistuva suorituspolku on nyt perus-sisennystasolla, ilman ylimääräistä sisennystä ja helposti havaittavissa.
def charge(user)
return unless user
return unless user[:active]
puts "Charging #{user[:name]}"
end
charge({ name: "Sam", active: true })return ilman arvoa
Pelkkä return poistuu metodista ja palauttaa arvon nil. Käyttäkää sitä, kun kutsuja ei tarvitse tulosta hylätyssä tapauksessa.
def log(message)
return if message.nil? || message.empty?
puts "LOG: #{message}"
end
log("")
log("started")Arvon palauttaminen
Guard-lause voi palauttaa myös merkityksellisen arvon, kuten järkevän oletusarvon, jolloin kutsuja saa aina jotakin käyttökelpoista.
def discount(price)
return 0 if price <= 0
price * 0.1
end
puts discount(-5)
puts discount(200)Guard-lause unless-rakenteella
return unless condition tarkoittaa, että metodista poistutaan, jos vaatimus ei täyty. Se on yksi Rubyn yleisimmistä idiomeista.
def withdraw(balance, amount)
return "Insufficient funds" unless balance >= amount
"New balance: #{balance - amount}"
end
puts withdraw(100, 150)
puts withdraw(100, 40)Useita guard-lauseita
Ketjuttakaa useita guard-lauseita syötteiden tarkistamiseksi yksi kerrallaan. Jokainen rivi ilmaisee yhden säännön, joten metodi dokumentoi itse itsensä.
def register(name, age)
return "Name required" if name.to_s.empty?
return "Must be 18+" if age < 18
"Registered #{name}"
end
puts register("", 30)
puts register("Lee", 16)
puts register("Lee", 21)Guard-lauseet ja next silmukoissa
Lohkon tai silmukan sisällä ette voi käyttää return-komentoa vain yhden iteraation ohittamiseen. Käyttäkää guard-lauseena next-komentoa siirtyäksenne seuraavaan alkioon.
[1, -2, 3, -4].each do |n|
next if n.negative?
puts n
endGuard-lauseet parantavat luettavuutta
Verratkaa seuraavia kahta tyyliä mielessänne: guard-lauseet poistavat else-haaran ja vähentävät sisennystä. Lukija näkee ensin virheellisten tapausten käsittelyn ja sen jälkeen ydintoiminnan.
def area(width, height)
return 0 unless width.positive? && height.positive?
width * height
end
puts area(0, 5)
puts area(4, 5)Poikkeuksen nostaminen guard-lauseessa
Kun virheellinen syöte on ohjelmoijan virhe eikä odotettu tapaus, nostakaa guard-lauseessa poikkeus, jotta suoritus epäonnistuu nopeasti ja näkyvästi.
def sqrt(n)
raise ArgumentError, "n must be >= 0" if n.negative?
Math.sqrt(n)
end
puts sqrt(16)
puts sqrt(-1) rescue puts "caught negative input"Kokonaisuuden yhdistäminen
Guard-lauseet ovat pieni tapa, josta on suuri hyöty:
- Käsitelkää poikkeustapaukset heti alussa ja palautukaa.
- Pitäkää päälogiikka ilman ylimääräistä sisennystä.
- Käyttäkää tilanteen mukaan komentoja
return,nexttairaise.
def initials(name)
return "" if name.nil? || name.strip.empty?
name.split.map { |part| part[0].upcase }.join
end
puts initials(" ").inspect
puts initials("grace hopper")Pikatarkistus
Testatkaa guard-lauseiden ymmärtämistänne.
Kertaus
Opitte guard-lauseet:
- Palautukaa heti virheellisten tai poikkeavien tapausten kohdalla.
return unlesspoistuu metodista, kun vaatimus ei täyty.- Käyttäkää
next-komentoa silmukan iteraation ohittamiseen jaraise-komentoa todellisiin virheisiin. - Tuloksena ovat tasaiset, itsensä dokumentoivat metodit.
def safe_divide(a, b)
return nil if b.zero?
a / b
end
puts safe_divide(10, 0).inspect
puts safe_divide(10, 2)Opi Ruby tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 29
- Oppitunnit
- 109
Usein kysytyt kysymykset
Onko oppitunti ”Vartioehdot” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Vartioehdot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Vartioehdot”?
Selkeät aikaiset paluut. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Vartioehdot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?
Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.