• Accueil / Salesforce / Blog Bob Buzzard :…

Blog Bob Buzzard : JavaScript pour les programmeurs Apex, partie 27 minutes de lecture


, Blog Bob Buzzard : JavaScript pour les programmeurs Apex, partie 2<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>

(pour la citation complète de Gertrude Stein sur l’art n’ayant aucune fonction et n’étant pas nécessaire, voir : https://www.scottedelman.com/2012/04/26/art-has-no-function-it-is-not-necessary/ )

introduction

Dans la première partie de cette série occasionnelle sur JavaScript pour Apex
Programmeurs, nous avons regardé mon historique quadrillé avec JavaScript, puis le
différence entre les types Apex et JavaScript. Dans cet article, nous examinerons
méthodes et fonctions.

Définitions

Une méthode est associée à un objet. C’est soit une partie d’une instance d’objet
(non statique) ou une partie de la classe à partir de laquelle les objets sont créés (statique
méthode). Une fonction est une collection indépendante de code qui peut être appelée par
nom de n’importe où. Ceux-ci sont souvent utilisés de manière interchangeable (par moi surtout!)
mais la différence est importante lorsque l’on considère JavaScript et Apex.

Sommet

Apex n’a que des méthodes. Tout code Apex appelé par son nom est soit une méthode
invoqué sur une instance d’objet (que vous ou la plate-forme avez créée) ou un
méthode statique dans une classe.

Presque tout le code Apex.

A part les déclencheurs.

Voici un déclencheur de compte avec une collection nommée de code que je peux appeler
plus tard dans le déclencheur :

trigger AccountMethod on Account (before insert) 
{
    void logMessage(String message) 
    {
        System.debug('Message : ' + message);
    }
    
    logMessage('In account trigger');
}

Et si j’exécute anonyme et insère un déclencheur, je vois le message apparaître comme
attendu:

, Blog Bob Buzzard : JavaScript pour les programmeurs Apex, partie 2<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>

Bien que cela puisse ressembler à une fonction, il s’agit en fait d’une méthode statique sur le
déclencheur, comme je l’ai découvert en changeant l’utilisation en
this.logMessage(‘In account trigger’);

, Blog Bob Buzzard : JavaScript pour les programmeurs Apex, partie 2<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>

Ce n’est cependant pas une méthode statique utile, car elle ne peut pas être appelée de l’extérieur de
ce déclencheur. Je suppose qu’il pourrait être utilisé pour organiser le code dans le déclencheur pour qu’il soit
plus lisible, mais le code ne devrait pas vivre dans les déclencheurs, vous feriez donc bien mieux de
placez-le dans une classe d’utilité ou de service.

Cette intéressante digression avec, en ce qui nous concerne, Apex a
méthodes dans des objets ou des classes, et je vais procéder sur cette base.

Si vous voulez passer du code Apex à exécuter par une autre méthode, vous avez
pour passer l’objet à la méthode. Un exemple de cela que nous rencontrons
assez souvent est programmé Apex:

MySchedulable mySch = new MySchedulable();
String cronStr = '21 00 9 9 1 ?';
String jobID = System.schedule('My Job', cronStr, mySch);

La plate-forme appellera le
exécuter() méthode sur le
monSch exemple de la
MonPlanning classe à laquelle je passe
ce.

JavaScript

JavaScript, comme je trouve si souvent le cas, est beaucoup plus puissant et beaucoup plus
déroutant. JavaScript a à la fois des méthodes et des fonctions, mais sous le capot, les méthodes sont
fonctions stockées en tant que propriété d’un objet.

Les fonctions sont aussi en fait des instances d’objets – chaque fonction que vous créez est
en fait une instance de l’objet Function. Ce qui signifie qu’ils peuvent avoir
propriétés et méthodes comme les autres objets. Et ces méthodes sont en fait
fonctions stockées en tant que propriétés. Etc.

La bonne nouvelle est que vous n’avez pas besoin de vous soucier de la plupart de ces éléments lorsque vous utilisez
JavaScript dans Salesforce. D’après mon expérience, ce que vous devez vraiment savoir, c’est :

Les fonctions sont des citoyens de première classe

En JavaScript, des fonctions peuvent être affectées à des variables :

let log=function(message) { 
                console.log(message);
        }
   
log('Hello');

Bonjour

passé en paramètre à d’autres fonctions :

let consoleLogger=function(message) {
               console.log(message);
               }
               
let log=function(logger, message) {
             logger(message);
}

log(consoleLogger, 'Message to console');

Message à la console

et renvoyé comme résultat d’une fonction ;

function getConsoleLogger() {
    return function(message) {
        console.log(message);
    }
}

let consoleLogger=getConsoleLogger();

consoleLogger('Message for console');

Message pour la console


Les fonctions peuvent être anonymes

Lorsque vous créez des fonctions de rappel en JavaScript pour une utilisation très simple, souvent ponctuelle, elles commencent rapidement à proliférer et deviennent difficiles à distinguer
de chacun d’eux. Les fonctions anonymes sont définies là où elles sont nécessaires/utilisées
et ne deviennent pas une partie réutilisable de l’application. En utilisant un très simpliste
exemple, pour une raison quelconque, je veux traiter un tableau de nombres et multiplier
chaque entrée par elle-même chaque entrée. Je vais utiliser la méthode map() du
Objet tableau, qui crée un nouveau tableau en exécutant une fonction que je fournis sur
chaque élément du tableau source. Si je fais ça avec des fonctions nommées :

function multiply(value) {
    return value*value;
}
let numbers=[1, 2, 3, 4];
let squared=numbers.map(multiply);
console.log(squared);

[1, 4, 9, 16]

Si je n’ai pas besoin de la fonction multiple ailleurs, elle est exposée sans
bonne raison, je peux donc la remplacer par une fonction anonyme que je définis quand
en invoquant la méthode map :

let numbers=[2, 4, 6, 8];
let squared=numbers.map(function(value){return value * value});
console.log(squared);

[4, 16, 36, 64]

Ma fonction anonyme n’a pas de nom et ne peut être utilisée nulle part ailleurs. C’est aussi
vraiment difficile à déboguer si vous avez un tas de fonctions anonymes dans votre pile,
alors faites preuve d’un peu de prudence lorsque vous les utilisez.

Les fonctions fléchées s’améliorent sur Anonymous

Surtout pour les fonctions simples. Fonctions fléchées (parfois appelée grosse flèche
fonctions) vous offrent un moyen plus succinct de créer des fonctions anonymes.

numbers.map(function(value){return value * value});

Je peux perdre une grande partie du texte passe-partout et simplement écrire :

numbers.map(value=>value*value);

Décomposer cela :

  • Je n’ai pas besoin du mot-clé function – je le remplace par =>
  • Je n’ai pas besoin de parenthèses autour de mon paramètre, je le mets juste à gauche de
    =>
    Notez que si je n’ai pas de paramètres, ou plus d’un, j’ai besoin
    parenthèse

  • Je n’ai pas besoin des accolades, tant que le code tient sur une seule ligne
  • Je n’ai pas besoin de l’instruction return, encore une fois tant que le code tient sur un
    une seule ligne. Le résultat de mon expression à droite de => est
    retourné implicitement

Ainsi, les fonctions fléchées peuvent sembler assez différentes des fonctions normales :

let multiply=function(value) {
    return value * value;
}

let arrowMultiply=value=>value*value;

ou assez similaire

let addAndLog=function(first, second) {
    let result=first + second;
    console.log('Result = ' + result);
    return result;
}

let arrowAddAndLog=(first, second)=>{
    let result=first + second;
    console.log('Result = ' + result);
    return result;
}

Les fonctions fléchées ont aussi quelques pièges – le principal est que « cela » fait toujours référence à l’objet Window, quelle que soit la manière dont vous essayez de le modifier.

Les fonctions ont un contexte

Il y a pas mal de choses à cela (jeu de mots!) Au lieu de cela, je vais juste vous le montrer. L’essentiel à retenir est que « ceci » dépend de la façon dont la fonction est appelée, et non de l’endroit où elle est déclarée, donc si vous passez une méthode objet en tant que fonction de rappel, lorsqu’elle est invoquée, « ceci » ne fera pas référence à l’objet d’origine , mais quel que soit l’objet qui l’invoque maintenant. Je vous recommande de passer un peu de temps à vous familiariser avec le contexte, sinon vous passerez probablement beaucoup plus de temps à essayer de comprendre pourquoi les choses ne fonctionnent pas.

Articles Similaires

JavaScript pour les programmeurs Apex, partie 1 – Saisie





Source de l’article traduit automatiquement en Français

Besoin d'aide ?
Vous utilisez Pardot depuis un certain temps mais vous n'êtes pas sûr d'en
exploiter tout le potentiel

Notre analyse de votre Pardot offerte dès aujourd'hui
Merci, vous pouvez compléter notre questionnaire
Nous allons revenir vers vous rapidement !

Fermer