11521 sujets

JavaScript, DOM et API Web HTML5

Modérateur
Salut tout le monde,

Depuis quelque temps, je me pose cette question. with est un mot clef. Je viens de relire la doc à ce sujet. J'ai l'impression que c'est du sucre syntaxique plus qu'autre chose. Je me demande dans quel cas, est-ce pertinent de l'utiliser sachant qu'il y a son lot de contraintes ?

Si vous avez de l'expérience dans son utilisation, je serai curieux de connaître la raison de ce choix.
Modifié par niuxe (12 Sep 2024 - 14:34)
Je ne suis pas un expert, je n'ai jamais vu passer ce mot clef... mais ce n'est peut-être pas étonnant, en effet, un peu plus bas dans la page de documentation que tu proposes :
"MDN" a écrit :
Note : L'utilisation de l'instruction with n'est pas recommandée et est interdite dans le mode strict d'ECMAScript 5. L'alternative recommandée est d'assigner l'objet utilisant les propriétés désirées à une variable temporaire.
Modérateur
Olivier C a écrit :
Je ne suis pas un expert, je n'ai jamais vu passer ce mot clef... mais ce n'est peut-être pas étonnant, en effet, un peu plus bas dans la page de documentation que tu proposes :


Je le connais depuis pas mal de temps et en effet, la doc indique qu'il pose problème. Vu qu'il y a toute une série de contraintes, on se demande dans quel cas son utilisation est pertinente. "with" sert bien à quelque chose.
J’ai utilisé with pendant longtemps mais effectivement il pause des problèmes de syntaxe, par exemple on ne peut pas avoir une variable qui porte le même nom qu’une propriété de l’objet que l’on désigne par with.
Quand on a besoin de with c’est qu’on travaille sur un objet précis. Il est donc préférable et plus simple de défini une méthode de l’objet et d’effectuer les opérations dans cette méthode.
Certes, il faudra alors préciser this.xxx mais si c’est pour écrire this.xxx (propriété de l’objet) = xxx (argument de l’appel de la méthode c’est tout de même plus lisible et plus facilement maintenable quand on doit reprendre du code écrit par quelqu’un d’autre ou même par soi-même quelques années auparavant.
Modérateur
Bonjour,

1) Il permet essentiellement d'alléger code, mais au prix de pas mal d'inconvénients dont le fait d'être un nid à bugs,

2) Il est "deprecated" en javascript, donc il vaut mieux ne plus l'utiliser,

3) Il existe dans d'autres langages et fait partie des "scope functions".

D'une manière générale, je déconseille l'utilisation des "scope functions" ayant pour principal but une réduction de code et qui sont selon moi difficiles d'emploi en pratique, car on est vite "paumé" dès que le code fait une taille conséquente.

Amicalement,
Modifié par parsimonhi (13 Sep 2024 - 12:04)
Modérateur
parsimonhi a écrit :

1) Il permet essentiellement d'alléger code, mais au prix de pas mal d'inconvénients dont le fait d'être un nid à bugs,


Oui puisqu'il peut y avoir collision de nom de méthode. En avant les ambiguïtés.


parsimonhi a écrit :

2) Il est "deprecated" en javascript, donc il vaut mieux ne plus l'utiliser,

Je pense que ce mot clef va disparaitre. Comme tu l'as indiqué, c'est un nid à bugs et erreur en console

parsimonhi a écrit :

3) Il existe dans d'autres langages et fait partie des "scope functions".

Je me souviens qu'en Action Script, c'était mis en avant.

parsimonhi a écrit :

D'une manière générale, je déconseille l'utilisation des "scope functions" ayant pour principal but une réduction de code et qui sont selon moi difficiles d'emploi en pratique, car on est vite "paumé" dès que le code fait une taille conséquente.


En effet. Je dirai même que c'est casse gueule. Si tu fais une refacto et que tu aies besoin d'une serie d'instructions dans un with, tu vas devoir tout reprendre pour remettre un contexte.

Je pense que l'idée de départ devait être bonne. Mais dans les faits with, pose trop de problème.

J'aime bien ton expression "scope fonction". Ça définit bien ce contexte. Smiley smile

Merci à vous tous Smiley smile
Modifié par niuxe (13 Sep 2024 - 14:26)
Le mot-clé `with` en programmation, notamment en Python, est effectivement du sucre syntaxique qui simplifie le code en gérant les ressources de manière plus concise. Il est pertinent lorsque vous devez manipuler des objets nécessitant une gestion de contexte, comme les fichiers ou les connexions, car il garantit que les ressources sont correctement fermées après utilisation, réduisant les erreurs et simplifiant le code.
Bonsoir,

Le mot-clé with en JavaScript n'a jamais eu vraiment d'utilité pratique étant donné la confusion qu'il introduisait à la relecture du code. Comme pas mal de choses dans divers langages, c'était une vraie fausse bonne idée, et c'est aujourd'hui rien de plus qu'un vestige historique.

ET pour être bien clair, ne vous faites pas avoir par la réponse de ChatGPT ci-dessus, le with de Python n'a absolument rien à voir avec le with de JavaScript. En Python, il permet de s'assurer qu'une ressource sera bien fermée en quittant le bloc, même si une exception survient. Il ne faut surtout pas hésiter à l'utiliser.