typeof type explicite ou code de surcharge d'un objet Scilab

## Syntaxe

                t  = typeof(object)
                oc = typeof(object, "overload")

## Paramètres

object

  un objet Scilab quelconque

t

  texte (un ou plusieurs mots séparés): nom du type de `object`

oc

  mot (sans espace) : nom du code à utiliser pour surcharger une function devant traiter ce type d'`object`.

## Description

`t = typeof(object)` retourne une des expressions texte suivantes :

string | `object` est une matrice ou hypermatrice de caractères et/ou de textes.
boolean | `object` est une matrice ou hypermatrice booléenne.
int8 ou int16 ou int32 ou int64 ou uint8 ou uint16 ou uint32 ou uint64
| `object` est une matrice ou hypermatrice d'entiers [positifs ou signés] encodés sur 8, 16, 32 or 64 bits (voir inttype).
constant | `object` est une matrice ou hypermatrice de nombres décimaux réels ou complexes.
polynomial | `object` est une matrice ou hypermatrice de polynômes à coefficients réels ou complexes.
rational | `object` est une matrice ou hypermatrice de fractions rationelles (telle qu'une matrice de transfert), à coefficients décimaux réels ou complexes.
handle | `object` est un handle (identifiant) graphique. Le (sous)type d'élément graphique (Figure, Axes, Polyline, Compound, etc) est indiqué par leur attribut `.type`. Voir les exemples ci-après.
list | `object` est une liste simple.
st | `object` est une structure ou un nD-tableau de structures.
ce | `object` est une cell ou un nD-tableau de cells.
boolean sparse | `object` est une matrice booléenne creuse. Hypermatrices booléennes creuses non supportées.
sparse | `object` est une matrice creuse de nombres décimaux réels ou complexes. Hypermatrices numériques creuses non supportées.
fptr | `object` est une primitive Scilab, aussi appelée gateway (code C, C++ ou Fortran compilé).
function | `object` est une function écrite en langage Scilab. Voir aussi deff.
library | `object` est une bibliothèque de functions écrites en langage Scilab et compilées.
pointer | `object` est un pointeur, par exemple utilisé par lufact.
implicitlist | `object` est une liste implicite avec un index formel polynomial, utilisée en indexation. Voir n:$ et : (colon)
listdelete | est retourné par `typeof(`null()`)` . Voir null().
void | est le typeof des éléments de list() indéfinis.
Listes typées T-Lists ou M-Lists :
Si l'`object` est une tlist ou une mlist, `typeof` retourne le nom du type défini pour la liste, lequel est enregistré dans le premier élément de la liste.
Types de T-List ou M-List prédéfinis et réservés :
dir | `object` est la réponse d'une instruction dir(..). Les champs définis sont `name`, `date`, `bytes`, et `isdir`.
state-space | `object` est une réprésentation d'état d'un système dynamique (voir syslin).
program | `object` est une liste descrivant le code interne d'une fonction compilée écrite en Scilab (voir macr2tree).
cblock | `object` est un bloc de colonnes de mêmes hauteurs mais de types de contenus différents, tel que produit par mfscanf.
XMLDoc | `object` est un pointeur de document XML ouvert créé avec xmlRead, xmlReadStr, htmlRead, ou htmlReadStr. D'autres typeof d'objets XML sont disponibles et réservés.
H5Object | `object` est un identifiant de fichier HDF5 ouvert avec h5open. D'autres typeof d'objets HDF5 sont disponibles et réservés : Voir HDF5 Objects.
uitree | `object` est un arbre graphique interactif, ou un composant (branche, feuille) d'un tel arbre, créé avec une des fonctions dédiées. Voir par exemple uiCreateNode.
Types de T-list réservés utilisés par Xcos :
Block | `object` est un bloc Xcos.
cpr | `object` est une liste contenant les résultats de la compilation d'un schéma Xcos.
diagram | `object` est une liste définissant un schéma Xcos : paramètres initiaux, références aux blocs, liens interbloc et étiquettes texte le composant...
graphics | `object` est une liste affectée au champ `.graphics` d'un bloc.
Link | `object` est une liste définissant et paramétrant un lien entre 2 blocs Xcos.
model | `object` est une liste affectée au champ `.model` d'un bloc.
params | `object` est une liste contenant les paramètres de configuration d'un schéma Xcos.
scsopt | `object` est une liste contenant les options graphiques d'édition d'un schéma Xcos.
scs | `object` est une liste contenant les résultats statiques de la compilation d'un schéma Xcos.
xcs | `object` est une liste contenant les résultats dynamiques évoluant au cours d'une simulation Xcos.
Text | `object` est une liste définissant une étiquette de texte dans un schéma Xcos.

## Exemples

    // Caractères et textes
    t = ["a" "Hello"   "à é è ï ô û ñ"
         "1" "Bonjour" "указывает тип объекта"
         ";" "Chao"    "オブジェクトの型"
        ]
    typeof(t)

    // Booléens
    typeof(%t)
    typeof("abc"=="def")
    hm = grand(2,2,2,"uin",0,9)<5
    typeof(hm)

    // Entiers encodés
    [ typeof(uint8(%pi))  typeof(int8(-%pi))
      typeof(uint16(%pi)) typeof(int16(-%pi))
      typeof(uint32(%pi)) typeof(int32(-%pi))
      typeof(uint64(%pi)) typeof(int64(-%pi))
    ]

    // Nombres décimaux
    n = 1:0.3:2
    typeof(n)
    hm = grand(2,2,2,"uin",0,9)
    typeof(hm)

    // Décimaux entiers
    n = 1:7
    typeof(n)

    // Nombres complexes
    n = [%i 1-%i %pi - 3*%i]
    typeof(n)

    // "constant" spéciale
    typeof([])   // empty matrix

    // Polynômes
    n = [ %z (1-%z)^2]
    typeof(n)
    n = [ 3*%i + %z (1-%i*%z)^2]
    typeof(n)

    // Fractions rationnelles (polynomiales)
    r = [%s/(1-%s) (1+%s)^2/(1-%s)]   // à coefficients réels
    typeof(r)
    r = [%s/(%i-%s) (%i+%s)^2/(1-%s)] // à coefficients complexes
    typeof(r)

    // Matrices creuses
    // ----------------
    w = sprand(100,100,0.001)
    typeof(w)     // numérique
    typeof(w==w)  // booléenne

    // Functions et bibliothèques écrites en Scilab
    // --------------------------------------------
    deff('y=f(x)','y=2*x');  // Function en langage Scilab
    f(%pi)
    typeof(f)
    typeof(cosd)    // écrite en Scilab

    typeof(corelib) // Bibliothèque de functions en langage Scilab

    typeof(sin)     // Fonctions primitives non éditables
    mysin = sin;
    mysin(%pi/2)

    // Identifiants graphiques
    // -----------------------
    clf
    plot2d()
    typeof(gcf())
    // Le type graphique de l'objet graphique est indiqué par l'attribut "type" :
    gcf().type
    gca().type
    gce().type

    close(gcf())

    // Conteneurs de données hétérogènes
    // ---------------------------------
    // Liste simple
    L = list(%pi, %t, %z, %s/(1-%s), "Bonjour", sin, cosd, list("list_in_list", 432));
    typeof(L)

    // Tableau de cells
    C = {%pi, %t, %z ; %s/(1-%s), "Bonjour", list("list_in_list", 432) }
    typeof(C)

    // (Tableau de) Structures
    S.num = %pi;
    S.b = %t;
    S(2).t = "Bonjour"
    typeof(S)

    // Indices formels génériques
    // --------------------------
    typeof($)
    typeof(:)    // équivalent à "eye()"  (tous les éléments)
    typeof(3:$)

    // Typeof de deletion ou d'éléments indéfinis
    // ------------------------------------------
    typeof([])      // matrice vide
    typeof(null())
    L = list(%pi, ,"hey!")
    typeof(L(2))   // élément indéfini

    // typeof de T-Listes ou M-listes à façon :
    // --------------------------------------
    L = tlist(['myLongTypeOf','a','b'], 18, 'Scilab');
    typeof(L)

    // Typeof de T-List ou M-list prédéfinis réservés
    // ----------------------------------------------
    typeof(dir())  // listage du contenu d'un dossier
    //
    c = macr2tree(sind); // Code interne d'une macro Scilab
    typeof(c)
    fieldnames(c)'
    c.name
    //
    doc = xmlReadStr("<root><a att=""foo"">Hello</a></root>");
    typeof(doc)
    xmlDelete(doc)
    //
    x = 1;
    save(TMPDIR + "/x.sod", "x"); // Les fichiers SOD d'enregistrement d'objets
    //                            //  Scilab sont au format HDF5
    a = h5open(TMPDIR + "/x.sod");
    typeof(a)
    h5close(a)

## Voir aussi

- type
- inttype
- overloading
- isreal
- strings
- poly
- rlist
- null
- sparse
- issparse
- syslin
- dir
- XML Objects
- HDF5 Objects

## Historique

6.0

- Ajout de l'option "overload".
- Ajout des typeof "uint64" et "int64".
- Suppression du typeof "hypermat". Toute hypermatrice de type "simple" homogène est désormais encodée de manière native.
- typeof "listdelete" ajouté (tel que retourné pour null()).
- typeof() peut désormais être appliquée aux éléments non définis des listes. Le nouveau typeof "void" est retourné.
- Ajout des typeof "listdelete" et "void".
- Le typeof des T-lists et M-lists était limité à 8 caractères. Les noms de types peuvent maintenant être plus longs.
- Typeof "size implicit" renommé en "implicitlist" (`1:$`)
- Page d'aide revue.