S1 Cours
S1 Cours
S1 Cours
OFPPT – DRIF
S1 : Comprendre les concepts de base
CDC en Digital, Intelligence Artificielle,
du web front-end
Audiovisuel et Cinéma
Cours
React :
React c’est une librairie java script pour créer des interfaces utilisateur frontend,
certaine personne l’appelle Framework, en général il ne faut pas prendre la tête avec
est ce que React est une bibliothèque ou Framework, bref React c’est un utilitaire qui
va nous aider à développer des interfaces utilisateur plus rapidement et facilement.
React est une librairie développée par Facebook est qui toujours maintenu avec
Facebook
Pourquoi un Framework ou bibliothèque frontend ?
Avant l’arrivée des bibliothèques et Framework Frontend, les sites web ont été
développé avec HTML, CSS, Java Script native, le site est constitué par plusieurs pages
html, et quand l’utilisateur demande ou poste une information toutes la page est
envoyée ce qui présente un lenteur de rafraichissement, une charge sur le serveur et
le navigateur.
L’approche des bibliothèques et Framework Frontend consiste à découper l’interface
utilisateur en un ensemble de morceaux dite composants réutilisable.
Virtuel DOM :
Le DOM virtuel (VDOM) est un concept de programmation dans lequel une
représentation idéale ou "virtuelle" d'une interface utilisateur est conservée en
mémoire et synchronisée avec le "vrai" DOM par une bibliothèque telle que
ReactDOM. Ce processus s'appelle la réconciliation.
Ajouter l’outils rendering a Google chrome pour afficher la partie du dom qui est rendu
sera encadré
ANGULAR :
VUE JS
La méthode constructor() possède désormais les paramètres qui seront utilisés lors de
la création des objets de la classe Etudiant. Afin de les conserver en tant qu’attributs
dans la classe (et pouvoir les utiliser dans des méthodes qui seront définies dans cette
classe), on les mémorise dans l’objet this (au moyen de this.nom et this.age).
Remarquez que lors de la construction des objets par new, il faut maintenant indiquer
en arguments les valeurs des paramètres utilisés, qui seront transmis dans la méthode
constructor(). Si la méthode constructor() utilise des paramètres par défaut, les
arguments correspondants peuvent être absents lors de la création des objets
associés. On voit ici le contenu des deux objets créés, avec, entre accolades, les
attributs créés au moyen de this dans le constructeur Une classe est souvent enrichie
au moyen de méthodes, qui seront ensuite utilisées par les objets de cette classe. Par
exemple, on peut créer une fonction info() dans la classe Personne qui permettra de
visualiser le nom et age des objets de cette classe.
Création de la méthode info() dans la classe Etudiant :
class Etudiant{
constructor(nom,age){
this.nom=nom;
this.age=age
}
info(){
return `Etudiant nom:${this.nom} a pour
age:${this.age}`
}
}
Appel de la méthode info() par les objets et1 et2
Rendu
Héritage de classe
L’héritage de classe permet de créer une nouvelle classe à partir d’une classe déjà
existante. On dit que la nouvelle classe est dérivée (héritée) de la première. Il est
ainsi possible d’enrichir (améliorer) une classe existante sans avoir à modifier son
code interne. On peut alors réutiliser des parties de code existants (c’est-à-dire
utiliser d’autres classes qui ont déjà été écrites et qui fonctionnent correctement).
Pour illustrer cela, on souhaite créer une nouvelle classe, appelée Stagiaire, dérivée
de la classe Etudiant.
info(){
return `${super.info()} stage:${this.stage}`
}
super(nom,age) :fait appelle au constructeur de la classe mère Etudiant
Création de deux instances de Stagiaire stg1 et stg2
Modules
Le but des modules ES6 est d’aider à utiliser ces fichiers (ici, Etudiant.js et Index.js)
sans avoir à connaître ces informations. En effet, ces dernières seront insérées sous
une certaine forme dans le fichier lui-même, qui devient ainsi un module. C’est le rôle
de l’export et de l’import des données, notions que nous détaillons dans les
paragraphes qui suivent.
Un module c’est un fichier Java Script, qui contient les mots clés export default ou
export elles les valeurs, classes, et fonctions qu’on veut exporter
C’est quoi la différence entre export default et export ?
Dans un module on peut faire seulement un seul export default, alors qu’on peut
faire plusieurs exports.
Dans le module ci-dessous il un seul export default : export default Etudiant et deux
export :
export {Etablissement,info}
L’élément exporté par default est importé sans accolades, tandis les éléments
exportés par export sont importés avec des accolades
Voir module Index.js
Module Etudiant.js
const Etablissement='ISGI'
class Etudiant{
constructor(nom,age){
this.nom=nom;
this.age=age
}
}
function info(etudiant){
return `nom:${etudiant.nom} age:${etudiant.age}`
}
export default Etudiant
export {Etablissement,info}
Il est identique à :
export const Etablissement='ISGI'
export default class Etudiant{
constructor(nom,age){
this.nom=nom;
this.age=age
}
}
export function info(etudiant){
return `nom:${etudiant.nom} age:${etudiant.age}`
}
Module Index.js
import Etudiant,{Etablissement,info} from './Etudiant.js'
let etd1= new Etudiant("Rami",33)
console.log(info(etd1))
Rendu
Rendu :
Rendu :
Exemple 2 :
let nom="Rami"
let salutation=nom?"salut "+nom:"inconnu"
console.log(salutation)
Le rendu
Object destructing
La syntaxe d'affectation de déstructuration est une expression JavaScript qui permet
de décompresser des valeurs de tableaux, ou des propriétés d'objets, dans des
variables distinctes.
const personne={
nom:"fatihi",
age:23,
adresse:{rue:14,ville:"casa"}
}
const nom=personne.nom
const age=personne.age
const rue=personne.adresse.rue
const ville=personne.adresse.ville
console.log(nom,age,rue,ville)
//est identique à:
const {nom,age,adresse:{rue},adresse:{ville}}=personne
console.log(nom,age,rue,ville)
Le rendu
Destructing avec fonction
const personne={
nom:"fatihi",
age:23,
adresse:{rue:14,ville:"casa"}
}
function presentation({nom,age,adresse:{rue},adresse:{ville}}){
console.log("salut ",nom,age,rue,ville)
}
presentation(personne)
Le rendu
En React : Voir Annexe 3
Le rendu :
Exercice 1 :
Soit l’Array nums=[2,5,8,7,3]
Utiliser la méthode map pour créer un Array contenant les éléments de nums
multipliés par 3
nouvNums=[6,15,24,21,9]
La méthode filter
La méthode filter() crée une copie d'une partie d'un tableau donné, filtrée
uniquement pour les éléments du tableau donné qui réussissent la condition
implémentée par la fonction fournie.
Exemple :
const personnes = [
{ nom: "Rami", age: 33, estMember: true },
{ nom: "Fatihi", age: 24, estMember: false },
{ nom: "Chakib", age: 45, estMember: true },
{ nom: "Mounir", age: 37, estMember: false },
];
const persAgés=personnes.filter(function(pers){return
pers.age>=35})
console.log(persAgés)
Le rendu :
Exemple 2 :
const pers1=personnes.find(function(pers){return
pers.age==50})
console.log(pers1)
Le rendu :
La méthode reduce
La méthode reduce() exécute une fonction de rappel "reducer" fournie par
l'utilisateur sur chaque élément du tableau, dans l'ordre, en transmettant la valeur de
retour du calcul sur l'élément précédent. Le résultat final de l'exécution du réducteur
sur tous les éléments du tableau est une valeur unique.
La première fois que le rappel est exécuté, il n'y a pas de "valeur de retour du calcul
précédent". Si elle est fournie, une valeur initiale peut être utilisée à sa place. Sinon,
l'élément de tableau à l'index 0 est utilisé comme valeur initiale et l'itération
commence à partir de l'élément suivant (index 1 au lieu de l'index 0)
const clients = [
{ nom: "Rami", montant: 4500 },
{ nom: "Karimi", montant: 2300 },
{ nom: "Chaouki", montant: 5500 },
{ nom: "Ramoun", montant: 7700 },
];
const totalMontants=clients.reduce(function(total,client){
return total+=client.montant
},0);
console.log(totalMontants)
Le rendu :
Remarque :
rest est un array contenant une copie de Array numbers sans le premier et le
deuxième élément
La programmation fonctionnelle
La programmation fonctionnelle est un paradigme de construction de programmes
informatiques à l'aide d'expressions et de fonctions sans mutation d'état et de
données. En respectant ces restrictions, la programmation fonctionnelle vise à écrire
du code plus clair à comprendre et plus résistant aux bogues.
JavaScript n'est pas un langage purement fonctionnel, mais il possède toutes les
fonctionnalités dont nous avons besoin pour qu'il fonctionne comme s'il l'était. Les
principales caractéristiques du langage que nous allons utiliser sont les suivantes
Ici la fonction doSomething est passée en paramètre dans la fonction jquery $.get()
La récursivité
La récursivité est l'outil le plus puissant pour développer des algorithmes et une
grande aide pour résoudre de grandes classes de problèmes. L'idée est qu'une
fonction peut à un certain point s'appeler elle-même, et quand cet appel est fait,
continuer à travailler avec le résultat qu'elle a reçu. Ceci est généralement très utile
pour certaines classes de problèmes ou de définitions. L'exemple le plus souvent cité
est la fonction factorielle (la factorielle de n s'écrit n !) telle que définie pour des
valeurs entières positives :
function fact(n){
if (n===0){
return 1
}
else{
return n* fact(n-1)
}
}
console.log(fact(4))
Fermetures
Les fermetures sont un moyen d'implémenter le masquage des données (avec des
variables privées), ce qui conduit à des modules et à d'autres fonctionnalités
intéressantes. Le concept clé des fermetures est que lorsque vous définissez une
fonction, elle peut faire référence non seulement à ses propres variables locales,
mais également à tout ce qui se trouve en dehors du contexte de la fonction. Nous
pouvons écrire une fonction de comptage qui gardera son propre compte au moyen
d'une fermeture
function compteur(){
let count=0
return function(){
count++
return count
}
}
let next=compteur()
console.log(next())
console.log(next())
console.log(next())
console.log(next())
Le rendu
Arrow fonction
Les arrow fonctions sont juste un moyen plus court et plus succinct de créer une
fonction (sans nom). Les arrow fonctions peuvent être utilisées presque partout où
une fonction classique peut être utilisée, sauf qu'elles ne peuvent pas être utilisées
comme constructeurs
La fonction somme :
function somme(a,b){
return a+b
}
Peut-être écrite en utilisant arrow fonction
const mySomme=(a,b)=>a+b
console.log(mySomme(3,4))
Remarque :
Les fonctions fléchées sont généralement appelées fonctions anonymes en raison de
leur absence de nom. Si vous avez besoin de faire référence à une fonction fléchée,
vous devrez l'affecter à une variable ou à un attribut d'objet, comme nous l'avons fait
ici ; sinon, vous ne pourrez pas l'utiliser.
Exemple :
const fact3 = n => (n === 0 ? 1 : n * fact3(n - 1));
let numbers=[2,3,4]
console.log(produit(...numbers))
Pures fonctions :
Les fonctions pures acceptent des entrées (arguments) et renvoient une nouvelle
valeur sans avoir à modifier en permanence des variables en dehors de sa portée.
Dans la fonction pure ci-dessous ‘pureFonction’ , nous avons pu récupérer une
nouvelle valeur sans modifier la variable ' ‘immutableValue ‘.
Alors que la fonction ‘impureFonction’ a changée la valeur de la variable
‘mutateValue’ d’où ‘impureFonction’ n’est pas pure !!!.
Exercice 3 :
Soit l’Array
const inscriptions=[
{id:10,nom:'Rami',filiere:'DEV'},
{id:11,nom:'Kamali',filiere:'DEV'},
{id:12,nom:'Fahmi',filiere:'DEV'},
{id:13,nom:'Chaouki',filiere:'DEV'}
];
Créer la pure fonction qui permet d’ajouter une inscription
months.splice(4, 1, 'May');
// replaces 1 element at index 3
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]
function pureInject(index,newValue) {
return [
...dontMutateInjection.slice(0, index),
newValue,
...dontMutateInjection.slice(index)
]
}
console.log('----------------')
console.log(pureInject(1,10))
//rendu [6,10,7,8]
console.log(dontMutateInjection)
//rendu [6,7,8]
function pureDeleteFonction(id){
return [...inscriptions.filter((ins)=>ins.id!=id)]
}
let deleteInscriptions= pureDeleteFonction(12)
console.log('----pureDeleteFonction-------')
console.log(deleteInscriptions)
console.log(inscriptions)
Le rendu
Changer un objet
Soit l’objet
personne={id:10,nom:'Rami'}
on souhaite avoir un objet de type personne avec en plus l’attribut age sans
modifier l’objet initial
personne={id:10,nom:'Rami'}
//changer un objet en utilisant pure fonction
function addAge(age){
let pers= {...personne,age:age}
return pers;
}
console.log('changer personne')
console.log(addAge(33))
console.log(personne)
La fonction peut être écrite autrement
function addAge(age){
return Object.assign({}, personne, {age:age});
}