Ruby-Programmierung: Arrays

Zurück zum Inhaltsverzeichnis.

Oftmals ist es nötig eine Menge gleichartiger Elemente strukturiert abrufen zu können. Stellen Sie sich zum Beispiel einen Kassenbon vor: Die Elemente haben immer die gleichen Eigenschaften, doch weiß man nicht wie viele Elemente es insgesamt gibt. Es genügt also nicht genügend viele Variablen zu erstellen, sondern greift dann auf Arrays zurück, die genau dieses Problem lösen. Der Zugriff auf einzelne Elemente erfolgt mit einem Index. Typische Beispiele für Arrays sind Anwendungsfälle wie: Alle Eingaben des Users bisher oder eingeloggte User einer Webseite oder alle Daten einer physikalischen Messung.

Erzeugen und Zugriff Bearbeiten

Es ist möglich entweder ein leeres Array zu erzeugen oder es mit Werten zu initialisieren. Auch wenn eingangs erwähnt wurde, dass es sich um eine Menge gleichartiger Elemente handelt, wird dies nicht durch Ruby erzwungen. Zwar gibt es Anwendungsfälle, wo es sinnvoll ist verschiedene Typen zusammenzufassen, so werden größtenteils Arrays dann verwendet, um mehrere gleichartige Daten zu verarbeiten.

array = []
array = ["Batman", "Robin", "Catwoman"]
array = ["A", 1, []]

Der Zugriff erfolgt über einen Index, wobei die Zählung mit 0 beginnt. Das erste Element hat also den Index 0 und das letzte Element eines Arrays mit zehn Elementen den Index 9. Es existieren außerdem verschiedene Abkürzungen und Schlüsselwörter für den Zugriff.

array = ["Batman", "Robin", "Catwoman"]
puts array[0]
puts array.first
puts array.last
puts array[array.length-1]
puts array[-1]

Die Methode liste.length gibt die Position nach dem letzten Element des Arrays zurück. Sind also vorher alle Positionen belegt, so gibt die Methode die Anzahl der gespeicherten Elemente aus. Wie gesehen, ist es möglich Berechnungen auszuführen und das Ergebnis als Index zu verwenden. Die letzte Zeile ist die abkürzende Schreibweise für die Zeile davor.

Es ist Möglich einen Teilbereich des Arrays zu adressieren, wobei der Rückgabewert dieser Methode wieder ein Array ist.

puts array[1,2]

Arrays verändern Bearbeiten

Nicht nur das Zugreifen auf ein Element des Arrays erfolgt mit Indizes, sondern auch die Manipulation einzelner Elemente. Das Anfügen eines Elements kann auf zwei Arten gelöst werden, zum einen durch die Adressierung des nächsten Elementes oder durch die Methode <<.

array[0] = "Superman"
puts array[0]
array[array.length] = "Superman"
array << "Hulk"

Mehrere Rückgabewerte einer Methode Bearbeiten

Mit Arrays ist es möglich, dass eine Methode scheinbar mehrere Rückgabewerte hat. Sie hat natürlich trotzdem nur einen Rückgabewert, nämlich das Array, aber Ruby erlaubt es, durch parallele Zuweisung ein Array quasi unsichtbar auf Variablen aufzuteilen. Das ist natürlich auch bei Arrays möglich, die nicht aus Methoden stammen.

def whole_number_division(a, b)
  [a / b, a % b]
end

_, rest = whole_number_division(5, 2)
puts rest

Kassenbon Bearbeiten

Das Eingangs erwähnte Kassenbonbeispiel soll nun in vereinfachter Form gelöst werden. Der Kassierer soll die Möglichkeit haben die Preise der einzelnen Waren einzutippen und zum Schluss soll die Summe angezeigt werden.

# kasse.rb

#Endlosschleife erzeugen
loop do
  puts "Neuer Bon:"  

  #Kassenbon anlegen
  prices = []
  input = ""
  #Preiseingabe beenden durch leeren Preis
  until input == "\n"
    input = gets
    prices << input.to_f unless input == "\n"
  end

  #Summe errechnen
  sum = 0.0
  for x in prices
    sum += x
  end
  
  #Wenn der Kassenbon leer war, Programm beenden
  puts "Ihr Einkauf kostet:\t #{ sum.to_s } EUR" unless sum == 0.0
  break if sum == 0.0
end