2013-04-14 7 views
2

J'ai écrit du code qui utilise des appels de fonction qui sont vraiment longs et dépassent souvent 80 caractères. Normalement, je dissociais ces appels de fonction comme ceci:Lisibilité des appels de longue durée

LongFunctionName(first_argument, 
       another_argument, 
       finally_last_argument); 

Cependant, il semble bizarre lorsque je tente de mettre cela en une instruction if, principalement parce qu'il est pas très clair quelle valeur il compare à:

if(LongFunctionName(first_argument, 
        another_argument, 
        finally_last_argument) != value_compared_to) 
{ 
    // stuff to be called 
} 

Comment formateriez-vous cette instruction pour qu'elle soit plus lisible et qu'elle contienne 80 caractères?

+0

Les écrans ont beaucoup plus évolué depuis la ligne de «80 caractères». – StoryTeller

+0

@StoryTeller: Mais nous devons toujours travailler en mode écran partagé très souvent, sinon toujours. –

+0

@StoryTeller Je sais, mais quand j'essaie d'écrire du code qui pourrait être partagé entre les projets, j'essaie de garder 80 caractères par ligne. – Plecharts

Répondre

8

j'envisager de mettre l'appel de fonction sur sa propre ligne:

const auto value = LongFunctionName(first_argument, 
           another_argument, 
           finally_last_argument); 
if (value != value_compared_to) { 
    // ... 
} 

Vous pouvez même donner la variable value un joli nom descriptif qui aide à comprendre le code.

+0

Exactement. Maintenant, lors du débogage, vous pouvez voir le résultat de la fonction ou y mettre un point d'arrêt. Les fonctions d'imbrication sont très mauvaises. –

+0

Cela ressemble à la meilleure façon de le faire. J'y ai pensé, mais il semblait que cela ne ferait que rendre la fonction plus grande à cause d'une autre variable qui serait allouée. Cependant, quand je pense au débogage comme l'a dit @SteveWellens, il sera probablement utile. – Plecharts

+2

La zone doit toujours exister en mémoire, même si elle n'a pas de nom. –

0

Vous avez deux choix:

1)

Accepter qu'il semble ainsi

OU

2)

Évaluer la valeur de retour de la fonction d'appel en une déclaration séparée (pseudo-code)

retval = LongFunctioName(first_argument, second_argument, third_argument); 
if(retval != desired_val) { ... } 
0

Ne nous commençons à celui-là, je le ferais

if 
(  LongFunctionName 
     (  first_argument 
     ,  another_argument 
     ,  finally_last_argument 
     ) != value_compared_to 
) 
{ 
     // stuff to be called 
} 
3

Stockage de la valeur de retour dans une variable est la meilleure solution imo. Mais vous pouvez faire autre chose:

if (value_compared_to != LongFunctionName(first_argument, 
              another_argument, 
              finally_last_argument))