Ruby - Gamas
Los rangos se encuentran en todas partes: enero a diciembre, 0 a 9, líneas 50 a 67, y así sucesivamente. Ruby admite rangos y nos permite usar rangos de varias formas:
- Rangos como secuencias
- Rangos como condiciones
- Rangos como intervalos
Rangos como secuencias
El primer y quizás el uso más natural de rangos es expresar una secuencia. Las secuencias tienen un punto de inicio, un punto final y una forma de producir valores sucesivos en la secuencia.
Ruby crea estas secuencias usando el ''..'' y ''...''operadores de rango. La forma de dos puntos crea un rango inclusivo, mientras que la forma de tres puntos crea un rango que excluye el valor alto especificado.
(1..5) #==> 1, 2, 3, 4, 5
(1...5) #==> 1, 2, 3, 4
('a'..'d') #==> 'a', 'b', 'c', 'd'
La secuencia 1..100 se mantiene como un objeto Range que contiene referencias a dos objetos Fixnum . Si es necesario, puede convertir un rango en una lista utilizando el método to_a . Prueba el siguiente ejemplo:
#!/usr/bin/ruby
$, =", " # Array value separator
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a
puts "#{range1}"
puts "#{range2}"
Esto producirá el siguiente resultado:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]
Los rangos implementan métodos que le permiten iterar sobre ellos y probar su contenido de diversas formas:
#!/usr/bin/ruby
# Assume a range
digits = 0..9
puts digits.include?(5)
ret = digits.min
puts "Min value is #{ret}"
ret = digits.max
puts "Max value is #{ret}"
ret = digits.reject {|i| i < 5 }
puts "Rejected values are #{ret}"
digits.each do |digit|
puts "In Loop #{digit}"
end
Esto producirá el siguiente resultado:
true
Min value is 0
Max value is 9
Rejected values are 5, 6, 7, 8, 9
In Loop 0
In Loop 1
In Loop 2
In Loop 3
In Loop 4
In Loop 5
In Loop 6
In Loop 7
In Loop 8
In Loop 9
Rangos como condiciones
Los rangos también se pueden usar como expresiones condicionales. Por ejemplo, el siguiente fragmento de código imprime conjuntos de líneas de la entrada estándar, donde la primera línea de cada conjunto contiene el inicio de la palabra y la última línea termina la palabra :
while gets
print if /start/../end/
end
Los rangos se pueden usar en declaraciones de casos:
#!/usr/bin/ruby
score = 70
result = case score
when 0..40 then "Fail"
when 41..60 then "Pass"
when 61..70 then "Pass with Merit"
when 71..100 then "Pass with Distinction"
else "Invalid Score"
end
puts result
Esto producirá el siguiente resultado:
Pass with Merit
Rangos como intervalos
Un uso final del rango versátil es como una prueba de intervalo: ver si algún valor cae dentro del intervalo representado por el rango. Esto se hace usando ===, el operador de igualdad de casos.
#!/usr/bin/ruby
if ((1..10) === 5)
puts "5 lies in (1..10)"
end
if (('a'..'j') === 'c')
puts "c lies in ('a'..'j')"
end
if (('a'..'j') === 'z')
puts "z lies in ('a'..'j')"
end
Esto producirá el siguiente resultado:
5 lies in (1..10)
c lies in ('a'..'j')