Skip to content

Débuter

Antoine Tran edited this page Mar 5, 2019 · 3 revisions

Si vous n'avez pas encore ajouté la librairie à vos dépendances, référez vous au README

L'objet courant de la librairie est MaskExpression. Il s'agit d'une classe muable qui stocke :

  • une expression mathématique sous forme de chaîne de caractères (String)
  • les variables de l'expression sous forme de tableau de caractères (char[])

Pour effectuer des opérations avec un object de type MaskExpression, la classe MaskOperator sera nécessaire. L'opérateur se récupère avec la méthode statique begin() ou begin(MaskExpression). Pour chaque calcul, l'opérateur aura besoin de :

  • Un objet MaskExpression, objet sur lequel l'opérateur va se baser (= in)
  • Un objet MaskExpression, objet dans lequel le résultat sera écrit (= out)
  • Un boolean, qui définit si out sera utilisé comme prochain in par défaut, lors du prochain calcul. Utile uniquement pour l'enchaînement de calculs. Par exemple, pour calculer la dérivée seconde d'un polynôme, le boolean doit être à true: c'est le résultat de la dérivée qui doit être dérivé à nouveau. Définir le boolean à false dériverait le polynôme une première fois, puis dériverait à nouveau ce même polynôme de départ. Un autre exemple est le calcul d'images d'une fonction. Le boolean doit être à false, pour qu'une fois une première image calculée, la deuxième image soit calculée à partir de la fonction de départ, et non du résultat du premier calcul d'image.

Note : Si la méthode begin(MaskExpression) est utilisée, les paramètres in et out pourront être ignorés, le mask spécifié dans l'appel de la méthode sera utilisé comme in et out. Le boolean n'a donc aucune importance.

Voici un exemple (pseudo code) :

MaskExpression exp = new MaskExpression("4x+5");
MaskExpression vide = new MaskExpression();

/* écrit le résultat de l'opération faite à partir de `4x+5` dans `empty`. Comme le boolean est sur `false`, le prochain
   calcul sera fait à partir de `exp` (si la valeur `in` est laissée pour vide). S'il était sur `true`, le prochain calcul
   aurait été fait à partir du résultat du premier calcul */
MaskOperator.begin().faireUneOperation(exp, vide, false); 
 

Pour des exemples concrets, référez vous aux autres pages du wiki qui traitent des calculs spécifiques.

Il peut arriver qu'un calcul doit être fait, et que le mask spécifié dans out est inutile, car seul le résultat du calcul est voulu. On pourrait donc simplement créer un objet out à chaque calcul et ne jamais l'utiliser. En revanche, cela peut causer des pertes de performances remarquables. Pour éviter cela, MaskExpression contient une variable de type MaskExpression dite temporaire, qui est supposée "subir" les calculs, pour pouvoir ensuite appeler une autre opération sans retenir le mask. Voici un exemple d'utilisation de la variable temporaire :

package test;
import net.akami.mask.math.*;

public class MainTester {

    public static void main(String... args) {
        // On cherche à calculer des images de cette fonction, de x=0 à x=50
        MaskExpression courbe = new MaskExpression("x^2 -6x -4");
        MaskOperator op = MaskOperator.begin();
        for(int i = 0; i <= 50; i++) {
            op.imageFor(courbe, MaskExpression.TEMP, false, r -> System.out.println(op.asInt(r)), String.valueOf(i));
            /* Est l'équivalent de : 
            op.imageFor(courbe, MaskExpression.TEMP, false, String.valueOf(i));
            System.out.println(op.asInt(MaskExpression.TEMP)); */
        }
    }
}

Note : Dans la suite du wiki, le terme Mask tout court peut être utilisé. Il s'agit bien d'un abus de langage pour dire MaskExpression