If et le côlon
Ici est une pièce intéressante de code que mes collègues membres de l'équipe étaient juste avoir un peu vive discussion à propos de...
Dim fred As Integer
If True Then fred = 5 : fred = 3 : fred = 6 Else fred = 4 : fred = 2 : fred = 1
Après l'exécution de l'extrait de code ci-dessus, quelle est la valeur de fred?
Essayez de ne pas tricher et de déboguer le code.
C'est un très artificiel exemple de code qui a commencé comme un exemple de l'utilisation du côlon avec une instruction if, mais quelqu'un a décidé de prendre sur eux-mêmes, pour apporter un résultat pour fred.
Mise à JOUR:
Je ne serait pas normalement écrire du code comme ça, et ce morceau de code ne sert que d'exemple. Comme il arrive souvent, cette question est originaire d'une discussion portant sur la création d'un codage du document de normes pour notre équipe.
OriginalL'auteur BlackMael | 2008-12-15
Vous devez vous connecter pour publier un commentaire.
Je suppose que tu veux dire VB.Net.
Selon la grammaire de la VB Langue spec, que vous pouvez lire ici:
http://www.microsoft.com/Downloads/thankyou.aspx?familyId=39de1dd0-f775-40bf-a191-09f5a95ef500&displayLang=en
Le résultat doit être "6".
C'est parce que la grammaire d'une "ligne si l'énoncé est:"
et "déclarations" est défini à
Edit:
Je tiens à noter que le débogage du code n'est pas de la "triche".
J'ai l'habitude de travailler sur le compilateur visual basic chez Microsoft.
Il y avait des moments où la spec est ambigu, ou ne pas correspondre à ce que nous avait envoyée. Dans plusieurs de ces cas, la solution (ce que nous avons fait pour le fixer) a toujours été basé sur le "bien... ce que fait le compilateur faire maintenant".
Parfois, on pouvait changer le compilateur, parfois, on pouvait changer de la spec.
Cependant,nous avons toujours exécuter le compilateur pour voir ce qu'il fait avant nous avons pris une décision.
Donc... débogage du code est une grande partie de comprendre ce qu'il fait...
"débogage" -> "débogage. "VB.Net" -> "VB.NET" (réf. en.wikipedia.org/wiki/Visual_Basic_.NET).
Pour clarifier, le côlon, l'opérateur vous permet tout simplement de combiner plusieurs instructions sur une seule ligne. C'est la même que l'exécution de la des déclarations sur des lignes successives.
OriginalL'auteur
Je n'ai pas utilisé de BASE que beaucoup de temps, donc c'est juste une supposition, mais je pense que
fred
est6
.Franchement, le code n'est pas très lisible. J'ai l'impression que de ne pas avoir tout sur une seule ligne et en utilisant l'indentation du code est plus lisible:
Je crois que c'est l'équivalent du code, si je ne me trompe pas.
Mais, si le code n'est pas équivalents, ce qui nous amène à un autre point: Le code original est "difficile" de manière à ce qu'il semble dire n'est pas tout à fait ce qui se passe vraiment. Similaire au piège dans le style C langues:
Le code semble dire impliquent que
do_something
etdo_other_thing
est exécutée lorsque lecondition
est vrai, mais en réalité,do_other_thing
est toujours exécuté.Il est préférable d'essayer de respecter le codage des styles qui font l'intention de le code plus évidente et la moins ambiguë.
OriginalL'auteur
Le résultat final est de 6.
Maintenant la vraie question est: Comment avez-vous dans mon repo?
🙂
OriginalL'auteur
Juste une supposition
fred = 6, car vous pouvez avoir plusieurs instructions sur la même ligne séparées par une virgule.
Ne sais pas si le "else" est légal (c'est à dire compilable)
À mon humble avis, un meilleur style de codage doit être choisie:
OriginalL'auteur
Dans de très vieux dialectes, la seule chose qui pourrait suivre un "ALORS" est un numéro de ligne. De nombreux dialectes améliorer cela en permettant code pour suivre le "ALORS"; après l'analyse du passé "PUIS" ils allaient passer à la ligne suivante si l'indication de la condition est fausse, ou bien continuer avec la ligne actuelle. Autres dialectes ajouté la possibilité de sauter jusqu'à la fin de la ligne ou "AUTRE", selon la première éventualité; la tentative d'exécution d'une instruction "ELSE" serait ignorer à la fin de la ligne.
Quand QuickBasic a été introduit, il a ajouté le support pour le multi-ligne if/then/else blocs, mais a gardé de soutien pour l'ancienne approche. Visual Basic a emboîté le pas, et vb.net continue la tradition.
OriginalL'auteur