📘

Introduction au JavaScript

Usage du JavaScript aujourd’hui : jQuery, Angular, Vue.js, React, NodeJS, NPM.

Rien à voir avec java


Langage interprété par les navigateurs (càd lu et exécuté à chaque fois), trÚs utilisé avec les technologies HTML/CSS.

â„č
Le moteur d’exĂ©cution (programme qui interprĂšte et exĂ©cute le code) est souvent embarquĂ© par le navigateur, mais il peut ĂȘtre autonome. Exemples : V8, WebStorm.

Langage “full stack” avec l’apparition de NodeJS (JavaScript cĂŽtĂ© serveur) —> rĂ©volution Ă  l’époque.

â„č
Le client et le serveur communique toujours via le protocole HTTP.

De nombreuses librairies et frameworks existent pour faire évoluer et améliorer JavaScript.

⚙
Exemples : - cĂŽtĂ© client : jQuery, Angular, React - cĂŽtĂ© serveur : NodeJS, Vue.js - gestionnaires de dĂ©pendances : NPM, Bower —> permettent de gagner du temps Ă  ne pas redĂ©velopper des fonctionnalitĂ©s qui existent dĂ©jĂ 
BP : faire attention aux dĂ©pendances dans les librairies que l’on utilise. Dans la vraie vie, on se laisse souvent dĂ©passer !
⚠
React ≠ React Native (un framework d’applications mobiles)

TypeScript = sur-ensemble syntaxique stricte du JavaScript, libre et open source, qui permet d’avoir un typage des variables et une syntaxe moins “barbare”.

Le code est transpilĂ© ou trans-compilĂ© : il est d’abord compilĂ© en JavaScript avant d’ĂȘtre interprĂ©tĂ© par l’ordinateur.

â„č
TypeScript n’est pas une Ă©volution du JavaScript, ils existent en parallĂšle.

Let’s get started


Mise en place

  1. Choisir son IDE
⚙
Quelques IDE adaptés pour JavaScript : WebStrom, Visual Studio Code, IntelliJ
  1. Télécharger NodeJS

Bases du langage

JavaScript respecte les paradigmes de la programmation orientée-objet, de la programmation impérative (exécution des lignes de code les unes aprÚs les autres), de la programmation fonctionnelle (appel de fonctions).

â„č
Langage “souple” : - le ; n’est pas obligatoire (mais il est possible de le mettre pour garder de bonnes habitudes) —> penser Ă  ĂȘtre cohĂ©rent, - l’opĂ©rateur + fera dynamiquement soit l’addition de nombres soit la concatĂ©nation de chaĂźnes de caractĂšres.

Typage dynamique des variables : il n’est pas nĂ©cessaire de donner un type Ă  la variable que l’on dĂ©clare (var maVariable), c’est l’interprĂ©teur qui gĂšre.

Les objets donnent accÚs à des méthodes et des propriétés.
â„č
String : charAt(), concat(), indexOf(), substring()
 Number : MAX_VALUE, MIN_VALUE, isInteger(), isNaN()
 Math : random(), floor(), ceil()
 Date : getDate(), getMonth()+1, getYear(), getHours(), setMinutes(), setSeconds(), toLocaleDateString()
 Error : name, message
 Propriétés et variables globales : Infinity, NaN, undefined, isNaN(), Number(), parseFloat(), parseInt()

📌
Pour aller plus loin : https://developer.mozilla.org/en-US/docs/Web/JavaScript https://www.w3schools.com/js/default.asp

Déclarer une constante : const MA_CONSTANTE.

PortĂ©e d’une variable : let vs var.

â„č
‘let’ a une portĂ©e infĂ©rieure, limitĂ©e au bloc dans lequel il se trouve tandis que ‘var’ a une portĂ©e globale.
BP : il est recommandĂ© d’utiliser let qui permet de limiter les erreurs (on garde var pour quand on sait ce qu’on fait et qu’on a besoin d’une variable globale).

Commentaires : sur une ligne //, sur plusieurs lignes /* ... */.

Fonctions : déclaration avec function, un nom adéquat, zéro ou plusieurs paramÚtres, le corps de la fonction entre {} qui peut potentiellement retourner une valeur (return).

function sonpetitnom (param) { corps [return] };

â„č
console.log() permet d’afficher en console —> utile uniquement pour dĂ©boguer ou afficher avec NodeJS. BP : supprimer les console.log() avant mise en production.

