Ruby - Gammes

Les plages se produisent partout: janvier à décembre, 0 à 9, lignes 50 à 67, et ainsi de suite. Ruby prend en charge les gammes et nous permet d'utiliser les gammes de différentes manières -

  • Plages sous forme de séquences
  • Les plages comme conditions
  • Plages sous forme d'intervalles

Plages sous forme de séquences

La première utilisation et peut-être la plus naturelle des plages est d'exprimer une séquence. Les séquences ont un point de départ, un point final et un moyen de produire des valeurs successives dans la séquence.

Ruby crée ces séquences en utilisant le ''..'' et ''...''opérateurs de gamme. Le formulaire à deux points crée une plage inclusive, tandis que le formulaire à trois points crée une plage qui exclut la valeur élevée spécifiée.

(1..5)        #==> 1, 2, 3, 4, 5
(1...5)       #==> 1, 2, 3, 4
('a'..'d')    #==> 'a', 'b', 'c', 'd'

La séquence 1..100 est conservée comme un objet Range contenant des références à deux objets Fixnum . Si vous en avez besoin, vous pouvez convertir une plage en liste à l'aide de la méthode to_a . Essayez l'exemple suivant -

#!/usr/bin/ruby

$, =", "   # Array value separator
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a

puts "#{range1}"
puts "#{range2}"

Cela produira le résultat suivant -

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]

Les plages implémentent des méthodes qui vous permettent de les parcourir et de tester leur contenu de différentes manières -

#!/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

Cela produira le résultat suivant -

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

Les plages comme conditions

Les plages peuvent également être utilisées comme expressions conditionnelles. Par exemple, le fragment de code suivant imprime des ensembles de lignes à partir de l'entrée standard, où la première ligne de chaque ensemble contient le début du mot et la dernière ligne où se termine le mot -

while gets
   print if /start/../end/
end

Les plages peuvent être utilisées dans les instructions case -

#!/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

Cela produira le résultat suivant -

Pass with Merit

Plages sous forme d'intervalles

Une dernière utilisation de la plage polyvalente est un test d'intervalle: voir si une valeur se situe dans l'intervalle représenté par la plage. Cela se fait en utilisant ===, l'opérateur d'égalité de cas.

#!/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

Cela produira le résultat suivant -

5 lies in (1..10)
c lies in ('a'..'j')