Ruby: Wertebereiche mit Range

In Ruby gibt es den Datentyp Range, der Wertebereiche darstellen kann.

Ganze Zahlen zwischen 3 und 10:

3..10

… zwischen -10 und 10:

-10..10

Dezimalzahlen zwischen 0.1 und 0.5:

0.1..0.5

…zwischen -1.0 und 0.5:

-1.0..0.5

Ranges ist nützlich, wenn man zum Beispiel wissen möchte, ob ein Wert sich innerhalb bestimmter Grenzen befindet. Dafür verwenden wir die Funktion include? (= enthält?):

a = 90
puts (-100..100).include?(a)

ergibt true, weil 90 zwischen -100 und 100 liegt.

a = 110
puts (-100..100).include?(a)

ergibt false, weil 110 zwischen -100 und 100 liegt.

Ranges können nicht nur Zahlen-, sondern auch Buchstabenbereiche beschreiben:

('a'..'z').include?('x')

ergibt true, weil x zwischen a und z liegt.

Die Werte von einem ganzzahligen Range können mit each in einem Codeblock Schritt für Schritt durchgegangen werden. Dieses einfache Beispiel gibt die Werte von 10 bis 20 aus:

(10..20).each do |wert|
puts "Der Wert i ist:", wert
end

Achtung, der erste Wert des Ranges muß immer kleiner sein als der zweite. Folgendes Beispiel gibt nichts aus, da der Range von 20 bis 10 geht, anstatt von 10 bis 20.

(20..10).each do |wert|
puts "Der Wert i ist:", wert
end 

In Sonic Pi kann man Range verwenden, um den Funktionen für Zufallszahlen (rand und rand_i) mitzuteilen, in welchem Bereich sich die Werte befinden sollen:

play rand_i 50..70

….spielt eine Note zwischen 50 und 70

sleep rand 0.1..0.5

….macht eine Pause zwischen 0.1 und 0.5 Schlägen

sample :bd_haus, pan: rand(-1..1)

… gibt der Bassdrum eine zufällige Position im Stereofeld

Bei der Schreibweise min..max ist die obere Grenze max nicht Teil des Wertebereiches. Möchte man die obere Grenze mit einbeziehen, verwendet man die Schreibweise mit drei Punkten, also min...max:

(1..10).include?(10)

ergibt false

(1...10).include?(10)

ergibt true