Konvertieren von Datentypen in Ruby

Einführung

Während jedes von Ihnen erstellte Programm mehrere data types enthält, ist es wichtig zu berücksichtigen, dass Sie im Allgemeinen Vorgänge ausführen innerhalb des gleichen Datentyps. Das heißt, Sie führen Mathematik mit Zahlen durch oder fügen Zeichenfolgen zusammen.

Manchmal stammen Daten aus externen Quellen, z. B. der Tastatur, einer API-Antwort oder einer Datenbank, und Sie müssen sie konvertieren, um damit arbeiten zu können. Ruby bietet verschiedene Methoden zum Konvertieren von Werten von einem Datentyp in einen anderen. In diesem Lernprogramm konvertieren Sie Zeichenfolgen in Zahlen, Objekte in Zeichenfolgen, Zeichenfolgen in Arrays und zwischen Zeichenfolgen und Symbolen.

Konvertieren von Zeichenfolgen in Zahlen

Ruby bietet die Methoden + to_i + und + to_f +, um Zeichenfolgen in Zahlen umzuwandeln. + to_i + konvertiert einen String in eine Ganzzahl und + to_f + konvertiert einen String in einen Float.

"5".to_i       # 5
"55.5".to_i    # 55
"55.5".to_f    # 55.5

Lassen Sie uns dies demonstrieren, indem Sie ein kleines Programm erstellen, das nach zwei Zahlen fragt und die Summe anzeigt. Erstellen Sie ein neues Ruby-Programm mit dem Namen "+ adder.rb +" und folgendem Code:

adder.rb

print "What is the first number? "
first_number = gets.chop

print "What is the second number? "
second_number = gets.chop

sum = first_number + second_number

print sum

Wenn Sie das Programm ausführen, erhalten Sie eine überraschende Antwort:

ruby adder.rb
OutputWhat is the first number?
What is the second number?

Dieses Programm sagt, dass die Summe von "+ 5 " und " 5 " " 55 " ist. Sie wissen, dass dies nicht richtig ist, aber der Computer ist technisch nicht falsch. Unser Programm forderte zwei Zahlen an, aber wir tippten sie auf der Tastatur ein. Wir haben die _Nummer_ 5 nicht gesendet. wir haben das _character_ `" 5 "` gesendet. Mit anderen Worten, unser Programm hat beide Eingaben als Zeichenfolgen angesehen, und wenn Sie die Zeichenfolgen "" 5 "" und "" 5 "" addieren, erhalten Sie eine neue Zeichenfolge "" 55 "+" .

Um dies zu vermeiden, müssen wir beide Zeichenfolgen in Zahlen konvertieren. Ändern Sie Ihr Programm so, dass beide Zahlen mit der Methode + to_f + in Gleitkommazahlen umgewandelt werden:

adder.rb

print "What is the first number? "
first_number = gets.chop

print "What is the second number? "
second_number = gets.chop

# convert strings to numbers
first_number = first_number.to_f
second_number = second_number.to_f

sum = first_number + second_number

print sum

Führen Sie das Programm erneut mit + ruby ​​adder.rb + aus. Diesmal wird diese Ausgabe angezeigt:

OutputWhat is the first number?
What is the second number?

Wenn Sie "+ 5 " und " 5 " erneut eingeben, erhalten Sie diesmal " 10.0 +".

Die Methoden "+ to_i " und " to_f +" weisen einige interessante Verhaltensweisen auf, wenn die Zeichenfolgen nicht numerisch sind. Schauen Sie sich das folgende Beispiel an:

"123-abc".to_i  # 123

In diesem Beispiel ergibt die Konvertierung der Zeichenfolge "" 123abc "" in eine Ganzzahl die Ganzzahl "+ 123 ". Die Methode ` to_i ` stoppt, sobald das erste nicht numerische Zeichen erreicht ist. Ruby-Webentwickler nutzen dies aus, indem sie URLs wie " 15-sammy-shark " erstellen, wobei " 15 " eine interne ID zum Nachschlagen eines Datensatzes ist, " sammy-shark " jedoch eine Textbeschreibung in der URL enthält. Wenn Ruby " 15-sammy-shark " mit " to_i " in eine Ganzzahl umwandelt, ist das Ergebnis " 15 ", und der Teil " -sammy-shark +" wird abgeschnitten und verworfen. Die Ganzzahl kann dann verwendet werden, um den Datensatz aus einer Datenbank abzurufen.

