Pages

... un opérateur intérésant

function fx(x,y,z) {
   console.log( x, y, z );
}

fx( ...[1,2,3] );
function fx(...args) {
   console.log( args );
}

fx( 1, 2, 3, 4, 5); // 

Ici ... propage
Ici … rassemble


Les deux ensemble : 
function foo(...args) {

args.shift();
args.push("BOB");

console.log( ...args );
}

foo("denis", "DUPONT");

  • "DUPONT"
  • "BOB"

Autre cas
function fx(x,...args) {
   console.log( x, args );
}


fx( 1, 2, 3, 4, 5);
  • 1
  • [2, 3, 4, 5]

idée : forEach

Amélioration du code

La structuration de valeurs dans un tableau, nécessite une boucle pour réaliser un parcours des valeurs :

Affichage

let array = [1, 2, 3];
for (let i = 0; i < array.length; i++) {
  let current = array[i];
  console.log(current); // affichage
}


Imaginons l'affichage des valeurs comme une action.

for (let i = 0; i < array.length; i++) {
  let current = array[i];
  actionAffichage(current); // affichage
}

Affichage positif

Pour afficher les valeurs positives, il est facile de créer une condition ; la fonction précédente devient.

for (let i = 0; i < array.length; i++) {
  let current = array[i];
  if (current>0) actionAffichage(current);
}

ou

for (let i = 0; i < array.length; i++) {
  let current = array[i];
  actionAffichagePositif(current);
}


Affichage Négatif

Pour afficher les valeurs négatives, il est facile de créer une condition ; la fonction précédente devient.

for (let i = 0; i < array.length; i++) {
  let current = array[i];
  actionAffichageNégatif(current);
}


Bilans

Pour chaque type d'affichage, il est nécessaire de redéfinir la boucle.

Améliorations

Nous allons encapsuler le code de la boucle dans une fonction forEach.

Il nous reste à réfléchir sur le passage des actions (positif, négatif ...) comme paramètres.

Ainsi,  "afficher quelque chose" peut être vu comme une fonction.
Les fonctions étant des variables et comme les variables peuvent être passées en paramètres, on peut passer "afficher quelque chose" à une fonction.

Ainsi, la fonction "afficher quelque chose" sera passée en paramètre à la fonction forEach.

Résumé des codes


Affichage

function affVal(v){
   console.log(`val tab : ${v}`)
}


Affichage Positif

function AffPositif(v){
   if (v>0) console.log(` val positif : ${v} `);
}


Boucle sur le tableau

function forEach(array, fx) {
  for (var i = 0; i < array.length; i++)//for of
    fx(array[i]);
}


Appel


forEach(T, AffPositif);

Appel anonyme

forEach(T, function (v){
  console.log(`-> tab : ${v}`);
});


En Action

Fichier code

JS Bin on jsbin.com

Pour aller plus loin !

forEach(filtre(T, EstPositif),affVal)

Définir la fonction "filtre" qui prend en paramètre également une fonction permettant de ne concerner que certaines valeurs du tableau.

Ainsi la fonction affVal ne fait plus qu'afficher, elle ne filtre pas les valeurs. 


Extension


Pour voir le comportement en fonctions de média ! 
 emmet


En action : 


callback !

Rappel :

let testCallback = function(val,callback) {

   callback(2*val, " est égale à 2 fois ", val);
};


let monCallback = function(...arg) {

   console.log( ` Le saviez vous : ${arg.join("")} ! `);
};


testCallback( 2, monCallback ); 


En action

Allons plus loin : la gestion d'erreur.


let racine = function (input, callback){
 let result = 0,

       square= function (num, callback){
(num>0) ? callback(null, Math.sqrt(num)) : callback(" Le traitement des racines de nombres négatifs n'est pas uniforme ");
},

      handleResult = function(error,result){
if (error) {
             callback(error); return;}
callback(null,result);
}

   square(input,handleResult);

 };



racine( 9, function (error,result){
if (error) {console.error(error);return; };
console.log(result);
});



En action