Depuis que Delphi vous fait aller jusqu'à la section Var d'une méthode pour déclarer une variable locale, vous retrouvez-vous enfreindre " Law de Curly " (réutilisation des variables) plus souvent que vous n'avez fait au collège? (Sauf bien sûr, vous avez programmé Pascal au collège). P>
Si tel est le cas, que faites-vous pour vous briser cette habitude, en particulier dans les fonctions où vous devez obtenir et / ou définir un grand nombre de propriétés. Y a-t-il un seuil où il est acceptable de déclarer tempint: entier code> et
Tempstr: chaîne code>. (Utilisez-vous un «E» dans
T E B> MP CODE> Parfois et non d'autres fois?) P>
11 Réponses :
Pas vraiment. Comme je fais mes méthodes vraiment, la section Var n'est pas loin. Comme la taille de ma méthode a beaucoup diminué depuis l'université, je dirais que je le brise moins souvent. P>
Je pense que Delphi fait l'exception avec la surutilisation des variables Temp. La plupart du temps où je crée une fonction / procédure où je sais que j'aurai besoin de boucles ou de cordes Temp, la première chose que je fais est de créer un var i, J: entier; TMP: chaîne; et ajoutez plus au besoin :) p>
J'aime bien cela, j'imagine que les gars C ++ se moqueraient à l'idée, d'autant plus que vous oubliez implicitement que vous utilisez beaucoup de boucles imbriquées, mais je parie que vous économisez beaucoup de temps à ce faire.
"Implicitement impliquant?" Je devrais vous signaler au département du département de licenciement pour cela. ;-)
Déclaring variables est très simple - parfois, ils seraient créés automatiquement (modèle de boucle '), d'autres fois, vous pouvez simplement utiliser le refactoring «Declare variable» (ou «Ajouter local var» si vous utilisez MMX - comme vous utilisez devrait). P>
J'aurais probablement constaté que cela était un problème plus important s'il n'avait pas eu Ctrl-Shift-V comme raccourci vers la section Var. Je n'écris pas des méthodes gigantesques ici, mais parfois, ils ont un peu de retard (et je peux justifier cela bien sûr) et cela aide beaucoup. Je ne sais pas si ce raccourci provient de CnTools ou de Gexperts, mais ils sont tous les deux très utiles et je les recommanderais tous les deux. p>
J'ai les deux add-ins installés - je vais essayer cela plus tard. Je ne savais pas à propos de Ctrl-Shift-v. :-)
Je n'ai pas tendance à réutiliser les Vars locaux en tant que règle de sécurité générale. J'adore le nouveau modèle de modèle "var" dans D2007 +. Il suffit de taper var [onglet] et l'assistant apparaît. Découvrez également Ctrl-Shift-D (d'autres personnes mentionnées Ctrl-Shift-V pour les VAR locales) pour déclarer un champ. P>
Aye, Ctrl Shift D est génial, savez-vous quelle version qui a commencé? Cela fonctionne à Delphi 2009, mais à Delphi 7, il arrive mon assistant de liste de procédures CnTools, mais cela peut le remplacer.
Je pense que cela a été ajouté à D2007.
Ceci est juste une question de discipline. Oui, Delphi serait probablement mieux servi par la déclaration variable en ligne, mais ce n'est pas vraiment une grosse affaire. Assurez-vous simplement de nommer vos variables de manière descriptive, puis il sera juste de se sentir maladroit pour les utiliser de manière incorrecte. Et, comme l'a dit Stephan Eggermont, si vos méthodes obtiennent vraiment aussi longtemps, c'est une odeur de code complète. P>
Bon conseil, et prisme a cela. Les Anders qui travaillent toujours sur Delphi (oublié son nom de famille) ont mentionné que certaines des caractéristiques de Prism peuvent venir à Native Delphes à l'avenir (et rien dans le prisme ne sera dépouillé de le rendre plus comme Pascal)
@Peter: Vous voulez peut-être dire Andreas Hausladen?
Ouais Anders Ohlson, il était à Delphi Developer Days à Chicago en juin.
J'ai certainement tendance à réutiliser des variables locales telles que "Findex" (ou tout simplement "I ') si la routine présente plusieurs sections itératives distinctes. Pas vraiment la meilleure pratique, je suppose, mais j'aimerais penser que ce n'est que vraiment évident où je le fais et, évidemment, l'utilisation ne se chevauchent pas. p>
Ce n'est généralement pas un gros problème de revenir au sommet de la routine et de la clé des nouvelles variables, bien que je ne connaissais pas Ctrl-Shift-V (j'essayais plus tard!). P >
Ce sera intéressant de voir ce que tout le monde dit. : -) p>
Utilisateur de Delphi depuis longtemps (depuis 1.0), c'est la principale chose que je déteste à propos de Pascal. Toutes les autres langues modernes Support Définition du point d'utilisation, pourtant Delphi persiste à la section Var et les programmeurs Delphes persistent dans des singeries ridicules qui agissent de la main pour le justifier. P>
Comment se passe-t-il "des anticiens ridicules de la main à la main" pour dire que le code où vous pouvez trouver toutes vos variables dans un endroit bien défini est plus propre et plus facile à lire que le code où ils pourraient être déclarés à peu près n'importe où?
Avez-vous déjà utilisé une langue qui permet une définition au point d'utilisation? Si oui, lequel, et avez-vous vraiment trouvé cela difficile à utiliser? Et sinon, je ne pense pas que vous soyez qualifié pour commenter le sujet.
Cela dépend du point de vue. Surtout pour les variables temporaires utilisées dans une très petite étendue (comme la variable compteur d'A pour boucle), j'aimerais vraiment que Delphi permettrait aux variables avec une portée de blocage. Bien sûr, une telle caractéristique pourrait également être abusée.
@Neil: venant d'un fond Pascal, il se sent toujours un peu désordonné, oui. L'aperçu des variables locales me dit beaucoup de la méthode à portée de main, tout comme la liste des champs de classe en haut d'une classe. Je ne dirais pas que cela "rend vraiment difficile", parce que nous parlons toujours de déclaration variable. Pas la partie la plus récurnie du code, généralement.
@Neil: J'ai utilisé de nombreuses langues et que vous avez souligné Pascal, c'est le seul langage moderne qui fait la chose "Var Section". Je trouve que mon code est beaucoup mieux organisé et plus facile à lire, sans trop mentionner le débogage. Il me conduit noix quand j'essaie de passer à travers une routine C et ma liste de locaux continue de changer!
@ Mason Eh bien, sauf si vous utilisez C99, ce que peu de gens semblent faire, C est l'une des rares langues restantes (avec Pascal) qui insiste sur la déclaration de variables avant leur utilisation. Donc, je ne comprends pas votre problème.
@Neil: Il semble évident qu'il veut dire C ++.
@Lrich: Non, je veux dire c, bien que C ++ a le même problème. @Neil: Je ne l'aurais pas d'autre manière. Si vous pouvez utiliser des variables sans les déclarer, les fautes de frappe passent d'une erreur de compilation facilement trouvée à une erreur d'exécution très subtile qui apporte des tonnes de temps et de frustration à suivre. Il y a une raison l'option explicite b> a été considérée comme une meilleure pratique pour VB6 ...
Ni C NOR C ++ vous permet d'utiliser des variables sans les déclarer.
Depuis que vous semblez être confus par ce que j'ai dit de débogage C code, regardez le débogueur DELPHI. En bas à gauche (par défaut, au moins) est une liste de toutes les variables locales de votre procédure et de leurs valeurs. Les valeurs peuvent changer à mesure que vous traversez la procédure, mais le nombre et les noms des variables ne le font pas. Ce n'est pas le cas en C, où de nouveaux secteurs locaux peuvent être créés et sortez à nouveau dans la même procédure, ce qui en fait une bonne douleur.
"Toutes les autres langues modernes La définition de support au point d'utilisation" <- Smalltalk ne compte pas comme moderne? Alors que les Lisp communs laissent que ce soit i> être considéré comme déclarant quelque chose au point d'utilisation, je préférerais beaucoup lire une fonction où toutes les variables locales sont déclarées en un seul!
Non, SmallTalk Not, IMHO - Cela date de la fin des années 70.
Je n'ai presque jamais réutilisé les variables. Je déteste dire jamais, mais c'est proche de ne jamais em>. P>
En règle générale, j'aime avoir toutes les variables en haut pour la même raison que j'aime avoir une section d'interface sur mes unités. C'est un peu comme avoir un résumé sur un papier - donnez-moi une idée générale de ce qui se passe sans avoir à lire tout le papier. Delphi pourrait bénéficier de la capacité de déclarer des variables à la "portée intérieure" comme dans un Voici pourquoi: h2>
OK, peut-être que vous contrôlez plus de code que moi, mais donné une situation où vous avez 50 champs de chaîne dans une table et que vous devez l'affecter à des propriétés de légende des étiquettes et la fonction que vous avez donnée pour accéder aux données. De la base de données nécessite un paramètre Var, vous ne pouvez donc pas passer dans Label1.Caption. Ensuite, je parie que vous utiliseriez quelque chose comme Getfield ('CoString', Tempstr); Label1.Caption: = Tempstr; Getfield ('Thootherstring', Tempstr); Label2.Caption: = Tempstr; etc ... etc ... etc .... oui ou non?
@Peter: Je créerais une procédure qui le fait pour moi, donc je viens de passer («cecitring», de label1) et cela fait le getfeild () et .caption: = pour moi. Peut-être que même je confectionnerais un moyen de transmettre une liste de champs et d'étiquettes, ou même de créer un moyen d'associer les deux les uns avec les autres. Si vous travaillez quelque part, vous ne pouvez pas créer une procédure d'assistance, vous devez rechercher un nouvel emploi. BTW, ma société embauche et nous vous laissons écrire un bon code.
Bien bouclé a eu un bon point. Je suis un pécheur à cet égard de temps en temps. Généralement juste une variable de chaîne temporaire pour plus de commodité que tout. P>
Pour être honnête, je n'ai jamais vraiment pensé à cela ... jusqu'à présent. Je n'ai aucun problème avec la section Var étant où elle est comme celle-ci a été une habitude formée depuis Delphi 1.0. P>
Pour répondre à la question, je ne réutiliserai que une variable temporaire, généralement une chaîne, et généralement uniquement pour obtenir de légères améliorations de performance. Ne pas avoir de problème avec ça. P>
Vous pouvez développer votre propre style de codage qui utilise des variables au besoin. J'utilise généralement des vars uniques (90%) avec quelques var variations (10%) lorsque vous avez besoin. p>
Cela dépend de la nature du var. S'il s'agit d'un VaR pour aider à soutenir un autre code (comptoir pour les boucles, construire des chaînes SQL, etc.), une température variable que vous pouvez réutiliser est utile. Dans ce cas, vos vars varers sont utiles comme "jetable" vars dans des sections de code. Ajoutez simplement un commentaire à vos déclarations Var indiquant les vars vars. P>
I.e. // vars vares sont réutilisés selon les besoins dans cette procédure -> Effacer / réinitialisez-les après / avant utilisation. P>
Autre que cela, j'évite Temp Vars et ne les utilisez jamais pour contenir des données critiques. Un VaR unique doit être utilisé puis pour éviter toute confusion et faire la lisibilité / la maintenance du code plus clair. P>
Je viens de comprendre que c'était plus une discussion et je n'ai mérité aucun crédit pour la scrupule Delphe.
(Et je ne pense pas que je puisse l'annuler non plus)
Pourquoi ne serait-ce pas un wiki communautaire? La personne qui affiche une question peut faire ce qu'il veut.
C'est bien quand cela se fait lorsque vous posez la question, pas lorsque les réponses sont déjà données (à moins qu'elles n'indiquent que cela devrait être communautaire).
Je l'ai fait 2 secondes après avoir posé la question, je voulais dire en premier lieu.