Hier ist ein weiteres Beispiel für ganzzahliges Verhalten, das Sie überraschen kann:

"abc".to_i     # 0

In diesem Beispiel gibt die Methode "+ to_i " " 0 " zurück, da keines der Zeichen in der Zeichenfolge konvertiert werden konnte. Dies kann zu unerwünschtem Verhalten führen. Wenn ein Benutzer "" abc "+" in Ihr Programm eingibt und Sie diesen Wert in eine Ganzzahl umwandeln und eine Zahl durch diesen Wert dividieren, stürzt Ihr Programm ab, da es nicht durch Null dividieren kann.

Ruby bietet eine andere Möglichkeit, diese Konvertierung durchzuführen. Sie können stattdessen die Methoden + Integer + und + Float + verwenden, um Daten zu konvertieren:

Integer("123")  # 123

Wenn Sie der Methode "+ Integer +" einen Wert übergeben, der nicht konvertiert werden kann, gibt Ruby einen Fehler aus:

Integer("123abc")
OutputArgumentError: invalid value for Integer(): "123abc"

Anschließend können Sie den Fehler behandeln und dem Benutzer eine Nachricht mit der Bitte um bessere Daten bereitstellen. Dieser Ansatz ist weniger praktisch, kann jedoch zu einer besseren Datenintegrität führen, da Ihre Daten nicht erzwungen werden.

Schauen wir uns als Nächstes an, wie Sie andere Datentypen in Text konvertieren.

Konvertieren von Daten in Zeichenfolgen

Ruby bietet die Methode + to_s +, um jeden anderen Typ in einen String zu konvertieren:

25.to_s                    # "25"
(25.5).to_s                # "25.5"
["Sammy", "Shark"].to_s    # "[\"Sammy\", \"Shark\"]"

Sie konvertieren häufig Daten in Strings, wenn Sie eine Programmausgabe erstellen.

Nehmen wir an, wir möchten den täglichen Kalorienverbrauch einer Person nach dem Training verfolgen. Wir möchten den Benutzer über diesen Fortschritt informieren, dh, wir drucken gleichzeitig Zeichenfolgen- und Zahlenwerte aus. Erstellen Sie die Datei "+ calories.rb +" mit folgendem Inhalt:

Kalorien.rb

user = "Sammy"
calories = 100

print "Congratulations, " + user + "! You just burned " + calories + " calories during this workout."

In diesem Programm werden Name und Kalorien fest programmiert. In einem echten Programm rufen Sie diese Werte jedoch aus einer anderen Quelle ab.

Führen Sie das Programm mit + ruby ​​calories.rb + aus.

Wenn Sie dieses Programm ausführen, wird folgender Fehler angezeigt:

OutputTypeError: no implicit conversion of Integer into String

Ruby lässt Sie die Variable "+ Kalorien +" nicht zum Rest der Ausgabe hinzufügen, da es sich um eine Ganzzahl handelt. Wir können es nicht einfach in eine Zeichenfolge ändern, indem wir Anführungszeichen setzen, da die Kaloriendaten möglicherweise von einem Ort stammen, den wir nicht kontrollieren. Stattdessen müssen wir die Kaloriendaten in eine Zeichenfolge konvertieren, damit wir sie mit dem Rest der Ausgabe verknüpfen können.

Ändern Sie die Ausgabezeile mit der Methode "+ to_s " so, dass sie die " Kalorien +" in eine Zeichenfolge konvertiert:

Kalorien.rb

user = "Sammy"
calories = 100

print "Congratulations, " + user + "! You just burned " + calories + " calories during this workout."

Führen Sie das Programm erneut aus und Sie sehen die erwartete Ausgabe:

OutputCongratulations, Sammy! You just burned 100 calories during this workout.

Die Ruby-Funktion string interpolation konvertiert Objekte automatisch in Strings. Dies ist die bevorzugte Methode zum Erstellen von Ausgaben in Ruby-Programmen.

Schreiben Sie die Ausgabezeile Ihres Programms neu, um stattdessen die Zeichenfolgeninterpolation zu verwenden:

Kalorien.rb

