Email : gcr.soufiene@gmail.com
1
Plan de la formation
Introduction
Installation et configuration
Variable et les constante
Les Fonctions
Module
POO
2
Introduction
3
Architecture Web
Frontend Backend
Client HTTP Serveur Web
Requête HTTP
SGBD
JEE
HTML
PHP
CSS Réponse HTTP SQL/NO SQL
Dot Net
JavaScript
Node JS
• Un client web (Browser) communique avec le serveur web (Apache) en utilisant le protocole HTTP
• Une application web se compose de deux parties:
• La partie Frontend : S’occupe de la présentation des IHM côté Client :
• Langages utilisés : HTML, CSS, Java Script
• La partie Backend : S’occupe des traitements effectués côté serveur :
• Technologies utilisées : PHP, JEE, .Net, Node JS
• La communication entre la partie Frontend et la partie Backend se fait en utilisant le protocole HTTP
4
Frameworks JavaScript
Frontend Backend
React PHP
Express
Node JS
Réponse HTTP SQL/NO SQL
Angular Next
Vue Meteor
6
Frameworks javaScript
7
DOM : Document Object Model
• Le DOM est une interface de programmation qui permet à des scripts d'examiner et de modifier le contenu
du navigateur web.
• Un document XML ou HTML peut être vu sous la forme d'un arbre.
• Chaque nœud de l’arbre est considéré comme un objet.
9
ECMAScript
• Ensemble de normes sur les langages de programmation de type script (JavaScript, ActionScript...)
standardisée par Ecma International (European Computer Manufacturers Association) depuis 1994.
• Quelques versions:
ECMAScript version 5 (ES5) ou ES 2009
ECMAScript version 6 (ES6) ou ES 2015 (compatible avec les navigateurs modernes)
10
TypeScripte
Transpiler Exécuter
file.ts file.js résultat
• De quoi on a besoin?
Node.js pour exécuter la commande node
TypeScript pour exécuter la commande tsc
Visual Studio Code comme IDE pour TypeScript (et éventuellement Angular)
12
Installation et configuration
13
Installation de NodeJS
Etc.
14
Initialisation d’un projet NodeJS
• >npm init -y
package.json
15
Initialisation de TypeScripte
• Pour travailler les application NodeJS en Typescript, il faudrait installer les dépendances suivantes:
typescript: Langage Type Script
@types/node: Fichier de définition typescript pour nodejs
nodemon: Un utilitaire qui surveillera toute modification du code source et redémarrera
automatiquement votre serveur.
concurrently: un outil pour exécuter plusieurs commandes simultanément
16
Variable et constante
17
Déclaration des variables
disponibles.
18
Déclaration des variables
var list: Array<number> = new Array(1, 2, 3); • On peut initialiser les attributs de cet objet
console.log(list); // affiche [ 1, 2, 3 ] obj = {
nom: ‘wick’,
• Ou encore plus simple numero: 100
};
var list: Array<number> = [1, 2, 3]; console.log(obj);
console.log(list); // affiche [ 1, 2, 3 ] // affiche { nom: ’wick’, numero: 100 }
• Utiliser les méthodes from et keys pour générer • On peut modifier les valeurs d’un objet ainsi
un intervalle de valeurs entières consécutives obj.nom =‘Jhon’;
obj[’numero’] = 200;
var list: number[] = Array.from(Array(3).keys())
console.log(obj);
console.log(list); // affiche [ 0, 1, 2 ]
// affiche { nom: ’jhon’, numero: 200 }
19
Déclaration des variables
• Pour déclarer une énumération • Pour déclarer une variable de type any
enum mois { var x: any;
JANVIER, FEVRIER, MARS, AVRIL, x = "bonjour";
MAI, JUIN, JUILLET, AOUT, x = 5;
SEPTEMBRE, OCTOBRE, console.log(x); // affiche 5;
NOVEMBRE, DECEMBRE
};
console.log(mois.AVRIL); // affiche 3 • Union de type (plusieurs types)
var y: number | boolean | string;
y = 2;
• Pour modifier l’indice du premier élément y = "bonjour";
y = false;
enum mois {
JANVIER = 1, FEVRIER, MARS,
AVRIL, MAI=10, JUIN, JUILLET, • Le mot-clé let permet de donner une visibilité
AOUT, SEPTEMBRE, OCTOBRE,
locale à une variable déclarée dans un bloc.
NOVEMBRE, DECEMBRE
}; if (5 > 2) {
console.log(mois.AVRIL); // affiche 4 let x = 1;
console.log(mois.JUIN); // affiche 11 }
console.log(x); // affiche ReferenceError: x is not defined
20
Déclaration des variables
• Nous pouvons également forcer le type et utiliser • Le mot-clé type permet de définir un alias de
une conversion explicite (cast): type:
let str: any = "bonjour"; type maStructure = [number, string, string];
let longueur: number = (<string>str).length; let first: maStructure = [100, "wick", ’john’ ];
console.log(longueur); // affiche 7 console.log(first); // affiche [ 100, ’wick’, ’john’ ]
• Ou
let str: any = "bonjour"; • L’opérateur ?? permet d’éviter d’affecter la valeur
let longueur: number = (str as string).length;
console.log(longueur); // affiche 7 null ou undefined à une variable
• Pour convertir une chaine de caractère en nombre var obj = {nom: null, prenom: ’john’};
let nom: string = obj.nom ?? ’doe’;
let x : string = "2";
let y: string = "3.5"; console.log(nom); // affiche doe
let a: number = Number(x);
let b: number = Number(y);
console.log(a); // affiche 2
console.log(b); // affiche 3.5
21
Déclaration des constantes
• Les constantes se déclare avec le mot-clé const et permet à une variable de ne pas changer de valeur
const X: any = 5;
X = "bonjour";// affiche TypeError: Assignment to constant variable.
22
Les fonctions
23
Les Fonctions
• Déclarer une fonction • Une fonction qui n’atteint jamais sa fin a le type
function nomFonction([les parametres]){ never
les instructions de la fonction
} function boucleInfinie(): never {
while (true){
• Exemple
}
function somme(a: number, b: number): number { }
return a + b;
} • Il est possible d’attribuer une valeur par défaut
let resultat: number = somme (1, 3); function division(x: number, y: number = 1) :
console.log(resultat); // affiche 4 number
{
• Une fonction qui ne retourne rien a le type void return x / y;
}
function direBonjour(): void { console.log(division(10)); // affiche 10
console.log("bonjour"); console.log(division(10, 2)); // affiche 5
}
24
Les Fonctions
• Il est possible de rendre certains paramètres d’une • Il est possible de déclarer une fonction en utilisant
fonction optionnels les expressions fléchées (arrow function)
function division(x: number, y?: number): number { let nomFonction = ([lesparamètres]): typeValeurRetour=> {
if(y) les instructions de la fonction
return x / y; }
return x;
} let somme = (a: number, b: number): number => { return
console.log(division(10)); // affiche 10 a + b;
console.log(division(10, 2)); // affiche 5 }
• Il est possible de définir une fonction prenant un • Ou en plus simple
nombre indéfini de paramètres let somme = (a: number, b: number): number => a + b;
function somme(x: number, ...tab: number[]): • Appeler une fonction fléchées
number {
for (let elt of tab) let resultat: number = somme (1, 3);
x += elt;
return x; • Cas d’une fonction fléchée à un seul paramètre
}
console.log(somme(10)); // affiche 10 let carre = (a: number): number => a * a;
console.log(somme(10, 5)); // affiche 15 console.log(carre(2)); // affiche 4
console.log(somme(10, 1, 6)); // affiche 17
25
Les Fonctions
• Sans typage, la fonction peut être écrite ainsi • Sans les fonctions fléchées
let carre = a => a * a; let obj = {
console.log(carre(2)); // affiche 4 nom: ’wick’,
afficherNom: function() {
console.log(this.nom)
• Déclaration d’une fonction fléchée sans paramètre }
}
let sayHello = (): void => console.log(’Hello’);
obj.afficherNom(); // affiche wick
sayHello(); // affiche Hello
• Avec les fonctions fléchées
• Il est déconseillé d’utiliser les fonctions fléchées let obj = {
dans un objet nom: ’wick’,
afficherNom: () => {
• Le mot-clé this est inutilisable dans les fonctions console.log(this.nom)
}
fléchées }
obj.afficherNom(); // affiche undefined
26
Les Fonctions
• Utiliser forEach pour afficher le contenu d’un • La fonction afficher peut accepter deux paramètres:
tableau le premier est la valeur de l’itération courante et le
var tab = [2, 3, 5]; deuxième est son indice dans le tableau
tab.forEach(elt => console.log(elt)); // affiche 2 3 5
tab.forEach(afficher); /* affiche
02
• Dans forEach, on peut aussi appeler une fonction function afficher(value, key) { 13
console.log(key, value); 25
afficher } */
tab.forEach(elt => afficher(elt));
function afficher(value) {
• La fonction afficher peut accepter un troisième
console.log(value); paramètre qui correspond au tableau
} // affiche 2 3 5
• On peut simplifier l’écriture précédente en utilisant tab.forEach(afficher); /* affiche
les callback 0 2 [ 2, 3, 5 ]
function afficher(value, key, t) { 1 3 [ 2, 3, 5 ]
tab.forEach(afficher); console.log(key, value, t); 2 5 [ 2, 3, 5 ]
function afficher(value) { } */
console.log(value);
}// affiche 2 3 5
27
Les Fonctions
• On peut utiliser map pour effecteur un traitement • Si on a plusieurs instructions, on doit ajouter les
sur chaque élément du tableau puis forEach pour accolades
afficher le nouveau tableau var tab = [2, 3, 5];
var somme = tab.map(elt => elt + 3)
tab.map(elt => elt + 3)
.filter(elt => elt > 5)
.forEach(elt => console.log(elt));
.reduce((sum, elt) => {
// affiche 5 6 8
return sum + elt;
• On peut aussi utiliser filter pour filtrer des éléments }
);
tab.map(elt => elt + 3) console.log(somme); // affiche 14
.filter(elt => elt > 5)
.forEach(elt => console.log(elt)); // affiche 6 8 Remarques
//Attention, selon l’ordre d’appel de ces méthodes, le
//résultat peut changer. • Le premier paramètre de reduce correspond au
29
Module
30
import / export
31
import / export
• Pour exporter les deux fonctions somme et produit • Pour importer et utiliser une fonction
de fonction.ts import { somme } from ’./fonctions’;
console.log(somme(2, 5)); // affiche 7
export function somme(a: number = 0, b: number = 0) {
return a + b;
} • On peut aussi utiliser des alias
export function produit(a: number = 0, b: number = 1) {
return a * b; import { somme as s } from ’./fonctions’;
} console.log(s(2, 5)); // affiche 7
32
import / export
• On peut aussi utiliser le export default (un seul par • Attention, ici on a importé somme avec deux alias
fichier) différents
export default function somme(a: number = 0, b: number import s from ’./fonctions’;
= 0) { import produit from ’./fonctions’;
return a + b; console.log(s(2, 5));
} // affiche 7
export function produit(a: number = 0, b: number = 1) { console.log(produit(2, 5));
return a * b; // affiche 7
}
33