Dans un jeu, vous aurez besoin d'un certain nombre de données, de différents types. Il existe 5 types de données de base, que vous retrouverez dans tous les langages de programmation: texte, nombre entier, nombre à virgule, tableau et objet (dans certains langages, le terme désignant le type "objet" peut varier).
En règle générale, vous trouverez ces types de données sous leur appellation anglophone:
- Le type texte est appelé
String
- Le type nombre entier est appelé
Integer
- Le type nombre à virgule est appelé
Float
- Le type tableau est appelé
Array
- Le type objet est appelé
Object
En JavaScript, les types nombre entier, et nombre à virgule sont regroupés sous le type Number
.
Définir des données variables et non variables
Définir une donnée permet de stocker une information en mémoire, pour la réutiliser plus tard à différents endroits de notre script.
Pour définir une donnée, on utilise soit le mot-clé const
, soit le mot-clé let
, un dernier mot-clé var
peut être aussi utilisé dans des cas plus rares. On dira généralement "déclarer une variable" ou "déclarer une constante".
Pour définir une donnée, un mot-clé const
, let
ou var
précède le nom de la donnée, suivi par le signe égale =
et enfin la valeur de notre donnée.
La différence entre const
, let
et var
réside dans le fait qu'une donnée définie avec const
est non modifiable par la suite, elle est désignée comme constante. Si vous essayez de la modifier par la suite, une erreur sera émise et bloquera l'exécution du reste du code.
// Une donnée non modifiable par la suite:
const COULEUR_ECRAN = 'white'
// Une donnée modifiable:
let couleurBalle = 'white'
Par convention, le nom des constantes est écrit en LETTRE_CAPITALE, avec un
underscore
entre chaque mot, afin de les différencier facilement des variables.
Sensibilité à la casse
La déclaration des données est sensible à la casse, ainsi la donnée nomVariable
sera différente de la donnée nomvariable
:
let couleurRaquette = 'green' // Première donnée
let CouleurRaquette = 'blue' // Autre donnée
// ꜛ Remarquez ici la majuscule
Il est fortement déconseillé de nommer deux données différentes avec un nom similaire, car cela peut devenir très confus. Si vous devez créer deux données similaires mais différentes, pensez à ce qui les différencie pour les dissocier, par exemple:
let couleurRaquetteDroite = 'green' let couleurRaquetteGauche = 'blue'
Il y a différents types de casse, on parle aussi de "letter case". En Javascript, la norme pour les variables est d'utiliser la camel case. C'est-à-dire pas de majuscule au début, puis une majuscule à chaque nouveau mot, et tout collé.
let variableEnCamelCase = 'Chameau'
Pour modifier une variable, on utilise directement son nom avec =
, sans les mots-clé const
, let
ou var
:
// Modification d'une variable:
couleurBalle = 'red'
⚠ Attention: si vous tentez de modifier une donnée que vous avez oublié de déclarer au préalable avec l'utilisation des mots-clés let
ou var
, aucune erreur de script ne sera transmise, le langage la lira comme une déclaration, qui par défaut utilise var
, ce qui peut avoir de fâcheuses conséquences que nous aborderons plus tard.
Ainsi, l'expression suivante seule est une déclaration var
et n'est en aucun cas la modification d'une donnée existante:
couleurScore = 'yellow'
Lire une donnée
Lire une donnée consiste à en récupérer sa valeur dans la mémoire. Pour cela, il suffit de nommer la variable à l'endroit où vous voulez la lire, pour l'afficher à l'écran, ou pour effectuer des calculs dessus par exemple:
let largeurEcran = 800
print(largeurEcran) // ceci affichera 800
let demiEcran = largeurEcran / 2
print(demiEcran) // Ceci affichera 400
On récupère les données contenues dans la variable largeurEcran
à l'instant de la lecture du nom de la variable dans le code.
C'est-à-dire que si par la suite vous modifiez largeurEcran
, cela ne sera pas rétroactif sur demiEcran
.
À la fin de cet exemple, demiEcran
vaudra toujours 400
:
let largeurEcran = 800
let demiEcran = largeurEcran / 2 // 400
largeurEcran = 600 // Modification de la variable largeurEcran qui n'affecte pas demiEcran
print(demiEcran) // Affichera encore 400 et pas 300
Quel type utiliser ?
Les types primaires: textes et nombres
L'utilisation des deux types les plus primaires est évidente, si vous devez définir une donnée comportant un mot ou une phrase, alors vous utiliserez le type String
, simplement en entourant la donnée de guillemet, d'apostrophe ou de "backticks".
Ces trois déclarations sont identiques:
let phraseGameOver = 'GAME OVER'
let phraseGameOver = "GAME OVER"
let phraseGameOver = `GAME OVER`
Si vous devez définir un nombre, à virgule ou non, vous utiliserez le type Number
, en n'utilisant pas de guillemet, comme nous l'avons déjà fait dans les exemples précédents.
let scoreJoueur = 12
let positionJoueur = 522.4
Notez que pour les nombres à virgules, vous utiliserez en fait toujours le point comme séparateur, car la virgule fait partie intégrante du langage lui-même, comme vous le découvrirez juste en dessous dans la définition de variables de type tableau et objet.
Les types dits "complexes": tableau et objets
Les données de type primaire pourraient suffire à stocker à peu près toutes les données du jeu. Vous pourriez par exemple stocker la position de la balle dans 2 variables de type Number
// Plusieurs données de type Number
let balleX = 50
let balleY = 100
Le problème étant qu'il s'agît de deux variables différentes, qui sont utilisées pour un seul et même élément. Imaginez que votre balle ait une couleur, un rayon, une trajectoire, une vitesse. Ces différentes données sont toutes nécessaires à définir complètement votre élément balle.
Dans ce cas-là, nous utilisons des types de variables (ou constantes) plus complexes. Nous pourrions par exemple utiliser un tableau.
Un tableau permet de déclarer une variable qui sera une liste de données, il se définit par l'utilisation de crochets contenant nos données, séparé par des virgules:
// Une variable de type Array
let balle = [50, 100] // Coordonnées de la balle
Comme précisé dans la section du type
Number
, la virgule est utilisée par le langage ici pour séparer chacune des valeurs, c'est pourquoi vous utiliserez des points pour les nombres à virgule. Ainsi, le tableau suivant contient deux nombres à virgules:let balle = [45.65, 75.12]
Lors de la déclaration d'un tableau, chaque donnée est identifiée par un "index", le système donne un index différent à chaque donnée, en commençant par 0, puis 1, puis 2, etc.
Ainsi, pour récupérer les coordonnées de notre balle, nous utiliserons le nom du tableau (ici balle
) suivi de l'index de la donnée à récupérer, entre crochets:
balle[0] // Lecture de la première donnée du tableau
balle[1] // Lecture de la seconde donnée du tableau
Vous comprendrez de vous-même que ce type de structure n'est pas idéal pour notre cas d'utilisation, car au final, il n'est pas très évident de savoir qui de 0
ou de 1
contient la coordonnée verticale ou horizontale de la balle.
C'est pourquoi il existe le type Object
, qui permet de regrouper toutes les données de notre balle dans une seule et même variable, tout en donnant la possibilité de nommer chaque donnée. La déclaration d'un objet se fait à l'aide des accolades contenant la liste des données. Dans le cas d'un objet, on dit que chaque donnée est identifiée par sa clé. La clé est associée à sa valeur par l'utilisation des deux-points :
à la place du signe =
:
// Une variable de type Object regroupant
// l'ensemble des données de la balle
let balle = { x: 0, y: 0 }
Pour lire les données dans un objet, vous pouvez utiliser soit la même notation que la lecture des données dans un tableau, soit la notation "point":
balle.x
balle.y
// Fonctionnera de la même manière:
balle["x"]
balle["y"]
Bien que plus concise, la première méthode a ses limites, que nous découvrirons au moment opportun pour ne pas complexifier ici la compréhension.
Exercices
Définir des variables de différents types
Définir trois variables ayant pour noms et valeurs suivantes:
taille
, le nombre 167poids
, le nombre à virgule 59,5message
, la chaîne de caractères "coucou"// Practice-code // Complétez ici return [taille, poids, message, estMajeur] // Hidden line // Doit valoir : [167, 59.5, coucou, false]
Définir un tableau
Créez une variable nommée
points
de type tableau intégrant trois valeurs: 35, 98 et 65.// Practice-code // Complétez ici return points // Hidden line // Doit valoir : [35, 98, 65]
Modifier un tableau
Modifiez la seconde valeur du tableau
points
créé précédemment pour la remplacer par 78.// Practice-code let points = [35, 98, 65] // Hidden line // Complétez ici return points// Hidden line // Doit valoir : [35, 78, 65]
Définir un objet
Créez une variable nommée
vaisseau
de type objet intégrant ayant les propriétésx
ety
ayant pour valeurs respectives 50 et 100.// Practice-code // Complétez ici return vaisseau // Hidden line // Doit valoir : {x: 50, y: 100}
Modifier un objet
Modifiez la seconde la propriété
x
de l'objetvaisseau
créé précédemment pour la remplacer par 78.// Practice-code let vaisseau = {x: 50, y: 100 }// Hidden line // Complétez ici return vaisseau // Hidden line // Doit valoir : {x: 78, y: 100}