Les essentiels de JS
Variables
Javascript n'oblige pas des types stricts, mais il y a quand même un certain nombre de types de données de base supportés :
number
: une valeur numériquestring
: une chaîne de caractèresboolean
: une valeur boolean (soittrue
, soitfalse
)object
: un dictionnaire de tuples, de type clé-valeurarray
: un tableau de valeurs de type simple ou objectfunction
: une déclaration de fonction
Le type d'une variable est, par défaut, implicite et n'est pas imposé.
Pour optimiser notre code, on utilise le mot clé const
(au lieu de let
) pour indiquer les variables qui ne changent pas de valeur :
Nous utilisons des objets
afin de rassembler un ensemble de valeurs, indexés par leur clé. On peut rappeler ou modifier ces valeurs en les adressant via leur chemin d'accès :
Functions
Javascript est essentiellement un langage fonctionnel dans lequel la fonction est très haut placé.
On précise une fonction avec le mot clé function
:
On invoque une fonction en citant son nom suivi par des parenthèses (dans lequel on précise de valeurs à passer à la fonction) :
Ceci est normal pour la plupart des langages de programmation.
La différence en JS est qu'une fonction peut être aussi traitée comme une valeur, en l'affectant à une variable :
Cela veut dire que je pourrais définir une fonction, ensuite passer la référence de cette fonction comme paramètre partout pour invocation.
Comportement dynamique
Le fait de pouvoir affecter une fonction à une variable nous permet d'adapter le comportement de notre code en fonction des conditions dynamiques.
Encapsulation
Intelligemment utilisés, les fonctions nous permettent d'encapsuler différentes données et fonctions qui sont liées :
On commence par définir la fonction MyService
, qui va encapsuler le nom et age d'une personne.
Nous invoquons cette fonction à l'aide du mot clé new
(ligne 15) qui va traiter la fonction comme constructor
. C'est-à-dire : un nouvel object
est créé comme résultat de la fonction, même si a priori la fonction ne retourne pas de valeur (notez qu'il n'y a pas de mot-clé new
).
Au sein de cette fonction, on peut ajouter et modifier les valeurs de cet objet (ou l'instance) crée par le constructor
, en utilisant le mot clé this
pour l'adresser (comme on voit sur la ligne 3, 4 et 10.
Dans l'exemple, on crée une nouvelle clé age
sur l'objet this
, et on l'affecte la valeur de 40
. Notez aussi, qu'on déclare une fonction avec la clé publicFn
qui pourrait être invoqué plus tard, et qui va utiliser les valeurs sur le même objet this
.
Une grande différence de Javascript contre des langages type C# ou Java est la possibilité de définir des fonctions dans les fonctions !
Par exemple :
Callbacks
Si on peut affecter une fonction à une variable, on peut également passer une fonction comme paramètre à une autre fonction.
L'utilité de cette technique est le suivant : exécuter la fonction fn
, et je vous passe une référence à une autre fonction à invoquer quand c'est fini
Essayez cet exemple. Notez qu'on peut modifier l'acheminement du code en passant une fonction différente à chaque fois.
Dans le contexte de l'exemple précédent, pourquoi le code suivant n'est pas valide ?
Fonctions flèches (arrow functions)
Jusqu'au présent, nous avons utilisé le mot clé function
afin de déclarer nos fonctions.
Il y a une autre manière de déclarer des fonctions qui sont parfois plus brèves :
En brève, on précise juste la liste de paramètres suivis par la flèche (=>) suivi par le corps de la fonction.
Il y a beaucoup de différences entre une fonction régulière et une fonction anonyme (fonction flèche) :
Une fonction flèche ne construit pas d'objet
this
. Le mot cléthis
réfère à celui qui existait déjà (le parent) lors de la création de la fonctionUne fonction flèche ne peut pas être invoqué avant d'être déclaré. En effet, les effets de hoisting ne s'appliquent pas.
... (cherchez sur le web les autres différences !)
Les fonctions flèches sont très utiles par contre pour les callbacks. Cela permet de créer facilement une fonction callback pour que le context (l'objet this
) soit le même que son emplacement dans le code (moins de confusion).
Nous pouvons reformuler l'exemple précédent des callbacks avec des fonctions flèches :
Dernière mise à jour