Hoofdletters en reeksen in Ruby

Mehdi Farsi

Follow

22 jul, 2019 – 3 min read

In dit artikel gaan we de volgende onderwerpen uitdiepen:

  • De .. operator
  • De … operator
  • Ranges en zwevende waarden

Voel je vrij om de

Lees gerust het Case statement behind the scene-artikel als u niet bekend bent met het case statement en de when-clausule.

Voordat je begint

Ik ben verheugd om ons nieuwste project met jullie te delen: Leuke weetjes over Ruby – Deel 1

Voel je vrij om het woord te verspreiden en deel deze post! 🙏

Dank u voor uw tijd!

In een case statement kunnen de when clausules een bereik als parameter nemen

Hier, neemt het case-instructie een geheel getal als parameter.

Als de when-clausule een bereik als parameter neemt, wordt de Range#===-operator aangeroepen en wordt gecontroleerd of het gehele getal binnen het bereik valt.

De .. operator in ons bereik zorgt ervoor dat de linker en de rechter operand in het bereik zijn opgenomen.

De tweede when clausule neemt een bereik met behulp van de … operator.

Dit betekent dat de rechter operand niet in het bereik is opgenomen.

Nu we beter bekend zijn met de when-clausule en bereiken, laten we eens kijken naar een randgeval dat ik tegenkwam bij het gebruik van variabelen en bereiken.

Bereik van drijvende waarden en de wanneer-clausule

Zoals we in het bovenstaande voorbeeld hebben gezien, sluit de … operator het rechter operand van het bereik uit. Maar wat als ik de linker operand wil uitsluiten?

Hier, wordt alleen de inhoud van de eerste when-clausule verwerkt die overeenkomt met de surface-waarde – in ons geval when 70..90 then :second_value.

In dit geval levert het case statement :second_value op.

Dus de volgende when clausule wordt nooit geëvalueerd voor een surface of 90.

Dit werkt prima voor een bereik van gehele getallen.

Maar wat als we te maken hebben met een bereik van vlotters?

Hier, het case statement retourneert :third_value omdat surface strikt groter is dan 130.0.

als we surface = 130.0 opnieuw toewijzen, dan geeft ons case statement :second_value terug – hetzelfde als reeksen gehele getallen.

Merk op dat we de constante Float::INFINITY gebruiken om ons laatste bereik te beëindigen.

Dit is equivalent aan elke waarde boven 130.0.

Laten we tot slot eens kijken naar het begrip eindeloze bereiken – Dit begrip is geïntroduceerd in Ruby 2.6.0.

Dit is equivalent aan elke waarde boven 130.0.

Laten we tot slot eens kijken naar het begrip eindeloze bereiken – Dit begrip is geïntroduceerd in Ruby 2.6.0.6.0.

Op regel 6 laat de range expliciet de rechter operand weg.

Ruby interpreteert dit als volgt: 130..Float::INFINITY

Dit stelt ons in staat om te voorkomen dat we impliciet de Float::INFINITY moeten aanroepen om ons bereik te beëindigen.

Dus hier, de waarde van surface komt overeen met deze vergelijking en het case statement retourneert :third_value.

Voilà!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *