Fraction
CoffeeScript ne possédant pas d'objet Fraction
, on va en créer un,
sous forme d'une classe
(qui est la liste de tout ce que possède une fraction
pour être une fraction). Une fraction aura deux variables d'instance:
n
;d
.f
est une fraction, le numérateur de f
s'obtient avec
f.n
et son dénominateur s'obtient avec f.d
. Mais pour la fraction
courante (celle qu'on est en train de créer, on note this.n
et
this.d
, ou, en abrégé, @n
et @d
.
Pour créer une fraction (lui expliquer comment elle doit naître), on crée une
méthode (ou algorithme) de naissance, appelée constructor
;
c'est une fonction qui, au numérateur et au dénominateur, associe ... rien (elle doit juste
créer la fraction)
On voit que, pour créer une nouvelle fraction, on écrit new Fraction
(avec
le numérateur et le dénominateur de la fraction). Mais
on voit aussi que CoffeeScript n'affiche pas une fraction comme telle, mais en disant
simplement que c'est un objet.
Pour afficher correctement une fraction, on doit créer une méthode d'affichage:
inverse
, donc une
fonction. Mais comme elle ne renvoit rien, on la note avec des parenthèses vides:
Les opérations sur les fractions sont aussi des méthodes, mais elles acceptent
une variable autre
qui est une fraction:
On voit sur l'exemple de a×b qu'il manque une méthode de simplification. Celle-ci fait
appel à l'algorithme d'Euclide, implémenté sous forme d'une fonction pgcd
de deux variables a
et b
L'algorithme d'Euclide consiste à remplacer deux entiers naturels a
et b
simultanément par b
et a%b
(reste
de la division euclidienne de a par b) jusqu'à ("until") ce que b soit nul; à ce moment, la
valeur que possède a
est le pgcd de a et b (du moins, de leur valeur initiale).
En effet, on a pgcd(a,b)=pgcd(b,a%b) (invariant de boucle).
La fonction pgcd s'écrit ainsi en CoffeeScript:
Pour simplifier une fraction, on divise son numérateur et son dénominateur par leur pgcd; on le fait dans la méthode de création d'une fraction pour que toutes les fractions soient irréductibles:
Fraction
Le code suivant peut être compilé pour obtenir un fichier fractions.js
qu'il suffit d'insérer dans l'entête d'un document html, pour pouvoir programmer avec les fractions: