Il est temps d'affronter le monstre (JavaScript) entre parenthèses

Le JavaScript récent est plein de parenthèses!

Quelqu'un ressent-il cela? Ces personnes sont la cible de cet article. Veuillez lire un peu plus. Je le pensais jusqu'à il y a un an. Par exemple, les sources suivantes. C'est ce qu'on appelle ** chose entre parenthèses **.

var length = (array) => {
    return reduce(map(alwaysReturnOne)(array));
};
length([1,2,3]);

Je développe Java depuis longtemps, alors j'ai pensé que ce serait bien si je pouvais lire un peu JavaScript. Cependant, récemment, des ** parenthèses ** sont apparues en Java sous une forme appelée expression lambda. Sur les sites SI, la syntaxe Java 8 a été adoptée depuis les nouveaux projets de développement de l'année dernière, mais elle sera utilisée pour la maintenance et les réparations l'année prochaine. ** Je ne peux plus échapper à la parenthèse. ** **

Tel j'ai fait un pas vers le monstre entre parenthèses. Si vous ne faites que Java et que vous le remarquez, j'espère que c'est le premier départ pour les gens qui ont ** peur de JavaScript **.

Ce que j'écris dans cet article

  1. Quelle est la véritable identité des parenthèses?
  2. Qu'est-ce qui est bon avec les parenthèses?

1. 1. Quelle est l'identité des parenthèses?

Si vous l'écrivez sans crainte de malentendu, le vrai caractère des parenthèses est une fonction en un mot. Il existe différents types de fonctions telles que la fonction égale, la fonction polynomiale, la fonction anonyme et la fonction constante. Et il y a des fermetures, des thunks, des monades, des curry, etc. qui l'utilisent. Je pense que le fait que ces concepts difficiles à comprendre soient utilisés sur la source sans commentaires est un obstacle important pour les débutants. Alors ** oubliez les mots difficiles que j'ai écrits ci-dessus **. Cependant, les parenthèses sont des fonctions. Garde ça en tête. Passons maintenant aux avantages des parenthèses (fonctions).

2. Qu'est-ce qui est bon avec les parenthèses?

J'ai mentionné plus tôt que les parenthèses sont des fonctions, mais je pense que beaucoup de gens pensent que «les fonctions peuvent être utilisées en commun en regroupant des processus». C'est vrai, mais les fonctions utilisées en JavaScript ont une signification légèrement différente. Ceux qui ont écrit des programmes en C ou Java ont cette idée trop forte pour comprendre JavaScript comme un langage fonctionnel. Si vous écrivez une fonction avec une idée de type Java, vous définirez un traitement commun comprenant la logique métier en tant que fonction. Cependant, quand vous pensez que c'est de la programmation fonctionnelle, ** ce n'est toujours pas quelque chose qui peut être appelé une fonction. En le désassemblant en morceaux plus petits, il est possible de promouvoir la réutilisation et de conserver l'identité **.

Objet de première classe

Tout d'abord, souvenez-vous d'un seul. Les fonctions JavaScript ** qui ont les caractéristiques d'un langage fonctionnel peuvent être stockées dans des variables . C'est pourquoi les fonctions JavaScript sont appelées objets de première classe (objets de première classe). C'est un mot difficile, mais considérez-le comme " objet primaire = juste une valeur (variable) **".

Rien qu'en comprenant cela, vous serez capable de lire un peu de JavaScript difficile à lire.

Par exemple, le programme suivant crée une fonction nommée constant. De plus, dans la dernière ligne, nous passons l'argument réel "1" à la fonction et déclarons une variable appelée alwaysReturnOne. En conséquence, la fonction sur les lignes 2-4 est stockée dans alwaysReturnOne avec l'argument réel "1".

L'important ici est que alwaysReturnOne est une fonction qui renvoie toujours "1".

var constant = (any) => {
    return (_) => {
        return any;
    };
};
var alwaysReturnOne = constant(1);​​

Comprendre que ** «les variables qui stockent les fonctions sont utilisées à divers endroits» ** est une étape vers la compréhension du JavaScript moderne.

Mais vous vous demandez peut-être: "Quels sont les avantages de cette fonction?" Même cette fonction simple peut être utilisée. Vous pouvez convertir tous les éléments du tableau en 1 en exécutant le programme suivant. En effet, la fonction qui traite le contenu du tableau appelé map est passée comme argument à la fonction qui définit tout sur 1.

[1,2,3].map(alwaysReturnOne);
//résultat-> [1,1,1]

​ Lors de la lecture de JavaScript, les variables utilisées à l'intérieur peuvent être des fonctions, et s'il s'agit d'une fonction, en regardant la fonction en unités de bloc ({}), il est étonnamment facile à lire. Tu peux y aller.

En combinant le code ci-dessus avec une méthode qui ajoute la valeur de l'élément appelé count, vous pouvez créer une fonction qui ajoute les éléments du tableau de [1,1,1] et calcule la taille du tableau.

var length = (array) => {
    return count(map(alwaysReturnOne)(array));
};
length([1,2,3]);
//Résultat → 3

(Réduire et mapper sont plus faciles à utiliser avec des bibliothèques telles que Underscore.js, mais je l'ai fait moi-même car il s'agit d'un apprentissage fonctionnel. Ajouté le 2017/12/7)

//fonction de carte
var map = (convert) => {
          return (array) => {
            return array.reduce((accumulator, data) => {
              return accumulator.concat(convert(data));
            },[]); 
          };
        };
//fonction de comptage
var count = (array) => {
          return array.reduce((accumulator, data) => {
            return accumulator + data;
          },0);
        };

​ Pour résumer les fonctions JavaScript, en JavaScript, les fonctions peuvent être traitées de la même manière que les valeurs, elles peuvent donc avoir les caractéristiques suivantes.

--Peut avoir une fonction comme argument

Ce mécanisme est appelé une fonction d'ordre supérieur et est souvent utilisé en JavaScript, ce qui entraîne plus de parenthèses. Cependant, cela ne rend pas la source difficile à lire, mais il est efficace pour augmenter la réutilisabilité du programme et augmenter la tolérance aux échecs. ​ Récemment, le nombre de combinaisons de Spring pour le back-end et Angular pour le front-end augmente, donc si vous n'aimez pas JavaScript, pourquoi ne pas l'essayer? (Angular utilise souvent TypeScript ...)

Livre de référence

J'utilise les trois livres suivants pour étudier. Je pense que la programmation fonctionnelle est un changement de paradigme que les gens qui ont écrit Java n'ont pas connu jusqu'à présent, donc si vous ne comprenez pas un livre, deux livres, si c'est encore difficile à comprendre, le troisième livre est meilleur. Je pense. Il n'y a pas de raccourcis, et je ne pense pas que vous ayez besoin de tout comprendre dans le livre, mais je recommande de changer de livre car cela vous donne une nouvelle perspective. Apprenez les bases de la programmation fonctionnelle à l'aide de JavaScript Programmation fonctionnelle apprise avec JavaScript La programmation fonctionnelle JavaScript impressionne les meilleures séries pour apprendre des idées et des pratiques pour réduire la complexité

Recommended Posts

Il est temps d'affronter le monstre (JavaScript) entre parenthèses
À propos de la langue à apprendre à partir de maintenant
Passer les paramètres régionaux i18n à JavaScript
La route de JavaScript à Java
Introduction à Java pour la première fois # 2
À propos de la procédure pour que Java fonctionne
[Java] Comment régler la date sur 00:00:00
Définir l'heure de LocalDateTime à une heure spécifique
À propos de l'heure d'été réelle
Unifier le fuseau horaire de l'application Rails à l'heure japonaise