Em programação o Range é a representação de um intervalo de valores entre um valor inicial e um final. Esse conceito existe em muitas linguagens e Ruby oferece algumas formas diferentes de trabalhar com ranges.
Pessoas que já tem experiência com desenvolvimento e começam a programar em Ruby muitas vezes acabam usando o "sotaque" de outras linguagens. Em Python, por exemplo, um range poderia ser criado assim:
range(1, 10)
Em Javascript é possível fazer algo semelhante usando Array().keys
:
[...Array(5).keys()];
=> [0, 1, 2, 3, 4]
Ruby é uma linguagem muito intuitiva e a ideia da linguagem é ser o mais humana possível. Sendo assim, um range pode ser feito dessa maneira:
irb(main):001:0> 1..10
=> 1..10
irb(main):002:0> (1..10).class
=> Range
Transformando um range em array:
irb(main):003:0> (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Legal né? 🌝
Algo que acontece com muita frequência é precisarmos iterar por um array sem conhecermos exatamente a quantidade de elementos que ele possui, e as pessoas que estão começando a programar em Ruby fariam algo assim usando range:
irb(main):004:0> (1..numero - 1).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
O Range do Ruby possui duas formas de notação: o ..
e o ...
. A diferença entre eles está realmente no alcance. Enquanto o ..
vai de x até o y
, com o ...
, vai de x a y -1
.
Exemplo usando o ..
:
irb(main):005:0> (1..9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Exemplo usando o ...
:
irb(main):006:0> (1...9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8]
Também vale lembrar que ranges funcionam com letras, por exemplo:
irb(main):001:0> ('a'..'g')
=> "a".."g"
irb(main):002:0> ('a'..'g').to_a
=> ["a", "b", "c", "d", "e", "f", "g"]
Bacana né? Aprendemos um pouco mais sobre range
. Com certeza o trabalho de vocês vai ficar bem mais produtivo.