JeuWeb - Crée ton jeu par navigateur
[Ruby] Les nombres - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Ruby] Les nombres (/showthread.php?tid=4094)



[Ruby] Les nombres - Sephi-Chan - 16-06-2009

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
  • 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