Je suis tombé sur une article assez intéressant qui présente le Javascript comme étant un langage à proscrire le plus tôt possible pour éviter qu'il pourrisse le web de demain.
On retrouve des trucs quand même hallucinants comme :
Vraiment effrayant venant d'un langage de programmation.
Est-ce que ceux qui ont l'habitude de bosser avec un tel langage sont d'accord avec ce qui est énoncé dans l'article ? Que pensez vous de Dart de Google ?
Maintenant, sametmax ont raison sur le fait que le JS s'est développé parce que c'est le seul langage qui a réussi à rester.
Le listing est complet mais il contient autant d'égalités cohérentes que d'égalité inconcevables, notamment à cause de la non transitivité du ==, que même PHP gère mieux.
On peut aussi ajouter, par exemple que :
#teamOCR | Change has come to SDZ | Troll chez salledeclasseouverte | Si j'avais le pouvoir d'achat, je devrais payer plus d'impôts, mais en fait, je paierai moins d'impôt, parce que les impôts c'est bien fait.
Je suis pas un grand développeur du JS mais il y a des trucs logiques dans ce que tu clames être "hallucinant"...
'' == '0' // false -> normal, aucun caractère c'est différent du caractère '0'
0 == '' // true -> Pourquoi pas, après tout "chaine vide" et 0 (rien ?) pourrait sembler cohérent (après faut voir si if('') retourne bien false
false == 'false' // false -> bizarre de toute facon d'écrire une chaine dans un caractère...
null == undefined // true -> plutôt logique que quelque chose qui est null soit aussi undefined
La plupart de ce genre de cas viennent du fait que le JS n'est pas typé. En cas de comparaison, JS convertit les deux variables en booléens avant de comparer.
Du coup "" devient false, idem pour 0 qui devient false, etc... Et false == false. D'où le réflexe qu'ont pris les bons développeurs JS d'utiliser le comparateur === qui compare également le type de la variable (et du coup 0 === "" vaut bien false).
On peut dire tout ce qu'on veut en JS, à l'heure actuelle il n'a aucun remplaçant pour du dev front et est un langage aujourd'hui très avancé avec lequel il est possible de faire du dev optimisé et performant, à condition de bien le connaître et d'avoir passer la phase bricolage.
Personne ici ne demande une explication technique, on sait très bien qu'il y en a une. La question c'est « est-ce aberrant ? », et très clairement ça l'est.
meuhia
L'article de Sam&Max parle de CoffeeScript, un langage pas terrible mais qui permet de développer un peu plus simplement côté front-end, en passant par une étape de compilation. Des langages comme ça il y en a plein, dont Dart que tu cites, et d'autres. Dart ne m'a pas convaincu avec ses histoires de types optionnels sans vraie garantie, mais il y a des gens qui essayent de faire des trucs rigolos du côté de TypeScript, Elm ou Roy. Si vraiment je devais développer une application web, il serait peu probable que j'accepte d'écrire du JavaScript directement, mais heureusement on a le choix.
>Normal, tu compares deux chaînes de caractères, du coup il n'a pas besoin de convertir tes variables car elles sont du même type.
Là n'est pas le sujet, "==" n'est pas transitif.
>Personne ici ne demande une explication technique, on sait très bien qu'il y en a une. La question c'est « est-ce aberrant ? », et très clairement ça l'est.
Plus précisemment c'est la partie '0' == false qui l'est.
Mesdames et messieurs, le WTF du soir : les tableaux en JavaScript. Comment faut-il tester l'égalité de deux tableaux en JS ? == ne fonctionne pas. === non plus. Sérieusement :
La plupart des réponses sont vachement inquiétantes d'ailleurs. Heureusement que JavaScript n'est utilisé dans aucun programme important aujourd'hui, comme un serveur web ou un éditeur de code… oh attends.
JavaScript est comme tous les langages, il suffit de ne pas prendre de mauvaises habitudes, et d'adopter de bonnes normes de codage, et tout ira bien... Pour dynamiser une page Web, on est bien obligé de l'utiliser.
Au passage, iGwann, c'est une coïncidence, ou tu t'es inscrit presque uniquement pour critiquer JS/Node.JS ?
Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
JavaScript est comme tous les langages, il suffit de ne pas prendre de mauvaises habitudes, et d'adopter de bonnes normes de codage, et tout ira bien
C'est une position contestable : si tu es obligé de faire attention à ne pas écrire de bêtise, pourquoi est-ce que le compilateur te laisserait quand même le faire ? En l'occurrence, quel est l'avantage à devoir écrire sa propre fonction pour comparer deux tableaux, alors que dans plein de langages on peut utiliser = (ou ==) directement ?
Pour dynamiser une page Web, on est bien obligé de l'utiliser.
Sur ton troisième lien, la fonction donnée semblait être bien correcte pour pouvoir comparer deux tableaux. A un moment ou un autre, cet algo doit être implémenté quelque part...
Pour le "c'est faux", permet-moi juste de rigoler sur le titre : "List of languages that compile to JS". Donc au bout du compte, ça devient bien du JS, non ?
Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
Sur ton troisième lien, la fonction donnée semblait être bien correcte pour pouvoir comparer deux tableaux. A un moment ou un autre, cet algo doit être implémenté quelque part...
Mais pourquoi est-ce que ça n'est pas déjà proposé dans le langage ? Pourquoi est-ce qu'il faut que ça soit du code JavaScript (donc plus lent que si la fonction était implémentée en C) apporté par l'utilisateur qui fasse cette comparaison, et pourquoi est-ce que == n'a pas déjà le bon comportement ?
Tu prends les choses comme si elles étaient immuables. Oui, ce qui est implémenté dans le navigateur est du JavaScript. Mais ça n'est pas pour ça qu'on est obligé d'en faire. Par ailleurs, il y a des domaines dans lesquels les gens commencent à utiliser JavaScript alors qu'il est parfaitement dispensable et je pense que ce topic explique pourquoi c'est une mauvaise idée.
Pour le "c'est faux", permet-moi juste de rigoler sur le titre : "List of languages that compile to JS". Donc au bout du compte, ça devient bien du JS, non ?
Oui. Est-ce que c'est ce que tu voulais dire ? Parce que moi j'ai compris « Pour dynamiser une page web, on est bien obligé de coder en JS ». Bien sûr c'est extrêmement différent. C'est évident qu'on est obligé d'inclure du JavaScript dans une page web pour la dynamiser… la question intéressante est « est-ce qu'on est obligé d'écrire ce JavaScript à la main ou est-ce que l'on peut utiliser un langage de plus haut-niveau, pour écrire un code qui sera mieux vérifié et optimisé par le compilateur ? ».
Quand tu programmes en C, est-ce que tu considères que tu fais de l'assembleur ou que tu utilises un langage qui est quand même un peu plus pratique à utiliser ?
Je suis d'accord avec toi sur le point que certains emploient du JavaScript un peu partout. Les éditeurs de code codés en JS commencent à fleurir, et qu'on se le dise, c'est pas très pratique.
Sinon, je ne vois pas pourquoi on aurait besoin de comparer deux tableaux, surtout en JavaScript. Pouvoir faire un tri à bulle, pourquoi pas, mais savoir si deux tableaux sont égaux... C'est sûr que ça n'empêche pas qu'il aurait fallu que ça soit implémenté, mais chaque langage a ses spécificités.
Oui, je voulais bien dire qu'il faut du JavaScript pour dynamiser, mais pas forcément qu'on est obligé d'utiliser le JavasScript pour le faire. Je suis personnellement pas fan de la syntaxe du CoffeeScript, que je trouve, paradoxalement, plus foutoir que le vrai JavaScript...
Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
C'est sûr que ça n'empêche pas qu'il aurait fallu que ça soit implémenté, mais chaque langage a ses spécificités.
Et pourquoi donc ? D'autres langages largement utilisé ne l'utilisent pas, je pense par exemple au C ou au C++...
Essai de comparer deux tableaux avec un simple "tableauA == tableauB" et tu auras une drole de surprise...
C'est sûr que ça n'empêche pas qu'il aurait fallu que ça soit implémenté, mais chaque langage a ses spécificités.
Et pourquoi donc ? D'autres langages largement utilisé ne l'utilisent pas, je pense par exemple au C ou au C++...
Essai de comparer deux tableaux avec un simple "tableauA == tableauB" et tu auras une drole de surprise...
Et tu dirais que c'est une fonctionnalité positive ? En particulier pour un langage de haut niveau comme JavaScript ?
Et tu dirais que c'est une fonctionnalité positive ? En particulier pour un langage de haut niveau comme JavaScript ?
Il suffit de connaitre l'environnement avec lequel on travaille au lieu de se prétendre developpeur parce qu'on a fait un hello world. Je parle pas non plus d'être un expert pour autant mais de connaitre les possibilités et limites de son langage de prédilection et ses mécanismes ca aide quand même pas mal.
Ton propos est-il que, JavaScript et toutes ses particularités sordides pouvant être compris et retenus par un programmeur averti, il n'y a rien à corriger et donc qu'il n'apporterait rien de rendre le langage plus élégant, plus concis ou plus pratique ?
Edit :
'' == '0' // false -> normal, aucun caractère c'est différent du caractère '0'
0 == '' // true -> Pourquoi pas, après tout "chaine vide" et 0 (rien ?) pourrait sembler cohérent (après faut voir si if('') retourne bien false
false == 'false' // false -> bizarre de toute facon d'écrire une chaine dans un caractère...
null == undefined // true -> plutôt logique que quelque chose qui est null soit aussi undefined
Je ne sais pas pourquoi tu parles de « caractères » (en particulier dans ton explication de false == 'false').
Non, undefined et null ça n'est pas la même chose, puisque undefined === null est faux.
Ici le propos n'est de toute façon pas de critiquer, par exemple, le fait que '' == '0', parce que bien évidemment ça serait idiot que cette égalité soit vraie ! Le but de l'exercice est d'illustrer le fait que des conversions implicites franchement discutables casse des propriétés de l'égalité qu'on a tendance à considérer pour acquises quand on programme, comme la transitivité. C'est vrai, c'est un exemple éculé dont tous les programmeurs devraient déjà avoir discuté, et d'ailleurs dans les conversations où les intervenants ont suffisamment de recul, il est généralement de bon ton de s'interroger sur le fait que les-dites conversions implicites risquent de masquer des bugs ou des erreurs de conception en retardant les erreurs à l'exécution.
Ton propos est-il que, JavaScript et toutes ses particularités sordides pouvant être compris et retenus par un programmeur averti, il n'y a rien à corriger et donc qu'il n'apporterait rien de rendre le langage plus élégant, plus concis ou plus pratique ?
Comme dit plus tôt, je ne suis pas un grand codeur JS donc je ne saurais m'avancer trop vite sur tout cela. Cependant quand je vois certaines applis web codé entièrement en JS je me dit que ca ne doit pas être si impossible que ca...
Perso c'est un langage que je n'affectionne pas particulièrement (parce que je suis pas dev web en particulier, parce que je trouve son manque de structure/rigueur très déroutant...) mais encore une fois, quand on voit certaines applis développé à droite à gauche c'est que ca doit être possible de bien l'utiliser correctement...
il n'y a rien à corriger et donc qu'il n'apporterait rien de rendre le langage plus élégant, plus concis ou plus pratique ?
J'ai pu lire quelques trucs sur l'avenir du JS grace à l'évolution vers ES6, ca a l'air de tomber pile poil dans cette ligne
il n'y a rien à corriger et donc qu'il n'apporterait rien de rendre le langage plus élégant, plus concis ou plus pratique ?
J'ai pu lire quelques trucs sur l'avenir du JS grace à l'évolution vers ES6, ca a l'air de tomber pile poil dans cette ligne
C'est probable, et c'est bien parce que des gens ont pris le temps de s'indigner de l'état actuel de JavaScript que celui-ci évolue.
Perso c'est un langage que je n'affectionne pas particulièrement (parce que je suis pas dev web en particulier, parce que je trouve son manque de structure/rigueur très déroutant...) mais encore une fois, quand on voit certaines applis développé à droite à gauche c'est que ca doit être possible de bien l'utiliser correctement...
Certes, mais constater qu'un truc est suffisamment bien n'empêche pas de se demander comment il pourrait être encore mieux.
C'est marrant, on a le droit de prendre les comportements bizarres du Javascript ou de PHP pour leur taper dessus, ça c'est autorisé. Et les défenseurs n'ont pas le droit de dire "Oui mais t'as qu'à savoir que ces comportements sont bizarres" ou "Oui mais ce sont des cas à la con qui n'existent pas dans la vraie vie".
Par contre prendre les comportements indéfinis de langages comme C ou C++ pour s'en moquer (des trucs comme i = ++i;ou tous les immondices liés au préprocesseur) c'est interdit, et là les défenseurs ont le droit de dire que c'est la faute du développeur et pas du langage
Tous les langages ont des comportements pourris dans certains cas particuliers, je vois pas l'intérêt de les mettre en évidence pour rabaisser un langage et de volontairement laisser de côté toutes ses qualités. inb4 "qualités en javascript ?".
Par contre prendre les comportements indéfinis de langages comme C ou C++ pour s'en moquer (des trucs comme i = ++i;ou tous les immondices liés au préprocesseur) c'est interdit, et là les défenseurs ont le droit de dire que c'est la faute du développeur et pas du langage
Non, si c'était le sujet je m'en donnerais volontiers à cœur joie. C'est même pire pour C et C++ : ce sont des langages qui sont utilisés dans des applications critiques extrêmement sensibles, hors leur sémantique est dégueulasse et difficile à formaliser, ce qui complique le développement d'outils d'analyse. Heureux ?
Ce que tu dis est donc faux. Mais si tu veux qu'on continue sur ce sujet, crée ton propre fil de discussion.
Tous les langages ont des comportements pourris dans certains cas particuliers, je vois pas l'intérêt de les mettre en évidence pour rabaisser un langage et de volontairement laisser de côté toutes ses qualités
Ouvrir les yeux des gens qui continuent d'essayer de nous livrer des applications écrites avec Node.js, par exemple. Le plaisir de la discussion, sinon.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Des tutos surtout et gratuit|Déboguez php|Un cours sur ASP.NET MVC
Retrouvez moi sur mon blog et ma chaine Youtube !
Des tutos surtout et gratuit|Déboguez php|Un cours sur ASP.NET MVC
Retrouvez moi sur mon blog et ma chaine Youtube !
Null.
Des tutos surtout et gratuit|Déboguez php|Un cours sur ASP.NET MVC
Des tutos surtout et gratuit|Déboguez php|Un cours sur ASP.NET MVC
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !
Retrouvez moi sur mon blog et ma chaine Youtube !