2010-05-13 1 views

Répondre

1

Je préfère la deuxième forme où vous revenez tout de suite. Les seules considérations dont je suis au courant sont les suivantes. Avantages:

  • Shorter Code
  • plus facile à suivre
  • des variables Moins (partie de plus facile à suivre, je suppose)

Risques:

  • peut sauter Clean- le traitement qui se produit après le retour

Je ne m'inquiète pas beaucoup du risque parce que ce risque existe de toute façon si vous imbriquez le code de nettoyage par inadvertance dans un bloc conditionnel lorsque vous essayez de gérer les différents chemins d'exécution en conservant la valeur de retour jusqu'à la fin. Je pense que le meilleur pari est de garder le code plus simple et plus facile à suivre pour éviter ce genre de risque. Je pense que ce risque est également grandement aidé par les structures de codage disponibles dans les langues modernes telles que "Using" et "Try/Finally". J'essaie toujours de les utiliser pour les tâches de nettoyage maintenant au lieu de simplement mettre le code à la fin du bloc. Cependant, je fais une exception quand un autre code veut de toute façon accéder à la valeur de retour en attente en tant que variable (pour l'ajouter à un cache par exemple, afin que le résultat puisse être renvoyé plus rapidement la prochaine fois).

1

Je pense qu'il est préférable d'écrire du code qui est toujours exécuté. Par exemple, l'instruction return dans le premier exemple est toujours exécutée. Je garde le branchement au minimum, parce que peu importe à quel point vous essayez, votre programme se cassera tôt ou tard. Ensuite, vous allez vous gratter la tête en essayant de comprendre quelles branches d'if ont été exécutées et lesquelles ne l'ont pas été. Pourquoi ne pas éviter cela, si la rupture du programme est si probable que c'est presque un fait. :)

2

premier, car il est plus facile de se connecter et de déboguer.

+0

+1 bien, c'est ce qu'on attend d'un bon programmeur –

1

premier, pour des raisons suivantes ..

  1. Comme mentionné par "01", facile à connecter et déboguer
  2. Facile à refactoriser

Votre code devrait toujours être dans ce motif ..

  1. Déclaration des variables
  2. Initialiser les variables
  3. Traitement
  4. Nettoyer !!!!
  5. Retour

Dans ce modèle, il est facile pour les autres de comprendre comment votre code se comporte, où chercher des problèmes, parce que toujours « Do traitement » est la partie où votre reste logique métier et vous pouvez certainement refactoriser la 3ème étape sans affecter les 4ème et 5ème. Si vous avez l'occasion de voir le code source Windows COM/DCOM codé en grande partie, ils ont toujours un modèle très standard d'utilisation de la construction retval, et seulement en utilisant un modèle standard, une équipe peut concevoir des systèmes plus grands et meilleurs. un programmeur paresseux peut écrire la plus petite logique en termes de nombre de lignes, mais ce n'est jamais bon pour les applications d'entreprise. Nous dépensons beaucoup d'argent sur les outils standard du code, et nous écrivons même plus de code que nécessaire, mais au niveau de l'entreprise, la pratique standard et les codes moins compliqués sont mieux maintenus et développés. En disant cela, je suis d'accord que même pressé je ne suis pas exactement le même modèle par moi-même plusieurs fois, mais j'ai aussi fait face à des conséquences, quand le code grossit, la logique devient plus compliquée, le refactoring logique devient difficile.

Pour écrire moins de code, nous utilisons le refactoring, mais pas de complication difficile à comprendre.

Même si vous déclarez ou ne pas déclarer retval, si vous avez l'occasion de démonter tout code, vous verrez que le compilateur déclare toujours une variables interne qui est utilisé pour retour de toute façon.

0

ou

function foo2(int x) { 
    if (x > 5) { 
    return 2; 
    } 
    return 7; 
} 
1

Je préfère de beaucoup la deuxième option, car il vous encourage à penser à une chose à la fois.

int MyFunction(...) 
{ 
    if (Simple case 1) 
    return 1; 
    if (Simple case 2) 
    return 2; 

    ... evaluate complex cases ... 
    return X; 
} 

Vous n'avez pas à vous soucier de ce que fait le reste de la fonction si le cas 1 simple s'applique. Et une fois que vous avez passé cela, vous n'avez pas à penser à ce qui s'est passé si le cas simple 1 s'appliquait.

Ceci réduit également souvent le niveau d'indentation, ce qui tend à rendre les choses plus linéaires et faciles à lire.

Questions connexes