11521 sujets

JavaScript, DOM et API Web HTML5

Je remets ce post dans la bonne catégorie

Bonjour à tous

Je constate que je dois être un des derniers dinosaures à ne pas utiliser let et const.

Même si je comprends l'intérêt de ces distinctions, je n'y avais personnellement pas trouvé d'intérêt pour ce que je fais : modifier les milliers de lignes de code qui tournent depuis 20 ans est plutôt un risque d'introduire des erreurs. Par ailleurs dans les premiers temps il n'était pas certain que les navigateurs de l'époque aient tous été en mesure de traiter ces concepts.
Je me souviens en effet qu'il y a quelques années un égyptologue néo-zélandais avait sonné l'alarme après une mise à jour du site pour une fonction qui ne fonctionnait pas sous IE.

Je me suis pourtant dit que pour un autre site que je gère et qui n'a que quelques dizaines d'utilisateurs je pourrais essayer de suivre la tendance actuelle.

Je viens donc de commencer à faire des modifications dans mon code en introduisant let et const.
En première approximation, remplacer tous les var par des let, puis regarder au cas par cas si c'est bien approprié.
Je tombe sur le code suivant

function createCookie(name, value, duration) {
	if(!name) return;
	let parts  = [name + '=' + (value ? value : '')];
	if(duration) {
		let expDate = new Date();
		expDate.setTime(expDate.getTime() + parseInt(duration) * 24 * 3600 * 1000);
		parts.push('expires=' + expDate.toGMTString());
	}
	parts.push('path=/');
	parts.push('sameSite=Strict');
	parts.push('secure=TRUE');
	document.cookie = parts.join('; ');
}

A priori ça devrait fonctionner, mais je me pose une question : pourquoi pas plutôt

const parts  = [name + '=' + (value ? value : '')];

parts est un array, c'est à dire un objet.
Cet objet n'est pas redéfini dans la suite du code, même si le code a pour but de "nourrir" cette variable en y ajoutant des éléments.
Par acquis de conscience je regarde les forums et je trouve des discussions où des gens parlent du sujet. C'est une véritable foire d'empoigne entre ceux qui défendent mon point de vue et ceux qui au nom d'une pureté doctrinale qui m'échappe disent qu'il ne faut pas faire de push sur une variable const.

Votre opinion m'intéresse.

Par ailleurs si vous connaissez une façon moins stupide de créer un cookie ça m'intéresse aussi, le code doit avoir au moins 20 ans...
Modifié par PapyJP (27 Jun 2022 - 11:11)
Salut. Beaucoup te dirait : "quand tu sais pas tu mets let". Moi (à l'inverse de Niuxe) je mets const partout, sauf pour une variable dont il est prévu qu'elle sera modifiée. J'aime bien ce côté rigide du code qui évite en partie des effets de bord lors d'un développement ultérieur.

Je mets const aussi pour les valeurs et les objets, sachant que dans ce cas c'est le type qui n'est pas modifiable, les valeurs dans le tableau/objet, elles, peuvent être modifiées. Si j'avais besoin de valeurs de tableau ou objet vraiment figées j'utiliserais Object.freeze, ce qui en pratique ne m'arrive jamais.
Modifié par Olivier C (27 Jun 2022 - 13:40)
Merci de ta réponse
C’est certain que let est la valeur par défaut mais si dès le début je n’essaie pas de comprendre autant laisser var comme avant!
Je vais mettre const dans ce cas là, ça me semble logiquement la chose à faire.

Je me demande aussi quoi faire pour les globales.
selon le même raisonnement je pense que

const x = [];
ou const y = {};

devrait être approprié dans la plupart des cas.
Le nom const est perturbant pour l’as personnes qui ont des décennies de programmation dans d’autres langages où const s’applique exclusivement à des valeurs scalaires qui ne bougent pas. Ou alors laisser var pour les globales ?
PapyJP a écrit :
C’est certain que let est la valeur par défaut mais si dès le début je n’essaie pas de comprendre autant laisser var comme avant!

Lis ceci : ES6, ES2015 : la déclaration de variables avec const, let et var (Putain de code)

PapyJP a écrit :
Le nom const est perturbant pour les personnes qui ont des décennies de programmation dans d’autres langages où const s’applique exclusivement à des valeurs scalaires qui ne bougent pas. Ou alors laisser var pour les globales ?

Pour les globales, il y a fréquemment une convention rencontrée qui est de mettre le nom de la variable en majuscules et underscores :
const LA_FAMEUSE_VARIABLE = Object.freeze("une chaîne de caractère, un tableau ou un objet"); // @note const empêche une nouvelle assignation, mais Object.freeze rend carément les valeurs immutables.

Modifié par Olivier C (27 Jun 2022 - 15:33)
Oui. Je suis cette convention depuis que je code, quel que soit le langage. Sinon on a vite fait de faire n’importe quoi.
Sauf pour les noms de fonctions qui sont (le plus souvent) des globales en js.
Quand j’aurai maîtrisé les définitions de variables je regarderai d’autres points des nouvelles fonctionnalités, en particulier les classes d’objets (vs les objets js) mais une chose à la fois.