16-06-2009, 03:52 PM
(Modification du message : 22-09-2010, 02:52 PM par Sephi-Chan.)
Les nombres
Ls nombres sont des données très utilisées dans les programmes. Pour les gérer et les représenter, Ruby utilise plusieurs classes que nous allons découvrir.
Les entiers
Nous avons eu l'occasion de voir les nombres en action un peu plus haut. Notre variable age qui valait 20 ? De quelle classe est-elle ?
Pour le savoir, c'est simple, on utilise la méthode class d'un objet.
Fixnum ? Ah… Moi qui pensait que c'était un entier !?
Et bien oui, Fixnum est bien un entier. En fait, c'est un petit entier. Un nombre entier est de type Fixnum tant qu'il reste en dessous de 1 073 000 000 environ, au delà, il devient un Bignum. Voyons cela en appelant la méthode class sur quelques nombres entiers.
On peut mettre des underscores dans nos nombres pour les rendre plus lisible. Vous pouvez les placer n'importe où (mais pas l'un à côté de l'autre), mais écrire 100_0_0000_0 ne serait pas vraiment lisible.
Si vous trouvez la base 10 démodée, vous pouvez affecter vos nombres dans une autre base :
Quelques méthodes utiles
Comme toute classe, celles qui gèrent les nombres proposent de nombreuses méthodes bien utile.
abs
La méthode abs retourne la valeur absolue d'un nombre.
next et pred
Ces méthodes retournent respectivement l'entier suivant et l'entier précédent.
La méthode next dispose d'un alias, succ. Quand on appelle un alias de méthode, c'est la méthode vers laquelle l'alias pointe qui est appelé. On utilise souvent cela pour garantir la rétrocompatibilité d'un programme.
Les énumérations
Les entiers permettent quelques manipulation sous forme de boucle : les énumération.
upto, downto
upto permet d'énumérer des nombres dans un ordre croissant. Voici deux notations différentes au rendu identique.
downto fait l'inverse : l'entier qui appelle la méthode doit être plus petit que l'argument. Je vous montre une autre méthode de parcours :
Les gammes
Les gammes (en anglais ranges) sont un autre moyen d'aller d'un entier à un entier plus élevé (et nous verrons que ça fonctionne également avec les chaînes de caractères). Voici trois manières de s'en servir. Le rendu est le même pour les trois.
Les décimaux
Ici, ça ressemble beaucoup aux entiers, mais avec des points en plus !
Attention aux trop grandes précisions ! Si on demande à Ruby si 100_000.000_000_000_000_001 est plus grand que 100_000.0, il dira que non. Il se trompe. La parade est d'utiliser la classe BigDecimal, mais nous n'aborderons pas ça dans le cours.
Quelques méthodes utiles
round
La méthode round arrondit à l'entier le plus proche.
floor et ceil
Les méthodes floor et ceil ont respectivement comme rôle d'arrondir à l'entier inférieur et à l'entier supérieur.
Un peu d'arithmétique
Ruby propose quelques opérations de base. Ces opérations peuvent travailler sur des entiers et des décimaux. Si les deux opérandes sont des entiers, le résultat sera entier. Si l'une des opérande est décimale, alors le résultat sera décimal.
Dans le cas d'une division d'un entier par un entier, Ruby effectue une division entière :
L'opérateur modulo (modélisé par l'opérateur %) permet d'avoir le reste de la division entière :
Pour élever un nombre à une puissance n, on utilise l'opérateur ** :
Sephi-Chan
Ls nombres sont des données très utilisées dans les programmes. Pour les gérer et les représenter, Ruby utilise plusieurs classes que nous allons découvrir.
- Les entiers
- Les décimaux
- Un peu d'arithmétique
Les entiers
Nous avons eu l'occasion de voir les nombres en action un peu plus haut. Notre variable age qui valait 20 ? De quelle classe est-elle ?
Pour le savoir, c'est simple, on utilise la méthode class d'un objet.
puts age.class # Fixnum
Fixnum ? Ah… Moi qui pensait que c'était un entier !?
Et bien oui, Fixnum est bien un entier. En fait, c'est un petit entier. Un nombre entier est de type Fixnum tant qu'il reste en dessous de 1 073 000 000 environ, au delà, il devient un Bignum. Voyons cela en appelant la méthode class sur quelques nombres entiers.
puts -100_000.class # Fixnum
puts 100_000_000.class # Fixnum
puts 1_073_000_000.class # Fixnum
puts 1_074_000_000.class # Fixnum
On peut mettre des underscores dans nos nombres pour les rendre plus lisible. Vous pouvez les placer n'importe où (mais pas l'un à côté de l'autre), mais écrire 100_0_0000_0 ne serait pas vraiment lisible.
Si vous trouvez la base 10 démodée, vous pouvez affecter vos nombres dans une autre base :
age = 0b0001_0100 # Base binaire
taille_ecran = 017 # Base octale
temperature = 0x18 # Base hexadécimale
puts "J'ai #{age} ans, mon ordinateur a un écran de #{taille_ecran} pouces. Il fait #{temperature}°C à l'heure où j'écris ces lignes."
# J'ai 20 ans, mon ordinateur a un écran de 15 pouces. Il fait 24°C à l'heure où j'écris ces lignes.
Quelques méthodes utiles
Comme toute classe, celles qui gèrent les nombres proposent de nombreuses méthodes bien utile.
abs
La méthode abs retourne la valeur absolue d'un nombre.
puts 2.abs # 2
puts -3.abs # 3
next et pred
Ces méthodes retournent respectivement l'entier suivant et l'entier précédent.
puts 2.next #3
puts 2.pred # 1
puts -3.next # -2
puts -3.pred # -4
La méthode next dispose d'un alias, succ. Quand on appelle un alias de méthode, c'est la méthode vers laquelle l'alias pointe qui est appelé. On utilise souvent cela pour garantir la rétrocompatibilité d'un programme.
Les énumérations
Les entiers permettent quelques manipulation sous forme de boucle : les énumération.
upto, downto
upto permet d'énumérer des nombres dans un ordre croissant. Voici deux notations différentes au rendu identique.
1.upto(3) { |i| puts i }
1.upto 3 do
puts i
end
Code :
1
2
3
downto fait l'inverse : l'entier qui appelle la méthode doit être plus petit que l'argument. Je vous montre une autre méthode de parcours :
for i in 1.downto -1
puts i
end
Code :
1
0
-1
Les gammes
Les gammes (en anglais ranges) sont un autre moyen d'aller d'un entier à un entier plus élevé (et nous verrons que ça fonctionne également avec les chaînes de caractères). Voici trois manières de s'en servir. Le rendu est le même pour les trois.
(0..2).each do |i|
puts i
end
(0..2).each { |i| puts i }
for i in 0..2
puts i
end
Code :
0
1
2
Les décimaux
Ici, ça ressemble beaucoup aux entiers, mais avec des points en plus !
puts 3.14.class # N'ayez pas peur, ça va fonctionner ! # Float
puts 100_000.000_001.class # Float
puts 4.2e8.class # Float
Attention aux trop grandes précisions ! Si on demande à Ruby si 100_000.000_000_000_000_001 est plus grand que 100_000.0, il dira que non. Il se trompe. La parade est d'utiliser la classe BigDecimal, mais nous n'aborderons pas ça dans le cours.
Quelques méthodes utiles
round
La méthode round arrondit à l'entier le plus proche.
puts 1.5.round # 2
puts -1.5.round # -2
puts 1.2.round # 1
floor et ceil
Les méthodes floor et ceil ont respectivement comme rôle d'arrondir à l'entier inférieur et à l'entier supérieur.
puts 1.2.floor # 1
puts -1.2.floor # -2
puts -2.0.floor # -2
puts 1.2.ceil # 2
puts -1.2.ceil # -1
puts -2.0.ceil # -2
Un peu d'arithmétique
Ruby propose quelques opérations de base. Ces opérations peuvent travailler sur des entiers et des décimaux. Si les deux opérandes sont des entiers, le résultat sera entier. Si l'une des opérande est décimale, alors le résultat sera décimal.
puts 2 + 3 # 5
puts 2.0 - 3 # -1.0
Dans le cas d'une division d'un entier par un entier, Ruby effectue une division entière :
puts 5/2 # 2
puts 5/2.0 # 2.5
L'opérateur modulo (modélisé par l'opérateur %) permet d'avoir le reste de la division entière :
puts 4 % 2 # 0
puts 3 % 2 # 1
Pour élever un nombre à une puissance n, on utilise l'opérateur ** :
puts 2 ** 4 # 16
puts 4 ** 3 # 64
Sephi-Chan