Ruby Academy · Oppitunti

Vartioehdot

Selkeät aikaiset paluut.

Oppitunti 4/413 vaihetta

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
end

Guard-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, next tai raise.
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 unless poistuu metodista, kun vaatimus ei täyty.
  • Käyttäkää next-komentoa silmukan iteraation ohittamiseen ja raise-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)
Aloita maksutta

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.

Kaikki tämän kurssin oppitunnit

  1. if, unless, ternary
  2. case/when-lausekkeet
  3. Totuusarvoisuus Rubyssa
  4. Vartioehdot
← Takaisin: Ruby Academy