print "Congratulations, #{user}! You just burned #{calories} calories during this workout."

Führen Sie das Programm erneut aus und Sie werden die gleiche Ausgabe sehen.

Ruby-Objekte stellen alle ihre eigene "+ to_s +" -Implementierung bereit, die für die Ausgabe geeignet sein kann oder nicht. Möglicherweise müssen Sie Ihren eigenen Code schreiben, um die gesuchte Ausgabe zu erhalten, oder andere Methoden zum Formatieren der Daten untersuchen.

Schauen wir uns an, wie Sie einen String in ein Array konvertieren.

Konvertieren von Strings in Arrays

Wenn Sie einen String haben, können Sie ihn mit der Methode "+ split" in ein Array konvertieren.

"one two three".split   # ["one", "two", "three"]

Sie können das Zeichen angeben, das Sie als Trennzeichen verwenden möchten, indem Sie es als Argument an die Methode "+ split +" übergeben.

Versuch es. Erstellen Sie ein Programm mit dem Namen "+ data_import.rb +", das eine Reihe von Haien enthält, die durch Kommas getrennt sind. Das Programm nimmt die Daten, konvertiert sie in ein Array, sortiert sie und druckt jedes Element auf dem Bildschirm aus:

data = "Tiger,Great White,Hammerhead,Whale,Bullhead"

# Convert data to an array by splitting on commas
sharks = data.split(",")

# Sort the sharks alpabetically
sharks = sharks.sort!

# Print out the sharks
sharks.each{|shark| puts shark }

Führen Sie das Programm mit "+ ruby ​​data_import.rb +" aus und Sie werden die folgende Ausgabe sehen:

OutputBullhead
Great White
Hammerhead
Tiger
Whale

Ruby-Arrays sind leistungsstarke Datenstrukturen. Dies zeigt eine Möglichkeit, sie zum Verarbeiten von Daten zu verwenden.

Schauen wir uns abschließend an, wie Sie zwischen Zeichenfolgen und Symbolen konvertieren.

Konvertieren zwischen Zeichenfolgen und Symbolen

Sie möchten gelegentlich ein Symbol in eine Zeichenfolge konvertieren, damit Sie es anzeigen können, und Sie möchten gelegentlich eine Zeichenfolge in ein Symbol konvertieren, damit Sie damit in einem Hash nachschlagen können.

Rubys + to_s + - Methode funktioniert auch für Symbole, sodass Sie Symbole in Strings konvertieren können.

:language.to_s   # "language"

Dies ist nützlich, wenn Sie ein Symbol anzeigen und das Erscheinungsbild ändern möchten. Dieses Programm nimmt zum Beispiel das Symbol ": Vorname +" und konvertiert es in die Zeichenfolge "" Vorname "+", die besser lesbar ist:

string = :first_name.to_s

# replace underscore with a space and capitalize
string = string.gsub("_"," ").capitalize

Verwenden Sie zum Konvertieren einer Zeichenfolge in ein Symbol die Methode + to_sym + wie folgt:

"first_name".to_sym   # :first_name

Um die Zeichenfolge "" Vorname "" in das Symbol "+: Vorname +" umzuwandeln, müssen Sie alle Buchstaben in Kleinbuchstaben schreiben und Leerzeichen durch Unterstriche ersetzen:

string = "First name"

# replace spaces with underscores and convert to lowercase
string = string.gsub(" ","_").downcase

# Convert to symbol
symbol = string.to_sym

Sie werden Fälle finden, in denen Sie diese Konvertierungen durchführen möchten, unabhängig davon, ob ein Symbol auf dem Bildschirm in einem benutzerfreundlichen Format angezeigt wird oder eine Zeichenfolge zum Nachschlagen eines Schlüssels in einem Hash verwendet wird, der Symbole für seine Schlüssel verwendet. Jetzt weißt du wie.

Fazit

In diesem Lernprogramm wurde gezeigt, wie mehrere wichtige native Datentypen mithilfe integrierter Methoden in andere Datentypen konvertiert werden. Sie können jetzt Zahlen in Zeichenfolgen, Zeichenfolgen in Arrays und zwischen Symbolen und Zeichenfolgen konvertieren.

Schauen Sie sich diese Tutorials an, um Ihre Erkundung der Ruby-Datentypen fortzusetzen: