1 votes

Logique et refactorisation du style C

J'aime les langages qui évaluent une expression unique à la fois comme une valeur et comme une valeur booléenne. Par exemple, A = 1 est évalué comme vrai, tout comme 1. Si cette pratique est très répandue chez les développeurs de mon groupe de réflexion, est-ce une erreur de ne pas refactoriser ces expressions, en supposant qu'il n'y a pas d'effets secondaires ?

J'ai une discussion de longue date au travail sur les odeurs de code, mais cette complexité de la logique est un problème de taille. pourquoi J'aime beaucoup le C. Il me sera difficile de passer à Java par exemple, qui ne permet pas cet effet (false != 0).

Qu'en pensez-vous ?

4voto

Anthony Points 3706

Il n'y a pas de véritable raison de remanier en masse l'utilisation des valeurs non nulles comme vraies et des valeurs nulles/zéros comme fausses. Cependant ! Souvent, ces éléments peuvent nuire à la lisibilité. Souvent, avec les pointeurs, j'utiliserai if (somePtr != NULL) plutôt que de se contenter de if (somePtr) parce que je pense qu'il décrit mieux l'intention de... ne pas déréférencer un pointeur nul.

Si la logique est trop complexe, c'est une question de lisibilité, mais si vous ne pensez pas qu'elle est difficile à lire, pourquoi faut-il la remanier ?

1voto

Chris Jester-Young Points 102876

C'est totalement subjectif, mais je pense que cela fait la différence entre, disons, Perl (qui vous permet d'exprimer quelque chose de nombreuses façons différentes, à des degrés divers de... clarté), et Java (qui est plus ou moins un langage de servitude et de discipline). Certaines personnes aiment (ou ont besoin de) la structure, auquel cas Java leur convient mieux. D'autres aiment la créativité que permet un langage plus libre.

Si vous disposez d'une équipe de programmeurs chevronnés, un langage créatif leur permettra d'accomplir davantage de travail. Et si vous avez des collègues qui aiment les langages plus "serrés", cela veut peut-être dire quelque chose aussi, ou peut-être pas. Mais ce n'est que mon avis :-P

1voto

Robert Massaioli Points 6672

Java est strictement typé, ce qui, à mon avis, présente de nombreux avantages ; cela permet notamment d'éviter de nombreuses erreurs de croisement. Je pense que la flexibilité et le contrôle du C ont leur place, mais il en va de même pour Java, qui brille vraiment en veillant à ce que les grandes équipes ne soient pas trop entraînées vers le bas par de mauvais programmeurs. C et Java sont similaires en termes de syntaxe, mais pas identiques ; Java a été conçu pour une bonne raison et je suis tout à fait d'accord avec cette raison.

Ce n'est que mon avis ; de plus, il est possible de briser ce typage strict en Java avec quelques surcharges astucieuses ou de nouvelles fonctions.

1voto

smcameron Points 1864

Je pense qu'il s'agit simplement d'une question de notoriété des expressions idiomatiques.

Le noyau Linux, par exemple, possède de nombreux idiomes.

Par exemple, vous ne faites jamais

static int x = 0 ;

Au lieu de cela, vous le faites :

statique int x ;

(le compilateur le mettra à zéro, mais c'est aux responsables du noyau qu'il faut s'adresser, pas à moi).

Vous ne le faites pas :

si (x != NULL)

vous le faites :

si (x)

vous ne le faites pas :

si (quelque chose == quelque chose) renvoie 0 ; sinon renvoie 1 ;

vous le faites :

return (something != whatever) ;

Et, de temps en temps, ce mélange d'entiers et de booléens peut s'avérer très pratique, comme ceci : build_assert.h

dont la teneur est la suivante :

#define EXPR\_BUILD\_ASSERT(cond) \\
   (sizeof(char \[1 - 2\*!(cond)\]) - 1)

Ils utilisent généreusement les gotos pour les chemins de traitement des erreurs, ce qui est un peu contradictoire.

Les éléments d'une ou deux lignes sont probablement inutiles en termes de lisibilité et de maintenabilité. Ce sont des choses triviales. La véritable viande dans les départements de la maintenabilité et de la lisibilité se trouve (d'après mon expérience) dans les choses à plus grande échelle. Pour moi, une grande partie de la POO tend à rendre le code plus facile à ÉCRIRE, mais plus difficile à LIRE, et plus difficile à DÉBUTER. Pour moi, c'est une perte nette. Je ne suis donc pas un grand fan de la POO. Oups... Je me suis éloigné du sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X