Comprendre les types de données en Ruby

introduction

Lorsque vous écrivez des programmes, vous utilisez data types pour classifier les données. Les types de données indiquent à l’ordinateur comment gérer les données de votre programme. Ils déterminent également ce que vous pouvez faire avec les données, y compris les opérations que vous pouvez effectuer.

Une façon de penser aux types de données consiste à examiner les différents types de données que nous utilisons dans le monde réel. Par exemple, nous utilisons des nombres entiers (0, 1, 2,…), des entiers (…, -1, 0, 1,…) et des nombres irrationnels (π).

Habituellement, en mathématiques, nous pouvons combiner des nombres de différents types et obtenir une sorte de réponse. Par exemple, on peut vouloir ajouter 5 à π:

5 + π

Nous pouvons soit garder l’équation comme réponse pour rendre compte du nombre irrationnel, soit arrondir π à un nombre avec un bref nombre de décimales, puis additionner les nombres:

5 + π = 5 + 3.14 = 8.14

Mais si nous essayons d’évaluer les nombres avec un autre type de données, tel que des mots, les choses commencent à avoir moins de sens. Comment pourrions-nous résoudre l’équation suivante?

sky + 8

Ce n’est pas quelque chose que nous savons immédiatement comment résoudre. L’ordinateur ne peut pas non plus car les données sont de deux types différents. "Ciel" est un mot, et "+ 8 +" est un nombre entier. Lorsque nous écrivons des programmes, nous devons faire attention à la manière dont nous affectons les valeurs et à la manière dont nous les manipulons par le biais d’opérations telles que l’addition, la soustraction, la multiplication et autres.

Dans ce didacticiel, vous découvrirez les principaux types de données natifs de Ruby: les entiers, les flottants, les chaînes, les symboles, les tableaux et les hachages. Il ne s’agit pas d’une enquête exhaustive sur les types de données, mais cela vous aidera à vous familiariser avec les options que vous avez à votre disposition dans vos programmes.

Vous explorerez ensuite le typage dynamique. Les programmes Ruby déterminent les types de données en fonction du contenu des variables. Par conséquent, comprendre le fonctionnement du typage dynamique vous aidera à éviter les situations délicates dans vos propres programmes. Et comme les variables peuvent contenir n’importe quelle valeur, vous apprendrez à identifier le type de données d’une variable.

Commençons par regarder comment travailler avec des nombres entiers en Ruby.

Entiers

