Rangos (ranges)

Quizá el uso más natural de los rangos es expresar secuencias. Las secuencias tienen un punto inicial, un punto final y una manera de producir valores subsecuentes en la secuencia. En Ruby, estas secuencias son creadas usando los operadores de rango (..) y (...).

La forma de dos puntos crea un rango ‘inclusivo’ y la forma de tres puntos crea un rango que excluye el valor más alto especificado. En Ruby, los rangos no son representados internamente como listas: la secuencia 1..100000 es sostenida como un objeto de clase Range que contiene referencias a dos objetos de clase Fixnum. Observa el programa p021rangos.rb. Si lo necesitas, puedes convertir un rango a un array utilizando el método to_a:

1 (1..10).to_a # regresa [1,2,3,4,5,6,7,8,9,10]

Los rangos implementan métodos que te permiten hacer iteraciones y probar su contenido de diferentes maneras:

1 digitos = -1..9
2 puts digitos.include?(5)        # true
3 puts digitos.min                  # -1
4 puts digitos.max                  # 9
5 puts digitos.reject {|i| i < 5 }  # [5, 6, 7, 8, 9]

Otro uso de los versátiles rangos es hacer pruebas de intervalos: verificar si un valor se encuentra dentro del intervalo representado por el rango. Para lograr esto, utilizamos el operador de igualdad case (===):

1 (1..10) === 5      # => true
2 (1..10) === 15     # => false
3 (1..10) === 3.14   # => true
4 ('a'..'j') === 'c' # => true
5 ('a'..'j') === 'z' # => false

Tarea:

  1. Dada la cadena “key=value”, crea dos cadenas c1 y c2 de tal manera que c1 contenga la palabra ‘key’ y c2 contenga la palabra ‘value’. Pista: Utiliza algunos de los métodos de la clase String (p021rangesex.rb)