Comment convertir des types de données en Ruby

introduction

Bien que chaque programme que vous créez contienne plusieurs data types, il est important de garder à l’esprit que vous effectuerez généralement des opérations. dans le même type de données. C’est-à-dire que vous ferez des mathématiques sur des nombres ou joignerez des chaînes.

Parfois, les données proviennent de sources externes, telles que le clavier, une réponse d’API ou une base de données, et vous devrez les convertir pour pouvoir les utiliser. Ruby fournit plusieurs méthodes pour convertir les valeurs d’un type de données en un autre. Dans ce didacticiel, vous allez convertir des chaînes en nombres, des objets en chaînes, des chaînes en tableaux, puis convertir des chaînes en symboles.

Conversion de chaînes en nombres

Ruby fournit les méthodes + to_i + et + to_f + pour convertir des chaînes en nombres. + to_i + convertit une chaîne en entier et + to_f + convertit une chaîne en float.

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

Montrons-le en créant un petit programme qui demande deux nombres et affiche la somme. Créez un nouveau programme Ruby appelé + adder.rb + avec le code suivant:

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

Lorsque vous exécutez le programme, vous obtiendrez une réponse surprenante:

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

Ce programme dit que la somme de "+ 5 " et de " 5 " est " 55 ". Vous savez que ce n’est pas correct, mais l’ordinateur n’est pas techniquement faux. Notre programme nous a demandé deux chiffres, mais nous les avons saisis au clavier. Nous n'avons pas envoyé le _number_ 5; nous avons envoyé le _character_ `" 5 "`. En d'autres termes, notre programme considérait nos deux entrées comme des chaînes, et lorsque vous ajoutez les chaînes `" 5 "` et ' "5" + , vous obtenez une nouvelle chaîne, + "55" + ` .

Pour éviter cela, nous devons convertir les deux chaînes en nombres. Modifiez votre programme pour qu’il convertisse les deux nombres en nombres flottants en utilisant la méthode + to_f +:

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

Exécutez le programme avec + ruby ​​adder.rb + à nouveau. Cette fois, vous verrez cette sortie:

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

Lorsque vous entrez à nouveau «+ 5 » et « 5 », vous obtenez « 10.0 +» cette fois-ci.

Les méthodes + to_i + et + to_f + ont des comportements intéressants lorsque les chaînes ne sont pas numériques. Regardez l’exemple suivant:

"123-abc".to_i  # 123

Dans cet exemple, la conversion de la chaîne " 123abc " en un entier donne le nombre entier + 123 +. La méthode + to_i + s’arrête une fois qu’elle atteint le premier caractère non numérique. Les développeurs Web Ruby exploitent cela en créant des URL telles que + 15-sammy-shark +, où + 15 + est un identifiant interne permettant de rechercher un enregistrement, tandis que + sammy-shark + donne une description textuelle dans l’URL. Lorsque Ruby convertit + 15-sammy-shark + en un entier avec + to_i +, le résultat est + 15 + et la partie + -sammy-shark + est tronquée et ignorée. L’entier peut ensuite être utilisé pour extraire l’enregistrement d’une base de données.

Voici un autre exemple de comportement entier qui peut vous prendre au dépourvu:

"abc".to_i     # 0

Dans cet exemple, la méthode + to_i + renvoie + 0 +, car aucun des caractères de la chaîne n’a pu être converti. Cela peut entraîner un comportement indésirable; si un utilisateur entre` + "abc" + `dans votre programme et que vous convertissez cette valeur en un entier et divisez un nombre par cette valeur, votre programme se bloquera, car il ne peut pas être divisé par zéro.

Ruby offre un autre moyen d’effectuer cette conversion. Vous pouvez utiliser les méthodes + Integer + et + + Float + pour convertir les données à la place:

Integer("123")  # 123

Si vous transmettez à la méthode + Integer + une valeur qui ne peut pas être convertie, Ruby générera une erreur:

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

Vous pouvez ensuite gérer l’erreur et envoyer un message à l’utilisateur, lui demandant de fournir de meilleures données. Cette approche est moins pratique, mais elle peut améliorer l’intégrité des données, car vos données ne seront pas contraintes.

Voyons maintenant comment convertir d’autres types de données en sttings.

Conversion de données en chaînes

Ruby fournit la méthode + to_s + pour convertir tout autre type en chaîne:

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

Vous allez souvent convertir des données en chaînes lors de la création d’une sortie de programme.

