web-dev-qa-db-fra.com

Pourquoi le nom 'let' a-t-il été choisi pour les déclarations de variable à portée de bloc en JavaScript?

Je comprends pourquoi var prend ce nom - il est variable, const - c'est une constante, mais quelle est la signification derrière le nom de let, quelles étendues pour le bloc actuel? Laisse faire?

253
Vitaly Zdanevich

Let est un énoncé mathématique adopté par les premiers langages de programmation tels que Scheme et Basic. Les variables sont considérées comme des entités de bas niveau ne convenant pas à des niveaux d'abstraction plus élevés, d'où le désir de nombreux concepteurs de langage d'introduire des concepts similaires mais plus puissants, tels que Clojure, F #, Scala, où let pourrait signifier une valeur ou une variable être assigné, mais pas changé, ce qui permet au compilateur d’attraper plus d’erreurs de programmation et d’optimiser le code. Comme le code JavaScript a var depuis le début, ils avaient simplement besoin d’un autre mot clé et emprunté à des dizaines de langages utilisant déjà let comme mot clé traditionnel aussi proche que possible de var, bien que dans JavaScript let crée à la place une variable locale d’étendue de bloc. 

303
exebook

Je suppose que cela suit la tradition mathématique. En mathématiques, on dit souvent "que x soit un nombre réel arbitraire" ou comme ça.

62
Tigran Saluev

En ajoutant à la réponse de exebook , l’utilisation mathématique du mot clé let résume également les implications de la portée de let lorsqu’il est utilisé en Javascript/ES6. Plus précisément, tout comme le code ES6 suivant ignore l’attribution entre accolades de toPrint et affiche la valeur de 'Hello World'

let toPrint = 'Hello World.';
{
    let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'

let tel qu’il est utilisé dans les mathématiques formalisées (en particulier l’écriture de preuves) indique que l’instance actuelle d’une variable n’existe que pour le cadre de cette idée logique. Dans l'exemple suivant, x acquiert immédiatement une nouvelle identité en entrant dans la nouvelle idée (il s'agit généralement des concepts nécessaires pour prouver l'idée principale) et revient immédiatement à l'ancien x à la conclusion de la sous-preuve. Bien sûr, tout comme dans le codage, ceci est considéré comme quelque peu déroutant et est donc généralement évité en choisissant un nom différent pour l'autre variable.

_ {Soit x un tel ...

_ {Preuve)

_ {Nouvelle idée {Que x soit quelque chose d'autre ... prouve quelque chose} Conclure Nouvelle idée} _

Prouvez l'idée principale avec le vieux x

51
Evan White

Il fait exactement ce que la variable var fait avec une différence de portée. Maintenant, il ne peut pas prendre le nom var puisque c'est déjà pris. 

Donc, il semble que cela ait pris le meilleur nom suivant, qui a une sémantique dans une construction de langue anglaise intéressante.

let myPet = 'dog';

En anglais, il est écrit: "Que mon animal soit un chien"

34
Charlie H

La possibilité la plus probable est que c'était le choix le plus idiomatique. Non seulement il est facile de parler, mais plutôt intuitif à comprendre. Certains pourraient argumenter, encore plus que var.

Mais je pense qu'il y a un peu plus d'histoire à cela.

De Wikipedia :

Le langage LCF de Dana Scott a été une étape dans l'évolution du lambda calcul en langages fonctionnels modernes. Ce langage a introduit l'expression let, qui est apparue dans la plupart des langages fonctionnels depuis cette époque.

Les langages impératifs à état plein tels que ALGOL et Pascal implémentent essentiellement une expression let, permettant d'implémenter des fonctions restreintes, dans des structures de bloc.

J'aimerais croire que c'était aussi une source d'inspiration pour la let en Javascript.

9
oxalorg

Je pense que l'endettement de JavaScript envers Scheme est évident ici. Scheme a non seulement let, mais a let *, let * -values, let-syntax et let-values. (Voir, Le Scheme Programming Language, 4ème éd.).

((Le choix ajoute encore plus de crédibilité à la notion que JavaScript est Lispy, mais - avant de nous laisser emporter - pas homoique.)))

1
Eric H.

Let utilise une étendue limitée plus immédiate au niveau du bloc, tandis que var est généralement une étendue de fonction ou globale.

Il semble que let ait été choisi le plus probablement car il est utilisé dans de nombreuses autres langues pour définir des variables, telles que BASIC et bien d’autres.

0
OG Sean