m2scideclare Donner des indices pour aider M2SCI...

## Syntaxe

                %m2scideclare variable_name|sizes|data_type|property

## Arguments

variable_name

  nom de la variable déclarée. Ce nom peut être un champ de Struct (e.g. `x(1,2).nom`) ou décrire le contenu d'une Cell en utilisant la syntaxe `x(1,2).entries`.

  NOTEZ que pour les Cells et les Structs `*` peut être utilisé comme index.
sizes

  Tailles de la variable déclarée, séparées par des espaces. Si une taille est inconnue, la remplacer par `?`.

  NOTER qu'une chaînes de caractères Matlab (définies entre apostrophes) est considérée comme un vecteur de caractères adressables un à un. En conséquence, la taille de 'string' est `|1 6|` (non `|1 1|`).
data_type & property

  Type et sous-type de la variable. Les valeurs possibles sont présentées dans la page décrivant Type.

  Les valeurs de propriétés qui ne sont pas prédéfinies comme constantes dans m2ci -- telles que 'int8' ou 'Axes' -- doivent être spécifiées sans apostrophes ni guillements dans la ligne %m2scideclare.

## Description

La conversion des expressions du langage Matlab en équivalent Scilab dépend notamment du type et de la taille des objets impliqués. Plus le convertisseur M2SCI (`mfile2sci`) connait ces informations, plus précise et directe sera la conversion.

Dés lors que les données originelles sont littéralement définies dans le code Matlab à convertir -- comme dans l'instruction `a = [1 3 5]` indiquant directement le vtype==Double, la property=Real, et la taille `|1 3|`, M2SCI sait alors tout ce qu'il faut savoir à propos de `a` pour convertir les expressions ultérieures dans lesquelles `a` intervient.

Cependant, l'information manque fréquemment. En particulier, en tête des macros, le type et les dimensions des arguments d'entrée ne sont pas donnés (pouvoir s'en abstenir est d'ailleurs un des avantages/soulagements des langages évolués tels que Matlab ou Scilab). Des lignes d'instructions `%m2scideclare` peuvent être alors ajoutées (en commentaire Matlab, donc) pour donner ces informations au convertisseur, avant de lancer celui-ci.

Lors de la conversion, lorsqu'une ligne `%m2scideclare` est rencontrée, le convertisseur examine la liste des symboles déjà connus. Cette liste est établie au cours de la conversion et est continuellement mise à jour, en fonction des symboles déjà rencontrés et convertis, et des lignes `%m2scideclare` antérieures déjà prises en compte :

- Si `%m2scideclare` décrit une nouvelle donnée, celle-ci est ajoutée à la liste des objets partiellement ou totalement connus.

- Si l'objet décrit par `%m2scideclare` est déjà connu, le convertisseur compare les informations apportées par `%m2scideclare` avec celles déjà connues.

  - Si ces informations coincident ou sont compatibles, le convertisseur éventuellement complète le registre (par exemple si la property était Unknown et est précisée par `%m2scideclare`), ou ne fait rien.

  - Sinon, une ligne d'alerte est générée par `%m2scideclare` dans le fichier converti, et les informations données par `%m2scideclare` sont ignorées.

  Ce fonctionnement peut être mis à profit par les développeurs souhaitant corriger ou étendre le convertisseur, en utilisant `%m2scideclare` dans les tests : si le type, le sous-type ou les dimensions de l'objet considéré ne sont pas ceux attendus et donnés par `%m2scideclare`, l'alerte générée sera exploitée pour corriger le convertisseur.

  Si en tant qu'utilisateur du convertisseur vous rencontrez une telle alerte `%m2scideclare` qui vous semble incompatible avec ce que vous connaissez de votre code, vous pouvez rapporter le cas sur https://gitlab.com/scilab/scilab/-/issues

## Exemples

- `%m2scideclare var1|2 3|Double|Real`

  var1 est déclarée comme une matrice de Doubles de taille 2x3 et contenant des données réelles

- `%m2scideclare var2|2 3 10|Double|Complex`

  var2 est déclarée comme une hypermatrice de Doubles de taille 2x3x10 et contenant des nombres complexes.

- `%m2scideclare var3(1,2).name|1 10|String|?`

  var3 est déclarée comme un tableau de Structs contenant une chaîne de caractères de taille 1x10 dans le champ 'name' de la Struct à l'indice (1,2)

- `%m2scideclare var4(1,5).entries|1 ?|Boolean|?`

  var4 est déclarée comme un tableau de Cells contenant un vecteur ligne de booléens à l'indice (1,5)

- `%m2scideclare var4(1,6).entries|? ?|Int|?`

  var4 est déclarée comme un tableau de Cells contenant un vecteur ligne de booléens à l'indice (1,5) et des données entières à l'indice (1,6).

- `%m2scideclare var5(*,*).name|1 ?|String|?`

  var5 est déclarée comme un tableau de Structs contenant une chaîne de caractères de taille 1xn dans chaque champ 'name'

- `%m2scideclare var6(2,*).entries|1 3|Double|Real`

  var6 est déclarée comme un tableau de Cells contenant un veteur de Doubles de taille 1x3 dans chaque élement de sa seconde ligne.

## Voir aussi

- Type

## Historique

< 5.0 `%m2sciassume` est obsolète et est remplacée par `m2scideclare`.
6.1.1 `m2scideclare` accepte tous les nouveaux vtypes et valeurs de sous-types `Polynomial`, `Function/Macro`, `Function/Builtin`, `String/Char`, `Handle/'Figure'`, `Handle/'Axes'`, `Int/'int8'`, `Int/'int16'`, `Int/'int32'`, `Int/'int64'`, `Int/'uint8'`, `Int/'uint16'`, `Int/'uint32'`, `Int/'uint64'`, `Sparse/Boolean`. Le vtype `Sparse` devient effectivement utilisable.