Disons que nous voulons garder une trace de la dépense calorique quotidienne d’une personne après une séance d’entraînement. Nous voulons montrer cette progression à l’utilisateur, ce qui signifie que nous allons imprimer des valeurs de chaîne et des valeurs numériques en même temps. Créez le fichier + calories.rb + avec le contenu suivant:

calories.rb

user = "Sammy"
calories = 100

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

Nous codons en dur le nom et les calories dans ce programme, mais dans un vrai programme, vous récupériez ces valeurs d’une autre source.

Exécutez le programme avec + ruby ​​calories.rb +.

Lorsque vous exécutez ce programme, vous verrez cette erreur:

OutputTypeError: no implicit conversion of Integer into String

Ruby ne vous laissera pas ajouter la variable + calories + au reste de la sortie, car c’est un entier. Nous ne pouvons pas simplement changer de chaîne en mettant des guillemets, car, encore une fois, les données sur les calories pourraient provenir d’un endroit que nous ne contrôlons pas. Au lieu de cela, nous devons convertir les données de calories en chaîne afin de pouvoir la joindre au reste de la sortie.

Modifiez la ligne de sortie pour convertir le + calories + en chaîne en utilisant la méthode + to_s +:

calories.rb

user = "Sammy"
calories = 100

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

Exécutez le programme à nouveau et vous verrez la sortie que vous attendez:

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

La fonctionnalité string de Ruby convertit automatiquement les objets en chaînes pour vous. Cette méthode est recommandée pour créer une sortie dans les programmes Ruby.

Réécrivez la ligne de sortie de votre programme pour utiliser plutôt l’interpolation de chaîne:

calories.rb

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

Exécutez le programme à nouveau et vous verrez le même résultat.

Les objets Ruby fournissent tous leur propre implémentation + to_s +, qui peut ou non être adéquate pour la sortie. Vous devrez peut-être écrire votre propre code pour obtenir le résultat recherché ou explorer d’autres méthodes pour formater les données.

Voyons comment convertir une chaîne en tableau.

Conversion de chaînes en tableaux

Si vous avez une chaîne, vous pouvez la convertir en un tableau à l’aide de la méthode + split.

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

Vous pouvez spécifier le caractère que vous souhaitez utiliser comme délimiteur en le transmettant en tant qu’argument à la méthode + split +.

Essaye le. Créez un programme appelé + data_import.rb + qui contient une chaîne de requins, séparés par des virgules. Le programme prend les données, les convertit en un tableau, les trie et affiche chaque élément à l’écran:

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 }

Exécutez le programme avec + ruby ​​data_import.rb + et vous verrez cette sortie:

OutputBullhead
Great White
Hammerhead
Tiger
Whale

Les tableaux de Ruby sont des structures de données puissantes. Cela montre une façon de les utiliser pour traiter des données.

Enfin, voyons comment convertir des chaînes et des symboles.

Conversion entre chaînes et symboles

Vous voudrez parfois convertir un symbole en chaîne afin de pouvoir l’afficher et vous voudrez parfois convertir une chaîne en symbole afin que vous puissiez l’utiliser pour rechercher un élément dans un hachage.

La méthode + to_s + de Ruby fonctionne également sur les symboles, vous pouvez donc convertir les symboles en chaînes.

:language.to_s   # "language"

Cela est pratique si vous devez afficher un symbole et vouloir changer son apparence. Par exemple, ce programme prend le symbole +: prenom + et le convertit en chaîne '+ "Prénom" + `, qui est plus lisible par l’homme:

string = :first_name.to_s

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

Pour convertir une chaîne en un symbole, utilisez la méthode + to_sym +, comme ceci:

"first_name".to_sym   # :first_name

Pour prendre la chaîne " Prénom " et la convertir en symbole `+: prénom_ + + ', vous devez mettre toutes les lettres en minuscule et remplacer les espaces par des traits de soulignement:

string = "First name"

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

# Convert to symbol
symbol = string.to_sym

Vous rencontrerez des cas dans lesquels vous voudrez effectuer ces conversions, qu’il s’agisse d’afficher un symbole à l’écran dans un format convivial ou d’utiliser une chaîne pour rechercher une clé dans un hachage utilisant des symboles pour ses clés. Maintenant tu sais comment.

Conclusion

Ce didacticiel a montré comment convertir plusieurs types de données natifs importants en d’autres types de données à l’aide de méthodes intégrées. Vous pouvez maintenant convertir des nombres en chaînes, des chaînes en tableaux et convertir des symboles en chaînes.

Jetez un coup d’œil à ces didacticiels pour poursuivre votre exploration des types de données Ruby: