Cinq conseils ou moins pour écrire un bon JavaScript? [fermé]

14

JavaScript est évidemment devenu assez indispensable; cependant, je suis encore nouveau dans ce domaine, et j'ai trouvé qu'il est difficile de lutter contre le sentiment que cela semble un tel gâchis et je ne veux pas y faire face en ce moment. Je suis beaucoup plus avancé dans ma compréhension des autres langues que je ne le suis avec JavaScript, car je n'arrive pas à maîtriser cette peur. J'ai l'impression que, lorsque j'écris JavaScript, j'essaie de peindre un portrait de chiots Weimaraner.

Cela m'aide généralement à garder à l'esprit une poignée des directives les plus importantes que je peux me poser pour chaque mouvement que je fais. (À mon avis, une poignée est de cinq ou moins.)

Pouvez-vous énumérer cinq (ou moins) questions spécifiques à JavaScript que je devrais me poser pour chaque mouvement que je fais, lorsque je code JavaScript? Que seraient-ils?

Mise à jour: pour clarifier, je ne demande pas cinq choses à garder à l'esprit lors de l'apprentissage de JavaScript; Je pose cinq questions que je me pose toujours à l'avenir, que tout le monde devrait toujours poser. Des questions de haut niveau comme: "Suis-je susceptible de répéter cela ailleurs?" ou "ce nom de variable / fonction est-il suffisamment spécifique (ou trop spécifique)" <== sauf que ces exemples de questions ne sont pas propres à JavaScript. Je recherche des directives particulières à JavaScript.


la source
3
La question, telle qu'elle est formulée, encourage de nombreuses réponses, chacune étant également valable. Ce genre de questions ne fait pas de bonnes questions. Pouvez-vous reformuler tout cela? Sinon, il a de bonnes chances d'être fermé.
ChrisF
2
"Top 5 listes" n'est pas ce que nous faisons ici sur Programmers.SE. Si vous souhaitez obtenir la réponse à un problème spécifique que vous rencontrez, n'hésitez pas à poser des questions à ce sujet. Sinon, je suggère la r / programmation de Reddit pour générer des listes comme celle-ci.

Réponses:

6

Je vais répondre à cela en deux parties. L'un est "Cinq conseils ou moins pour apprendre à écrire du bon JavaScript". L'autre est «Cinq conseils ou moins pour écrire un bon JavaScript».

Apprentissage:

  1. Poser des questions
  2. Ecoutez
  3. Lis
  4. Faire des trucs

Faire:

  1. Évitez les globaux (modularisez)
  2. Faites les choses difficiles en dehors des boucles (sélection DOM, déclarations de fonctions, etc.)
  3. Découvrez comment fonctionne la portée
  4. Apprenez quand et comment utiliser les fermetures
  5. Découvrez le fonctionnement de JS orienté objet

EDIT (ajout de questions pour se conformer au PO):

Quelle portée suis-je en train de référencer?

Cela devrait aider avec les fuites globales, les gestionnaires d'événements et quand utiliser les fermetures.

Suis-je en train de me répéter?

Une abstraction et une utilisation appropriées des techniques d'OO sont importantes. Utilisez-les judicieusement.

Mon code se répète-t-il?

Il est remarquablement facile de se retrouver à placer l'accès DOM dans une boucle, ou à créer des fonctions (anonymes ou non) dans une boucle. Notez que cela peut être vrai pour le code qui utilise setTimeoutou setIntervalaussi bien que les boucles traditionnelles.

Est-ce que cela signifie ce que je pense que cela signifie?

Les valeurs véridiques et fausses dans JS peuvent être un peu délicates, en particulier lors de l'utilisation de comparaisons non strictes ( ==par opposition à ===). La frappe dynamique, la contrainte de type et le fait de référencer des objets ou des littéraux peuvent également être pertinents.

Ryan Kinal
la source
28

Tout d'abord, sachez comment fonctionne la technologie sous-jacente.

Vous devez le savoir parce que vous savez comment cela fonctionne, parce que vous allez rencontrer des problèmes de mise en réseau ou, comme je l'ai vu d'innombrables fois, les gens ne parviennent pas à comprendre ce qu'est réellement côté serveur et côté client. L'une des questions newb les plus courantes que je vois est "Comment puis-je faire JS changer une variable dans mon code ASP?!"

  • Comprenez-vous ethernet / wifi et TCP / IP pour avoir une idée générale de ce qui se passe?
  • Combien de HTTP connaissez-vous réellement?
  • Obtenez-vous réellement du HTML? Bien sûr, vous savez peut-être comment les balises fonctionnent et imbriquent les choses, mais comprenez-vous réellement le mode doctype et les excentricités? Comprenez-vous que vous ne devez pas placer de balises de paragraphe autour d'un élément de liste?
  • Inventez JavaScript (et expliquez qu'il peut être exécuté côté serveur). ecmascript, livescript, mocascript, jsscript, node ...
  • Apprenez l'API Window, apprenez l'API DOM et apprenez l'API XHR. Si vous ne connaissez pas ces trois choses, vous n'avez pas de code d'écriture professionnel pour le navigateur.

Comprenez que votre code est plus grand que vous ou votre situation spécifique

  • Bien sûr, vous avez écrit quelque chose, mais tout le monde peut le voir. C'est tout "open" source. Bien sûr, vous pouvez le masquer, le minimiser, peu importe ... à la fin de la journée, si je veux voir votre code, il est trivial pour moi de vaincre toutes les méthodes que vous mettez en place.
  • Vous devez comprendre les différences entre plusieurs navigateurs. Ciblez les plus populaires ou celles de votre marché. Par exemple, ie6 ne rendra pas les éléments de cellule de table DOM si vous ajoutezChild plutôt que les méthodes de l'API DOM spécifiquement pour les tables. Il existe plus d'exemples, vous devez les apprendre.
  • Vous devez comprendre comment écrire du code autour de tous ces problèmes dans les navigateurs, pas dans votre navigateur spécifique. Vous apprendrez rapidement que les choses qui fonctionnent bien dans un navigateur sont lentes dans un autre. Vous devrez comprendre comment les navigateurs fonctionnent et pourquoi ils sont différents.
  • Pour l'amour de la barbe d'Odin, n'écrivez pas de code qui me permette de faire des attaques de script intersite sur votre code. Si vous effectuez un appel ajax vers une cellule et faites quelque chose comme cell.innerHTML = "<script>alert("xss")</script>", et qu'une boîte d'alerte apparaît, vous avez mal fait.
  • Éloignez-vous de DynamicDrive, w3Schools et des sites Web qui donnent de mauvais conseils. Vous devez trouver des communautés qui donnent de bons conseils. Ici, sur Stack Overflow, nous avons les salles de chat JavaScript et Node.JS, et nous faisons de notre mieux pour continuer à repousser les limites de ce qui est "mieux", alors que des sites comme w3s conservent des données obsolètes et ne s'en soucient jamais. Vous devez vous en tenir aux sites de spécifications officiels tels que le W3C , le Mozilla Developer Network (MDN). Demandez un examen par les pairs de votre code. Lorsque vous avez l'impression de faire quelque chose de douloureux avec votre code, lorsque vous faites beaucoup de copier / coller + peaufiner avec votre code, vous devriez immédiatement venir dans une salle de chat et demander des conseils pour écrire un meilleur code.
  • Lorsque vous venez pour des conseils ou souhaitez partager cette chose vraiment cool que vous avez faite ... s'il vous plaît, très bien s'il vous plaît. S'il vous plaît, assurez-vous de l'avoir documenté, assurez-vous que vos noms de variables ont du sens, assurez-vous que tout n'est pas unilatéral. Vous devez écrire du code propre. Si vous avez un tas d'ordures, non seulement vous avez échoué, mais personne qui sait comment vous aider ne le voudra . Aidez-nous à vous aider.
  • Vous voulez écrire JavaScript - c'est cool, respectez que tout le monde ne supporte pas JavaScript. Deux raisons à cela - 1) Internet plus rapide pour tout le monde (plutôt que "ajax toutes les choses" qui mène à une expérience plus lente). 2) Le Web est plus accessible aux utilisateurs de navigateurs sur console, aux utilisateurs de téléphones mobiles sans script. Ce que j'essaie de dire, c'est que votre site devrait se dégrader avec élégance si quelqu'un n'a pas JavaScript et, à tout le moins, utiliser des <noscript>balises pour les alerter.
  • En raison de la nature prototype de JavaScript, vous pouvez modifier le fonctionnement réel du langage, ce qui est vraiment agréable. Vous voyez, JavaScript évolue, nous nous retirons de "ECMA Script 3", qui est l'ancienne version de JS, et dans "ECMA Script 5" (aka, es5). Grâce au prototype, nous pouvons corriger le langage es3 sur le terrain pour qu'il fonctionne comme es5. Cela signifie, ie6, un navigateur de 10 ans obtient la fonctionnalité de langue qui est sortie l'année dernière. Utilisez les cales es5 partout où vous le pouvez, elles sont vraiment cool et vous devez les examiner.
  • Le monde occidental des enfants blancs anglophones n'est pas celui qui utilise Internet. Codez en conséquence. Cela signifie que vous devez comprendre l'internationalisation et écrire du code qui traite une demande plus élevée. Il y a 10 ans, il y avait moins de 500 millions de personnes en ligne, aujourd'hui c'est environ 2 milliards, et dans 10 ans? Probablement près de chaque personne sur la planète aura accès à Internet, ce qui signifie que vous devez prendre en charge les noms qui ne correspondent pas à l'expression régulière /[a-z ']/i, mais qui incluent l'hindi, l'arabe, les accents (c'est un problème existant des développeurs à courte vue), chinois , et d'autres. Comprendre les jeux de caractères, Unicode et UTF-8.

Vous êtes un programmeur, pas une fabrique de pâtes. Arrêtez d'écrire des spaghettis.

  • Nommez vos variables d'après des choses qui ont du sens.
  • Documentez votre code. Je m'en fiche si vous utilisez JSDoc alimenté par rhinocéros ou si vous avez un tas de gribouillis. Rédigez une documentation qui aide la personne qui va utiliser votre code. Rédiger de la documentation pour quelqu'un qui souhaite améliorer ou maintenir votre code. Incluez des commentaires utiles. Des commentaires comme "This fizzes the bizz"ou ceux mi-anglais mi-français ne sont pas utiles. Décrivez ce que fait une fonction. Décrire des sections complexes de code.
  • Découvrez comment limiter la répétition du code. Recherchez une conception modulaire ou des modèles fonctionnels. Voyez ce que vous pouvez résumer. Vous ne devriez jamais finir par couper + coller + modifier de gros segments de code pour faire la même chose.
  • Vous devez comprendre l'API DOM. Le DOM et les objets de fenêtre fournissent beaucoup de bonnes choses. Cela ressemble à beaucoup de travail, mais c'est parce que c'est un gros acronyme effrayant. Beaucoup d'entre vous, les ninjas JavaScript, aiment écrire du code tel que <a href="javascript:alert("foo")">. FFS NE FAIT PAS CELA. Attendez que le document complet soit chargé, séparez votre code JavaScript du document html. Il s'agit des pratiques de base de la POO 101, mais n'incluez jamais votre JS ou CSS dans votre document html. Découvrez comment le faire correctement ou trouvez quelqu'un qui sait vous montrer comment le faire. Encore une fois, posez des questions.
  • Il Javascript:foo("buz")s'agit d'un pseudo-protocole, il n'est pas entièrement pris en charge, et si vous n'utilisez pas le javascript en ligne, vous ne l'utiliserez pas en premier lieu. Je vous promets du fond du cœur qu'il n'y a aucune raison que ce soit sur cette terre ou n'importe où dans l'univers dont vous avez besoin pour mettre votre javascript à l'intérieur d'un élément HTML. Déjà. Alors ne le fais pas. Je n'aiderai même plus les gens qui font ça, c'est si mauvais.

Découvrez comment écrire du code de telle manière qu'il ne se casse pas tout le temps.

  • Les variables globales sont l'un des plus gros problèmes. Découvrez comment fonctionne la programmation fonctionnelle en JavaScript. Découvrez ce qu'est le levage. Découvrez comment éviter les variables globales.
  • Utilisez des outils d'analyse de code statique. Ceux-ci vous alerteront immédiatement de tous les petits "oups" que vous avez faits lors de l'écriture de votre code. Vous avez oublié un point-virgule quelque part? Oh, ça y est. Vous avez un monde quelque part? Oh, ça y est. Un code qui pourrait générer un tas d'erreurs mystérieuses lorsque vous essayez de l'exécuter? OH! Ils sont là! Plus besoin de déconner et de regarder dans une pile de code pendant des heures à essayer de comprendre quelque chose qui n'est qu'une erreur de syntaxe. (Eh bien, presque aucun, vous auriez pu faire quelque chose qu'il ne peut pas attraper, mais c'est généralement génial).
  • Test de l'unité. Il n'y a aucune raison de ne pas l'être. Il y a des tonnes d'outils de tests unitaires. Fondamentalement, le test unitaire est "Voici ma fonction" et "Je veux qu'il affiche Y" "Voici quelques entrées de test" Et le test est "Ont-ils tous fonctionné?" Il existe de nombreux frameworks de test JS, comme le populaire QUnit. Faites le tour de votre moteur de recherche préféré et voyez ce qui vous chatouille. Mais utilisez-les.
  • Gestion du contrôle des sources, également appelé contrôle de version. Git est populaire, et pour cause. Il en va de même pour SVN et quelques autres. Ce dont vous avez besoin pour arrêter de faire cela très instantanément, c'est éditer le code de production. Vous devez arrêter de renommer les fichiers. main_backup_20110911.js.bak.1Vous perdez des choses, votre répertoire devient désordonné, vous ne pouvez pas facilement «revenir en arrière» à un point précédent dans le temps. Vous ne pouvez pas voir ce qui se passe, vous ne pouvez pas créer de correctifs de code. Alors, commencez simplement à apprendre le GIT, cela devrait vous prendre une heure et vous ne reviendrez jamais.
  • Examen par les pairs. Vous n'êtes pas si bon, moi non plus. Je m'améliore en demandant autant que possible des commentaires. Voilà comment vous devriez le faire aussi.

Écrivez du JavaScript que les gens adorent

  • Découvrez pourquoi votre code est lent. Utilisez jspref et créez des tests.
  • Arrêtez de lier des événements à un élément DOM, c'est lent et cela crée de graves problèmes de propagation d'événements qui vous feront perdre beaucoup de temps. Recherchez «délégation d'événement» en JavaScript.
  • Cesser d'utiliser innerHTML pour modifier le DOM. Cela revient à apprendre ce qu'est le HTML et à apprendre ce qu'est le DOM. Le HTML est des données envoyées par le serveur que votre moteur de rendu de navigateur utilise pour créer un tas d'objets de programmation qui finissent par être un objet de document. Lorsque vous utilisez innerHTML, vous demandez à votre navigateur de restituer le tout. Heureusement, comme il y a plus de 10 ans, nous avons créé l'API DOM, et elle vous permet «d'ajouter un enfant» ou de «créer un nœud de texte», sans avoir à mettre à jour le tout. innHTML est une honte que Microsoft a inventée - si vous l'utilisez, vous perdez également tous les privilèges de pleurnicher sur IE6 étant horrible parce que vous aidez à ce que ses ordures restent pour toujours. Apprenez le DOM.
  • Il doit fonctionner partout où il le peut. Si quelque chose n'est pas pris en charge, il doit se dégrader gracieusement afin que l'expérience ne suce pas - vous ne pouvez pas simplement gifler vos utilisateurs au visage et planter.
  • Le droit d'auteur et la licence sont importants. N'arnaquez pas le travail acharné des autres. Si quelqu'un dit «pas à revendre», vous ne pouvez pas le vendre. Ne soyez pas un imbécile, ou nous détesterons votre code pour arnaquer les gens qui travaillent dur.
  • JS est des prototypes, pas des classes. Arrêter de faire ça. Si vous ne comprenez pas comment fonctionne le prototype, vous devez le faire. Recherche le sur Google. JavaScript n'est pas basé sur les classes, arrêtez d'essayer de créer des classes, cela fonctionne très bien rarement. Les gens essaient d'écrire du code classique dans un langage prototype et utilisent cela comme un cas pour "pourquoi le langage craint", je pourrais faire le même cas pour Ruby ne pouvant pas supporter le prototype. Apprenez quelque chose de nouveau et arrêtez de le faire mal.

Concentrez-vous sur les bases, toujours.

  • Vous vous trompez, et c'est génial, car vous savez maintenant quelque chose. Rien n'est pire que quelqu'un qui n'admettra pas qu'il se trompe et continue de claquer le mauvais code comme s'il s'agissait d'un ninja super-héros renégat. Ce ne sont que des imbéciles. Admettez que vous pouvez vous tromper, admettez que vous pouvez vous tromper, demandez de l'aide.
  • Vous n'avez pas toujours besoin de jQuery. jQuery crée beaucoup de code lent et aide les gens qui ne connaissent pas JS à écrire JS. C'est en outre un problème car JS ne nécessite pas que vous connaissiez JS pour écrire JS. Allez comprendre. Une fois que vous aurez compris quelques-unes des choses que j'ai mentionnées ci-dessus, telles que l'apprentissage d'événements, l'apprentissage du DOM, l'apprentissage de innerHTML, vous comprendrez pourquoi jQuery peut être dangereux pour votre code. Il peut être utilisé correctement dans de nombreux endroits, mais vous pouvez souvent utiliser une bibliothèque plus petite ou même haleter le JavaScript standard fourni avec votre navigateur pour accomplir quelque chose. Vous n'avez pas besoin de jQuery pour faire quoi que ce soit, il est plus facile d'écrire du code qui est cool si vous apprenez, mais vous devez commencer à faire mieux et à en apprendre davantage - lorsque vous en saurez plus, vous découvrirez comment écrire un meilleur code dans jQuery de toute façon.Découvrez quelques autres bibliothèques JavaScript et arrêtez d'être si étroit d'esprit.
  • Vous n'avez pas besoin de couper + coller + modifier, créez du code SEC. Je l'ai déjà mentionné, mais c'est également important ici. Vous ne pouvez pas écrire de code de qualité si votre base de code est une honte.
  • N'abusez pas des tableaux / différences d'objets, apprenez à boucler. Découvrez pourquoi vous utilisez un for (;;)et pourquoi vous utilisez une for( in )boucle. Quand utiliser une boucle while. Arrêtez d'imbriquer les FI lorsque vous pouvez simplement utiliser un boîtier de commutateur. Les objets ne préservent pas l'ordre, ne les utilisez donc pas comme un tableau; vieux Opera / FF, vieux MISE, parfois Flash ne respectera pas l'ordre de vos objets. Utilisez un tableau si vous voulez garder un ordre de choses, utilisez un objet si vous voulez un objet (quelque chose qui n'a pas d'ordre d'éléments).
  • Comment les structures de décision peuvent être utilisées à votre avantage, et non pas ajouter de la complexité à votre code. Arrêtez d'imbriquer les IF, découvrez comment fonctionnent les opérateurs logiques booléens. Découvrez comment fonctionne le boîtier de commutation.
  • RTFM. Le meilleur endroit pour en savoir plus sur un meilleur code est de lire les spécifications réelles. Lisez les spécifications RFC sur la partie du code que vous essayez d'utiliser. Lisez le document ECMAScript. Lisez la spécification DOM du W3C. Lisez la spécification W3C XHTML / HTML / HTML5. Lisez les spécifications, elles sont bonnes.

Concentrez-vous sur le long jeu, pas un flash rapide et mourrez.

  • Vous devez aider la communauté, vous devez écrire du code qui existera pendant longtemps. Ayez de la passion pour votre code et votre communauté. Si vous avez laissé une mauvaise connaissance quelque part, allez-y et corrigez-la. Les mauvaises informations sont vraiment difficiles à purger et restent à jamais. Faites votre part. N'aidez pas w3schools à aggraver le Web.
  • Ne sautez pas de nulle part et dites "Hé, j'ai une excellente idée de la façon d'utiliser which", déposez un tas de code que personne ne peut utiliser et disparaître. Vous n'avez rien apporté. N'utilisez pas de variables comme aet chezburger.
  • Apprenez à repérer le mauvais code et le bon code, trouvez-le dans votre propre code, transformez votre mauvais code en bon code.
  • Créez quelque chose, apprenez quelque chose, enseignez quelque chose.
  • Élargir vos horizons. Vous ne pouvez pas simplement écrire JavaScript pour toujours - prenez un congé sabbatique dans quelque chose d'autre qui vous intéresse, revenez, partagez ce que vous avez appris et voyez si vous pouvez trouver une place pour cela dans la communauté. Essayez de montrer à l'autre monde la valeur de JavaScript pendant que vous êtes là-bas.
  • Tu as toujours tort, même quand tu sais tout. Utilisez une preuve pour être correct, pas votre statut / autorité. Vous ne pouvez jamais avoir raison, mais votre preuve est toujours correcte. N'entrez pas dans des matchs énervés, aussi dur que cela soit à éviter parfois. Soit il y a des preuves, soit il n'y en a pas. Les flammes n'aident personne.

Pour toute personne intéressée, j'ai en fait pris la plupart de ces notes personnelles sur un tutoriel que je n'ai nulle part fini d' écrire.

Incognito
la source
Votre réponse, vers le haut, a complètement confondu HTTP et HTML.
Bryan Boettcher
@insta Je suis assez intentionnel en disant que vous devez comprendre HTTP. Comme je l'ai dit, "L'une des questions newb les plus courantes que je vois est" Comment faire pour que JS modifie une variable dans mon code ASP?! ". Ils ne comprennent pas le protocole qui contient le contenu HTTP, les cookies et les en-têtes du serveur au client. J'essaie de dire qu'il faut connaître les couches pour qu'elles ne soient pas déroutées par ces choses. Pour exprimer cela fonctionnellement, je dirais: TCPIP(HTTP(ClientServerRelationship(), Cookies(), HTML(JavaScript(Knowledge))))
Incognito
1
"Avez-vous réellement HTTP? Bien sûr, vous savez peut-être comment les balises fonctionnent et s'imbriquent, mais comprenez-vous réellement le mode doctype et les excentricités? Comprenez-vous que vous ne devriez pas mettre de balises de paragraphe autour d'un élément de liste?" Rien dans cette citation n'implique le protocole de transport, en dehors du cas mal utilisé.
Bryan Boettcher
1
@insta Ah désolé, je ne l'ai absolument pas vu, je l'ai changé en HTML. Merci :).
Incognito
1
+1 C'est une bien meilleure réponse que celle acceptée
Tom Squires
7
  1. Lisez le Javascript de Douglas Crockford : The Good Parts . C'est tout à fait une astuce, mais honnêtement, c'est le meilleur conseil que j'ai jamais entendu pour écrire un bon javascript.

  2. De même, lisez les articles de Douglas Crockford sur Javascript .

NT3RP
la source
9
Mais ne le prenez pas religieusement. Regardez-le et assurez-vous que cela a du sens pour vous. Posez des questions lorsque vous ne comprenez pas le but.
Incognito
3
alert('This illustrates how JavaScript has first-class functions');
alert('It also illustrates how to use closures.  Try running this code in your browser.');

var funky = function(s) {
    alert("We're getting funky with " + s);
};

var makeFunkyObject = function(funkyFunction) {
    var numberOfTimesAlerted = 0;
    var fn = { };
    fn.alertFunky = function(s) {
        funkyFunction(s);
        numberOfTimesAlerted++;
    }
    fn.getNumberOfTimesAlerted = function() {
        return numberOfTimesAlerted;
    }
    return fn;
}

var funkyObject = makeFunkyObject(funky);

funkyObject.alertFunky('Alice'); // alerts We're getting funky with Alice
funkyObject.alertFunky('Bob'); // alerts We're getting funky with Bob
alert(funkyObject.getNumberOfTimesAlerted()); // alerts 2

alert('Also, be sure to distinguish between learning about JavaScript and learning about the DOM');
alert('The former is awesome; the latter, not so awesome.');
Biscuits à la farine de riz
la source
+1: Une fois que vous aurez bloqué cela, vous deviendrez un ninja javascript.
Spoike
2

Voici quelques questions qui devraient vous aider à utiliser JavaScript.

  1. Comment fonctionne JSON et à quoi sert-il?

  2. Pourquoi les objets fonctions sont-ils en Javascript?

  3. Pourquoi ne devrais-je pas utiliser eval?

  4. Comment créer des événements en javascript?

  5. Comment puis-je utiliser la détection en javascript?

Couvre à peu près la plupart des choses que vous devez faire en Javascript.

Spoike
la source
1
  1. Utilisez toujours des points-virgules. Les points-virgules implicites (dans JS) sont une idée horrible, en particulier avec une partie de la syntaxe intéressante flottant dans l'utilisation courante. Ils sont également généralement requis par tout minifieur JS.
  2. Évitez eval () . Cela provoque toutes sortes de problèmes et constitue un moyen très rapide de ralentir votre application. La plupart des utilisations sont en fait des abus. Chaque fois que vous pensez que vous devez utiliser eval(), vérifiez deux fois et triplez une autre façon; il existe presque toujours un moyen plus propre et plus simple, sauf si vous essayez d'exécuter une chaîne entière de JavaScript.
  3. (function() {/* stuff */})()est un bon moyen d'encapsuler un ensemble de code et de lui créer une portée locale. Utiliser des objets est une autre façon, souvent meilleure; les objets sont plus analogues aux espaces de noms dans d'autres langues lorsqu'ils sont utilisés de cette manière. Faites juste attention this. Contrairement à la plupart des autres langues, thisne fait pas toujours référence à ce que vous pourriez penser intuitivement. Souvenez-vous également que sauf indication contraire, toutes les variables, fonctions et autres objets JS sont tous globaux, même sur plusieurs .jsfichiers.
  4. Trouvez et apprenez / utilisez une bonne bibliothèque JS. jQuery est l'un des plus populaires. Ceux-ci feront beaucoup de travail pour vous, y compris des choses comme la détection de fonctionnalités et l'abstraction de la manipulation DOM et les multiples façons dont différentes choses ont été implémentées dans différents navigateurs.
  5. Utilisez toujours des points-virgules. Sérieusement. Obtenez un IDE qui vous avertit lorsque vous les oubliez. Je ne veux pas faire de bruit, mais il y a eu quelques fois où des bogues ont été introduits juste faute d'un point-virgule et le navigateur ne vous en avertira pas.
Matthew Scharley
la source
Vous n'avez pas toujours besoin de points-virgules, mais je conviens que c'est une bonne pratique.
rlemon
1
Les règles ASI sont les mêmes dans tous les moteurs JS, donc votre code à un endroit devrait se comporter de la même manière dans un autre. C'est agréable de voir des points-virgules aux bons endroits, mais cela ne vous tuera probablement pas comme d'autres problèmes. Cela étant dit, vous devriez vous méfier d'ASI, faire des choses comme return, et la ligne suivante contenant vos données, vous l'aurez dit en return ;raison d'ASI. Je dirais qu'il est plus important de comprendre les règles ASI et les espaces blancs que de "toujours utiliser des points-virgules". Mais c'est un excellent moyen de vous sauver.
Incognito
+1 pour éviter l'évaluation, -1 pour la paranoïa point-virgule. L'insertion de points-virgules de JavaScript a des règles particulières qui, lorsqu'elles sont suivies, sont très logiques. Découvrez-le
Ryan Kinal
@Incognito +1I'd say it's more important to understand ASI and whitespace rules than it is "always use semicolons."
rlemon
Pour tous ceux qui disent que vous n'avez pas toujours besoin de points-virgules; revenez vers nous lorsque vous avez effectué le développement réel de plusieurs navigateurs en javascript (voir IE6, 7 et 8).
Spoike
0

Je pense que les classes sont un outil assez puissant pour structurer le code. Il existe de nombreuses règles indépendantes du langage sur la façon de concevoir des systèmes basés sur les classes et certains principes OO sont en fait plus clairement mis en œuvre lors de l'utilisation des classes.
Par conséquent, je vous suggère de jeter un œil à CoffeeScript .

À partir de là, je vous suggère d'essayer de rassembler des informations sur la façon de mettre en œuvre SOLID , DRY , GRASP , KISS et YAGNI , et plus important encore, de savoir comment gérer les situations, où elles semblent entrer en conflit (elles ne le font jamais, seulement votre compréhension d'eux ou le problème actuel le fait). C'est assez facile à trouver, même sur stackexchange.

Veuillez noter que ces principes s'appliquent tout autant au développement JavaScript "brut". Cependant, beaucoup de contenu que vous trouverez sur eux les illustrera en utilisant des langages basés sur la classe et il pourrait donc être utile de programmer dans une langue, où il n'y a pas trop de frais généraux impliqués pour les comprendre.
Personnellement, je pense que JavaScript est un langage extrêmement puissant, mais en fait, vous devrez d'abord comprendre profondément d'autres langues, pour vraiment apprécier ce fait.

back2dos
la source
-7

Je fais l'hypothèse que vous utilisez JavaScript pour le développement de l'interface utilisateur côté client dans une application Web.

1) Devrait-il être côté client ou côté serveur? Je sais que je suis allé écrire de gros morceaux de code qui méritaient vraiment d'être sur le serveur et vice versa. Souvent, je vais me lancer dans un appel AJAX pour quelque chose qui se trouve juste mieux placé dans le code du serveur à inclure sur le chemin. Surtout des choses qui sont de nature statique mais changent assez régulièrement (liste de catégories par exemple.)

2) Existe-t-il un plugin qui le fait déjà?J'utilise beaucoup JQuery et la réponse est presque toujours OUI! Je prends souvent du code de plugin que quelqu'un a écrit et l'adapte à mes besoins (en ajoutant généralement des classes supplémentaires aux choses, etc.), mais j'ai rarement besoin de recommencer à zéro.

3) Javascript est-il le bon endroit pour cela?Parfois, je me surprends à ajouter tout un tas de styles dynamiques à quelque chose via Javascript quand il est beaucoup plus logique d'utiliser un CSS intelligent.

4) Dois-je utiliser un outil différent? C'est quelque chose avec lequel je me suis débattu récemment. Il existe des alternatives javascript comme le script café qui sont bien gérées dans ma pile (Rails 3.1) et j'ai envisagé de déplacer ou non une grande partie de mon code là-bas.

5) Ce code Javascript est-il un bon code? Javascript est un code comme tout autre code. Ce code est-il aussi bon que le reste de mon code? Sinon, pourquoi pas? Est-ce jetable? Suis-je paresseux?

A dessiné
la source
4
Vos conseils pour écrire un bon JavaScript incluent "Ne pas écrire JavaScript" et "Écrire un bon JavaScript". Désolé, -1
Ryan Kinal
1
@RyanKinal Il comprend "Utilisez jQuery la plupart du temps." Cela seul est un gros problème.
Incognito
2
@ f0x Pourquoi dites-vous cela? Pourquoi ne voudriez-vous pas vous appuyer sur le travail que quelqu'un d'autre a fait?
Drew
2
@Ryan, votre réponse à "énumérez cinq questions ou moins que je devrais me poser" incluait trois directives qui commençaient par "apprendre [telle ou telle] ..." qui est un bon conseil en général, mais honnêtement, je posais quelque chose de vraiment spécifique ici: questions que je devrais me poser pour chaque mouvement que je fais en codant JavaScript. Pas "que dois-je apprendre pour comprendre JavaScript." Drew est la seule personne à avoir répondu à la question posée.
2
@ f0x Je ne dis pas que vous devez utiliser aveuglément un plugin, que cela ait du sens ou non, mais nous utilisons tous des outils que d'autres nous fournissent, sinon nous utiliserions tous notre propre version de l'assembly. Les plugins peuvent vous donner un excellent point de départ soit (a) en résolvant votre problème de manière absolue ou (b) en vous donnant un aperçu de la façon dont d'autres ont résolu le problème que vous essayez de résoudre.
Tiré le