El principal uso y quizás el más apropiado para los rangos, es expresar una secuencia: las secuencias tienen un punto inicial y un punto final, y una forma de producir los sucesivos valores entre ambos. En Ruby, esas secuencias son creadas usando los operandos ..
y …
..
genera una secuencia donde los puntos límites están incluidos.
(1..3).to_a
#es la secuencia 1, 2, 3
…
genera una secuencia en la que no está incluida el límite superior.
(1...5).to_a
#equivale a 1, 2, 3, 4
En Ruby los rangos no son almacenados como una lista: los rangos se almacenan como un objeto Range, y contiene referencias a dos objetos Fixnum (su límite superior e inferior). Se puede convertir un rango en un array ( array = lista, conjunto ordenado de elementos), mediante el método to_a
.
(1..10).to_a
#obtenemos [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Los rangos en ruby tienen diversos métodos:
nums = -1...9
puts nums.include?(5) # true
puts nums.min # -1
puts nums.max # 8
puts nums.reject {|i| i < 5} # [5, 6, 7, 8]
Uno de los usos útiles de los rangos, es comprobar si un determinado valor está en el intervalo representado por el rango. Para eso usamos el operador ===
:
(1..10) === 5 # true
(1..10) === 15 # false
(1..10) === 3.14159 # true
('a'..'j') === 'c' # true