OpĂ©rateurs de base : similaires Ă  Java, avec en plus l’égalitĂ© stricte === || !== qui permet de comparer Ă  la fois la valeur et le type des variables.

BP : La stratĂ©gie en JavaScript est de comparer avec cet opĂ©rateur stricte, ce qui permet d’éviter des petites erreurs pouvant se glisser dans le code.

//--- Quelques exemples de variables

var uneVariable; // variable globale non definie
console.log(uneVariable); //undefined

let unBooleen = true; // variable dont le type est dynamiquement defini (boolean)

let aujourdhui = Date();
console.log("La date d'aujourd'hui est " + aujourdhui);
//La date d'aujourd'hui est Thu Jan 19 2023 10:09:39 GMT+0100 (heure normale d’Europe centrale)

let unNombreAleatoire = Math.floor(Math.random()*10); 
// nombre aleatoire entre 0 et 10, arrondi a l'entier
console.log(unNombreAleatoire);

let unNombre = 5; 
let autreNombre = 7;
let somme = add(unNombre, autreNombre); // appel de la fonction add()
console.log(somme); //12

// declaration de la fonction add()
function add(a,b) {
    return a+b;
}

Structures de code

TrĂšs similaires Ă  Java.

Les conditionnelles :

Les boucles :

La gestion d’erreurs : try
catch

//--- Quelques exemples de structures de code

// if et egalite stricte
let leNombre = 10;
let laString = '10';

if (leNombre === laString) {
    console.log("Les deux variables sont égales en valeur et en type.")
} else if (leNombre == laString) {
    console.log("Les deux variables sont égales en valeur mais pas en type.")
    //c'est cette solution qui sera affichee en console
} else {
    console.log("Les deux variables ne sont pas égales.")
}

// switch
let gateau = 'tarte au citron meringuée';
switch (gateau) {
    case 'tarte au citron meringuée':
        console.log('Mangeons une tarte au citron meringuée !');
        //c'est cette solution qui sera affichee en console
        break;
    case 'brownie':
        console.log('Mangeons un brownie !');
        break;
    default:
        console.log('Ce gateau n\'est pas au menu...');
}

// while
let i=0;
while (i<4) {
    i++;
    console.log(i);
}

// do...while
let alea = 0;
do {
    console.log(alea + " est différent de 2.");
    alea = Math.floor(Math.random()*10);; // relance
} while (alea !== 2);
console.log("Enfin ! " + alea + " est strictement égal à 2.");

// for
for (let i=0; i<6; i++) {
    console.log("tour " + (i+1) + "/6");
}

// try...catch
try {
    console.log(compteur);
} catch (error) {
    console.log("Une erreur est survenue !");
    console.error(error.message); //compteur is not defined
}

Principaux objets disponibles

TrĂšs similaires Ă  Java.

Notation avec les crochets [] (ou new Array() qui est non-recommandé).

Taille non fixée.

Propriétés et méthodes disponibles : length, push(), pop(), slice(), sort(), toString()


//--- Quelques exemples de tableaux

let tabVide = [];

let tabFleurs = ['marguerite', 'rose', 'tulipe'];
// non-recommande ~ let unTab = new Array(TAILLE_FIXE);

console.log(tabFleurs); //[ 'marguerite', 'rose', 'tulipe' ]
console.log("premier element : " + tabFleurs[0]); //premier element : marguerite
console.log("taille : " + tabFleurs.length); //taille : 3

//enlever le dernier
tabFleurs.pop();
console.log(tabFleurs); //[ 'marguerite', 'rose']

// ajouter un element
tabFleurs.push("jasmin");
console.log(tabFleurs); //[ 'marguerite', 'rose', 'jasmin' ]

// decouper : index a partir duquel je cree un nouveau tableau
let tabDecoupe=tabFleurs.slice(1);
console.log("tableau découpé : " + tabDecoupe); //tableau découpé : rose,jasmin

// episser : ajouter et/ou supprimer des elements
// trois param : index, nombre d'elements a supprimer, elements a ajouter
tabFleurs.splice(1,1, 'lavande', 'lilas', 'tournesol');
console.log(tabFleurs); //[ 'marguerite', 'lavande', 'lilas', 'tournesol', 'jasmin' ]

// tri tab par ordre alphabetique
// - possible de lui mettre d'autres methodes pour un tri perso
tabFleurs.sort();
console.log(tabFleurs); //[ 'jasmin', 'lavande', 'lilas', 'marguerite', 'tournesol' ]

// pour reinitialiser le tableau
tabFleurs = [];