Dans Quelles règles de dénomination suivez-vous? , l'auteur dit:
Je préfère également coder en utilisant la notation hongroise de Charles Simonyi.
J'ai rencontré plusieurs programmeurs qui préfèrent encore utiliser le hongrois, principalement de la saveur hongroise Petzold / Systems. Pensez dwLength = strlen(lpszName)
.
J'ai lu Rendre le code erroné faux et je comprends la raison d'être d'Apps Hongrois, où les informations de type domaine sont incluses dans les noms de variables. Mais je ne comprends pas la valeur d'attacher le type de compilateur au nom.
Pourquoi les programmeurs persistent-ils à utiliser ce style de notation? Est-ce juste de l'inertie? Y a-t-il des avantages qui l'emportent sur la diminution de la lisibilité? Les gens apprennent-ils simplement à ignorer les décorateurs lors de la lecture du code, et si oui, comment continuent-ils à ajouter de la valeur?
EDIT: Beaucoup de réponses expliquent l'histoire, ou pourquoi elle n'est plus pertinente, les deux étant couvertes dans l'article que j'ai cité.
J'aimerais vraiment entendre parler de quelqu'un qui l'utilise encore. Pourquoi l'utilisez-vous? Est-ce dans votre standard? L'utiliseriez-vous s'il n'était pas nécessaire? Souhaitez-vous l'utiliser sur un nouveau projet? Quels sont selon vous les avantages?
la source
Réponses:
Pour le moment, j'utilise toujours le hongrois pour exactement trois raisons , en l' évitant judicieusement pour tout le reste:
Je ne voudrais certainement pas définir mes idées en tant que meilleures pratiques, mais je respecte ces règles car l'expérience me dit que l'utilisation occasionnelle de la maintenabilité du code des avantages hongrois coûte peu. Cela dit, je revois constamment ma propre pratique, donc je pourrais très bien faire quelque chose de différent à mesure que mes idées se développeront.
Mise à jour:
Je viens de lire un article perspicace d'Eric Lippert, expliquant comment le hongrois peut aider à donner à un mauvais code un aspect incorrect. Vaut la peine d'être lu.
la source
tssb
ou untsddi
? Oui, ils existent). Les abréviations ont aussi le problème de l' uniformité, la priseTextBox
il pourrait y avoir incohérence au sujet que ce soittb
outxt
(je l' ai vu personnellement un usage dev « senior » à la fois sur une seule fenêtre). Pour 3, je laisse tomber le hongrois lorsque la variable atteint son type final prévu (par exemple, j'utiliseraisvalue
etstrValue
dans votre exemple).Je ne suis pas un grand fan de l'utilisation de la notation hongroise, mais pensez de cette façon:
Non, imaginez le contraire, où chaque élément a son propre nom. Il pourrait être plus lent pour vous de trouver où vous voulez aller, non?
Il en va de même pour ddl lorsque nous voulons faire référence à une DropDownList, c'est plus facile ou non? :)
Les gens ne passeront pas autant de temps à trouver où se trouve cet élément.
L'utilisation du préfixe n'est pas utilisable pour les compilateurs de langages modernes comme C #, mais il est utilisable (lisible) pour les êtres humains.
la source
Les applications hongroises (balises pour désigner les propriétés sémantiques des objets qui ne peuvent pas être exprimées via le système de type) étaient un moyen raisonnable de traiter certaines erreurs courantes lors de l'utilisation des langages faiblement typés du début des années 1980. Ils ne servent à rien dans les langues fortement typées d'aujourd'hui.
Les systèmes hongrois (balises pour désigner de manière redondante le type déclaré d'un objet) n'ont jamais servi à rien d'autre qu'à imposer une apparence superficiellement uniforme à une base de code. Il a été créé et propagé par des gestionnaires non techniques et des programmeurs inexpérimentés, qui ont mal compris l'intention d'Apps Hungarian et pensaient que la qualité du code pourrait être améliorée par des directives de codage complexes.
Les deux styles proviennent de Microsoft. De nos jours, les conventions de dénomination de Microsoft disent catégoriquement «N'utilisez pas la notation hongroise».
la source
Si vous venez avec le bon système de préfixes, vous pourriez étendre l'usure de vos clés, ce qui réduirait les dépenses pour les claviers de remplacement.
Je suppose que je pourrais développer cela. J'utilise SH sur mon lieu de travail depuis une dizaine d'années, oh (car c'est dans notre standard). Cela n'a jamais aidé à résoudre un problème.
D'un autre côté, j'ai utilisé des variables sans fioritures mais bien nommées dans mon «code maison» pendant presque aussi longtemps. Je n'ai jamais manqué SH.
Aux deux endroits, j'ai écrit du code de protocole qui nécessite des types primitifs de taille fixe. C'est le cas d'utilisation le plus avantageux auquel je puisse penser pour SH. Cela ne m'a pas aidé de savoir quand je l'ai écrit avec SH, et cela ne m'a pas gêné quand j'ai écrit sans SH.
Donc, en conclusion, la seule différence que je peux voir est l'usure de votre clavier.
la source
En fait, j'ai commencé à utiliser SH dans le nouveau code que j'ai écrit ce mois-ci.
Ma mission consistait à réécrire du code Perl dans JS afin qu'il puisse être déplacé vers le côté client de notre application Web. En Perl, SH n'est généralement pas requis à cause des sigils ($ string, @array,% hash).
En JavaScript, j'ai trouvé que SH était inestimable pour suivre les types de structures de données. Par exemple,
Cela récupère un objet à partir d'un tableau d'objets à l'aide d'un index entier. L'adhésion à cette convention m'a fait gagner du temps lors de la recherche de types de données. De plus, vous pouvez surcharger les noms de variable succincts (
oRow
vs.iRow
).tl; dr: SH peut être formidable lorsque vous avez du code complexe dans un langage faiblement typé. Mais si votre IDE peut suivre les types, préférez-le.
la source
Je suis également curieux de voir la justification. Nous savons pourquoi ils l'ont utilisé dans le passé: manque de support IDE pour les informations de type. Mais maintenant? Autrement dit, je pense que c'est une tradition. Le code C ++ a toujours ressemblé à ceci, alors pourquoi changer les choses? En outre, lorsque vous construisez au-dessus du code précédent qui utilisait la notation hongroise, cela semblerait assez étrange lorsque vous arrêtez soudainement d'utiliser cela ...
la source
La notation hongroise de Systems était en fait un peu un cock-up, une incompréhension du terme «type». Les développeurs de systèmes l'ont pris littéralement comme type de compilateur (mot, octet, chaîne, ...) par opposition au type de domaine des applications (index de ligne, index de colonne, ...).
Mais je suppose que chaque développeur passe par plusieurs phases de style qui semblent être une excellente idée à l'époque (et le type de préfixe semble être une bonne idée pour un novice) avant de tomber dans les pièges (changer de type, créer de nouveaux préfixes significatifs, etc). Je suppose donc qu'il y a une inertie: des développeurs qui ne s'améliorent pas et qui réalisent pourquoi c'est un mauvais choix, des développeurs coincés avec des normes de codage qui imposent la pratique et des personnes qui utilisent
<windows.h>
. Il serait trop coûteux pour Microsoft de changer pour se débarrasser de la notation de préfixe (qui est incorrecte à de nombreux endroits: WPARAM?).la source
Il y a une chose qui manque au hongrois. La notation hongroise fonctionne très bien avec la saisie semi-automatique.
Supposons que vous ayez une variable et que le nom soit intHeightOfMonster.
Supposons que vous oubliez le nom de la variable
Il peut s'agir de heightOfMonster ou MonsterHeight ou MeasurementMonsterHeight
Vous voulez pouvoir taper une lettre et obtenir la saisie semi-automatique vous suggérer des noms de variables.
Sachant que le heightOfMonster est un int, vous tapez simplement i et le tour est joué.
Gagner du temps.
la source