Comme en mathématiques, les intégrateurs en programmation informatique sont des nombres entiers qui peuvent être positifs, négatifs ou 0 (…, + -1 +, + 0 +, '+ 1 + ,…). Un entier est aussi communément appelé `+ int +.

Vous pouvez imprimer un entier comme ceci:

print -25
Output-25

Vous pouvez également stocker le nombre entier dans une variable, puis imprimer la valeur en référençant la variable:

my_int = -25
print my_int
Output-25

Vous pouvez aussi faire des maths avec des nombres entiers. Par exemple, vous pouvez calculer la somme de deux nombres et imprimer le résultat:

sum = 116 - 68
print sum
Output48

Lorsque nous écrivons des nombres plus grands, nous avons tendance à utiliser des virgules pour les rendre plus faciles à lire. Par exemple, nous aurions écrit «+ 1 000 000 » pour «un million». Vous ne pouvez pas utiliser de virgule dans votre code, mais Ruby vous permet d’utiliser le caractère de soulignement (` _ +`) pour rendre les grands nombres plus lisibles.

Essaye le:

large_number.rb

large_number = 1_234_567
print large_number

Vous verrez l’entier imprimé sans les traits de soulignement:

Output1234567

Les traits de soulignement vous permettent d’écrire du code plus lisible si vous devez représenter un grand nombre dans vos programmes.

Plus vous en apprendrez sur le langage Ruby, plus vous aurez d’occasions de travailler avec des nombres entiers. Voyons comment travailler avec les nombres réels.

Nombres à virgule flottante

Un nombre à virgule flottante ou un float représente un nombre real. Les nombres réels peuvent être un nombre rationnel ou irrationnel; nombres qui contiennent une partie décimale, tels que + 9.0 + ou + -116.42 +. En d’autres termes, un float dans un programme Ruby est un nombre contenant un point décimal.

Vous pouvez imprimer des flottants dans Ruby comme vous imprimez des entiers:

print 17.3
Output17.3

Vous pouvez également déclarer une variable et affecter un float:

my_float = 17.3
print my_float
Output17.3

Et, comme avec les nombres entiers, vous pouvez aussi faire des calculs mathématiques avec des flottants dans Ruby:

sum = 564.0 + 365.24
print sum
Output929.24

Si vous ajoutez un float à un entier en Ruby, vous obtiendrez un float:

sum = 564 + 365.24
print sum
Output929.24

Ruby considérera tout nombre écrit sans décimales comme un entier (comme dans + 138 +) et tout nombre écrit avec des décimales comme un flottant (comme dans + 138.0 +).

Ensuite, regardons les booléens en Ruby.

Types de données booléens

Les "booléens" servent à représenter les valeurs de vérité associées à la branche logique des mathématiques, qui informe les algorithmes en informatique. En Ruby, nous représentons ce type de données avec l’une des deux valeurs, soit + true ou` + false`.

De nombreuses opérations en mathématiques nous donnent des réponses qui évaluent vrai ou faux:

  • plus grand que

  • 500> 100 + vrai +

  • 1> 5 + faux +

  • moins que

  • 200 <400 + vrai +

  • 4 <2 + faux +

  • égal

  • 5 = 5 + vrai +

  • 500 = 400 + faux +

Comme avec les nombres, vous pouvez stocker une valeur + true ou` + faux` dans une variable:

result = 5 > 8

Vous pouvez ensuite imprimer la valeur booléenne en appelant la fonction + print () +:

print result

Comme 5 n’est pas supérieur à 8, vous verrez le résultat suivant:

Outputfalse

Au fur et à mesure que vous écrivez plus de programmes en Ruby, vous vous familiariserez avec le fonctionnement des booléens et vous expliquerez comment différentes fonctions et opérations évaluant soit vrai + ou + faux + peuvent modifier le cours du programme.

Explorons ensuite l’utilisation du texte dans nos programmes.

Les cordes

A _https: //www.digitalocean.com/community/tutorials/how-to-work-with-strings-in-ruby [chaîne] _ est une séquence d’un ou plusieurs caractères, tels que des lettres, des nombres et des symboles. Les chaînes existent principalement entre guillemets simples (+ '+) ou doubles (`+" + `) dans Ruby, aussi pour créer une chaîne, entourez une séquence de caractères entre guillemets, comme ceci:

"This is a string in double quotes."

Le programme simple «https://www.digitalocean.com/community/tutorials/how-to-write-your-first-python-3-program[hello, World!]» Montre comment utiliser une chaîne de caractères dans la programmation informatique. , comme les caractères qui composent la phrase + Hello, World! + sont une chaîne.

print "Hello, World!"

Comme avec d’autres types de données, vous pouvez stocker des chaînes dans des variables:

output = "Hello, World!"

Et imprimez la chaîne en appelant la variable:

print output
OutputHello, World!

Comme pour les nombres, nous pouvons effectuer de nombreuses opérations sur des chaînes dans nos programmes afin de les manipuler pour obtenir les résultats souhaités. Les chaînes sont importantes pour communiquer des informations à l’utilisateur et lui permettre de renvoyer des informations au programme.

Parfois, vous devez travailler avec des listes de données. C’est là que les tableaux sont utiles.

Tableaux

Un https: //www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby [array] _ peut contenir plusieurs valeurs dans une même variable. Cela signifie que vous pouvez contenir une liste de valeurs dans un tableau et effectuer une itération à travers elles. Chaque élément ou valeur qui se trouve à l’intérieur d’un tableau s’appelle un _element.

Les tableaux sont définis en spécifiant les valeurs entre crochets + [] +, séparés par des virgules.

Un tableau d’entiers ressemble à ceci:

[-3, -2, -1, 0, 1, 2, 3]

Un tableau de floats ressemble à ceci:

[3.14, 9.23, 111.11, 312.12, 1.05]

Voici une liste de chaînes:

['shark', 'cuttlefish', 'squid', 'mantis shrimp']

Comme d’autres types de données, vous pouvez affecter un tableau à une variable:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']

Si nous imprimons la variable, la sortie ressemblera exactement au tableau que nous avons créé:

print sea_creatures
['shark', 'cuttlefish', 'squid', 'mantis shrimp']

Vous accédez à des éléments individuels dans un tableau en utilisant un numéro d’index, commençant par + 0 +.

puts sea_creatures[0]  # shark
puts sea_creatures[2]  # squid

Pour imprimer la dernière valeur, vous pouvez utiliser l’index + -1 +. Ruby fournit également les méthodes + .first + et .` + last + `pour récupérer la première et la dernière entrée, respectivement:

puts sea_creatures.first  # shark
puts sea_creatures.last   # mantis shrimp

Les tableaux dans Ruby peuvent avoir de nombreux types de données. Vous pouvez stocker des chaînes, des symboles et même d’autres tableaux dans un tableau:

record = [
 :en,
 "Sammy",
 42,
 [
   "coral",
   "reef"
 ]
]

Les tableaux dans Ruby sont mutable, ce qui signifie que vous pouvez ajouter des valeurs, supprimer des valeurs et même modifier des entrées dans le tableau.

Parfois, nous avons besoin d’un moyen d’étiqueter des éléments dans un programme. C’est à cela que servent les symboles.

Symboles

Un symbole est un type de données spécial qui agit comme une étiquette ou un identifiant dans un programme Ruby. Les symboles sont immutables, ce qui signifie qu’ils ne peuvent pas être changés. Un symbole ressemble à une déclaration de variable sans valeur. Voici un exemple de symbole:

:time_zone

En Ruby, vous utilisez généralement un symbole pour identifier un élément important, tandis que vous utilisez une chaîne pour le texte que vous devez manipuler ou manipuler. Chaque chaîne d’un programme Ruby est son propre objet, avec son propre emplacement unique en mémoire, même si les chaînes sont identiques.

Mais si vous référencez le même symbole plusieurs fois, vous faites référence au même objet partout dans votre programme, ce qui signifie que vous faites référence au même emplacement mémoire.

Ce concept est en action lorsque nous examinons les hachages, qui vous permettent d’associer des clés à des valeurs.

Des hachis

Un hash est une collection de clés et de valeurs semblable à un dictionnaire. Ces paires clé-valeur constituent un moyen utile de stocker et d’accéder aux données. Les hachages sont souvent utilisés pour stocker des données liées, telles que les informations relatives à un utilisateur. Vous définissez un hachage comme ceci:

{"first_name" => "Sammy", "last_name" => "Shark"}

Vous pouvez affecter des hachages à des variables, tout comme d’autres types de données:

user = {"first_name" => "Sammy", "last_name" => "Shark"}

Pour récupérer les valeurs du hachage + user +, vous utilisez la clé pour la valeur:

print user["first_name"]  # "Sammy"
print user["last_name"]   # "Shark"

Vous pouvez utiliser des symboles comme clés dans votre hachage au lieu de chaînes:

user = {:first_name => "Sammy", :last_name => "Shark"}

L’utilisation de symboles comme touches de hachage est préférable dans la mesure du possible. Chaque occurrence d’un symbole pointe sur le même objet, tandis que chaque occurrence d’une chaîne fait référence à un objet unique. L’utilisation de symboles comme touches permet d’améliorer légèrement les performances et d’utiliser moins de mémoire.

Lorsque vous utilisez des symboles en tant que clés, vous utilisez des symboles pour récupérer les valeurs:

print user[:first_name]  # "Sammy"
print user[:last_name]   # "Shark"

Vous pouvez également utiliser une syntaxe légèrement différente lors de la définition du hachage:

user = {first_name: "Sammy", last_name: "Shark"}

Cette syntaxe est similaire à celle utilisée dans JavaScript et d’autres langages. Cette syntaxe définit les clés en tant que symboles. Vous devez donc accéder aux entrées à l’aide de +: prenom + et +: prénom_nom + au lieu des chaînes " prénom_nom " et " nom_dernier ".

Vous avez examiné plusieurs types de données. Voyons donc comment Ruby fonctionne avec ces types.

Dactylographie dynamique

En Ruby, vous ne déclarez pas explicitement un type de données avant d’attribuer une valeur; l’affectation de la valeur détermine le type de données. Ruby utilise dynamic typing, ce qui signifie que la vérification du type est effectuée au moment de l’exécution plutôt que lors de la compilation, comme dans les langages qui utilisent static typing. Ruby détermine le type de données à partir des données stockées dans la variable. Ceci est similaire à data types in Python et à https://www.digitalocean.com/community/tutorials / comprehension-data-types-in-javascript [types de données en JavaScript].

La variable + t + dans l’exemple suivant peut être définie sur n’importe quel type de données disponible:

t = 42        # t is an Integer
t = "Sammy"   # t is a String
t = :sammy    # t is a Symbol
t = true      # t is a boolean (true)
t             # t is nil

Avec les langages à typage dynamique, vous pouvez réutiliser une variable existante pour contenir différents types de données.

Ceci est utile lors de la conversion de données d’un type à un autre. Par exemple, vous pourriez avoir ce code qui demande à l’utilisateur une valeur numérique:

print "Please enter the length of the room: "
length = gets.chop

Les données que vous obtenez du clavier sont toujours une chaîne. Pour effectuer des opérations mathématiques, vous devez convertir les données de la variable + length + en un nombre. Dans les langages à typage statique, où vous devez déclarer le type de données de la variable avant de pouvoir lui attribuer une valeur, vous aurez besoin d’une nouvelle variable pour contenir les données converties. Mais dans Ruby, comme il est typé dynamiquement, vous pouvez réutiliser la variable + longueur + si vous le souhaitez.

# Convert the amount to a Float.
length = length.to_f

La méthode + to_f + convertit la chaîne en un flottant. Ruby fournit également la méthode + to_i + pour convertir des chaînes en entiers, et la plupart des objets peuvent être convertis en chaînes à l’aide de la méthode + to_s +:

42.to_s                    # "42"
(42.5).to_s                # "42.5"
["Sammy", "Shark"].to_s    # "[\"Sammy\", \"Shark\"]"

Ruby est typé de manière dynamique, mais il ne vous permet pas d’effectuer des opérations sur différents types de données sans les convertir au même type. Par exemple, ce code entraînera une erreur:

print 5 + "5"
OutputTypeError: String can't be coerced into Integer

Comme ce code:

print "5" + 5
OutputTypeError: no implicit conversion of Integer into String

Si vous voulez additionner les nombres pour obtenir «+ 10 », convertissez la chaîne en entier. Si vous voulez les concaténer pour obtenir `" 55 "+`, convertissez l’entier en chaîne.

Le typage dynamique offre de la flexibilité, mais l’inconvénient est que vous ne pouvez pas toujours savoir avec certitude le type de données avec lequel vous travaillez, car la variable peut contenir n’importe quel type disponible. Ruby vous permet d’identifier le type de données.

Identifier les types de données

En Ruby, presque tout est un objet. Entier, Float, Array, Symbol et Hash sont tous des objets Ruby et ils ont tous une méthode appelée + class + qui vous dira quel type ils sont. Même les booléens + true et` + false`, et la valeur + nil sont des objets. Essayez vous-même:

42.class                   # Integer
(42.2).class               # Float
["Sammy", "Shark"].class   # Array
true.class                 # TrueClass
nil.class                  # NilClass

De plus, vous pouvez utiliser la méthode kind_of? + Pour vérifier un certain type de données, comme ceci:

42.kind_of?(Integer)    # true

Ceci est particulièrement utile lorsque vous avez une variable et que vous souhaitez déterminer son type:

# somewhere in the code...
sharks = ["Hammerhead", "Tiger", "Great White"]
...
# somewhere else...

sharks.kind_of?(Hash)   # false
sharks.kind_of?(Array)  # true

Vous pouvez également l’utiliser pour vérifier que les données provenant d’une source externe sont correctes:

if data.kind_of? String
 data = data.to_f
end

Ruby fournit également la méthode + is_a? +, Qui fait la même chose que + kind_of? + Mais peut être un peu plus facile à lire pour certains développeurs:

if data.is_a? String
 data = data.to_f
end

L’utilisation de + class +, + kind_of? + Et + is_a? + Peut vous aider à vous assurer que vous travaillez avec le bon type de données. Au fur et à mesure que vous en apprendrez plus sur Ruby, vous découvrirez d’autres méthodes de traitement des données qui ne nécessitent pas une vérification explicite du type de données.

Conclusion

Vous utiliserez de nombreux types de données différents dans vos programmes Ruby. Vous comprenez maintenant mieux les principaux types de données disponibles dans les programmes Ruby.

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