# Types * `nil` est l'équivalent du Python `None`. Une variable que l'on utilise avant de l'avoir affectée sera considérée comme `nil`. * `boolean`, comme en Python. Les valeurs possibles pour les booléens sont `true` et `false`. *Rappel : en Python, c'est `True` et `False`.* * `number`. Pour lua, il n'y a que des nombres réels, des flottants (`float`en Python) en double précision, c'est à dire en 64 bits. * `function`. Les fonctions sont des types de données comme les autres et définir une fonction revient à affecter une fonction à une variable. Ce n'est pas différent en Python. * `string` pour les chaînes de caractères. *Idem en Python, mais en Python le nom est `str`.* * `table` pour les tableaux indexés ou associatifs. Il s'agit d'un tableau dynamique c'est à dire que l'on peut changer sa taille et y placer des données de natures différentes. Ce sera l'équivalent en Python de `list` et `dict`. Comme les `{...}` en Javascript, la table sert a définir des objets qui sont des dictionnaires dotés d'attributs, certains de ces attributs étant des fonctions. * `userdata`. Lua laisse la possibilité de définir des types de données un peu comme un `struct` en C. * `thread`. Je laisse cela pour l'instant car je n'ai pas encore eu l'occasion de creuser. Il s'agit de travailler sur les instances d'exécution des fonctions. ### fonction type Comme en Python, on pourra interroger le type d'une donnée. La fonction `type` renvoie le type sous forme d'une chaîne de texte. ```lua -- fonction type en Lua x = 45 = type(x) -- renvoie "number" if type(x) == "number" then print("c'est un nombre") end ``` ```python # fonction type en Python x = 45 type(x) # renvoie la classe int if type(x) == int: print("c'est un entier") ``` Notez la légère différence : pour Python, `type` renvoie la classe elle même alors que Lua renvoie seulement le nom du type. ### transtypage Comme en Javascript, Lua fait des transtypages automatiques. Par exemple, si on veut concaténer un nombre à une chaîne de texte : ```lua -- Lua x = 45 chaine = "valeur de x = "..x -- l'opérateur .. sert à concaténer ``` ```python # Python x = 45 chaine = "valeur de x = "+str(x) ``` Dans le cas Python, on doit expliciter le transtypage de `x` avec `str`. Bien sûr, on pourrait utiliser la méthode `format()` bien plus efficace. Autre exemple Lua : ```lua x = 18 + "3" -- "3" est transtypé automatiquement en 3 ```