52 votes

paramètres booléens - sentent-ils?

Je viens de trouver un bug causé par un paramètre booléen ... l'appelant pensait qu'il contrôlait une chose mais contrôlait vraiment autre chose. Les paramètres booléens ont-ils une odeur générale? Personnellement, je ne me sens pas à l'aise quand je les vois. Je veux dire:

 DoSomething(false);
 

Qu'est-ce que je suis supposé penser alors que je lis quelque chose comme ça?!

50voto

Reed Copsey Points 315315

Les paramètres booléens ne sentent pas, mais ils sont souvent mal utilisés.

Un paramètre doit être un booléen s'il est évident que les deux "options" sont "True" et "False". Par exemple, pour une méthode comme celle-ci, boolean est parfait:

 SetVisibility(true)
 

Cependant, si le sens ne signifie pas explicitement vrai ou faux, je pense qu’une énumération est presque toujours une meilleure option. Cela ouvre également la possibilité pour plus de 2 significations, ce qui est très précieux.

45voto

Adam Robinson Points 88472

Que diable suis-je censé penser quand j'ai lu quelque chose comme ça?!

Je dirais à peu près la même chose que vous pensez si vous l'avez vu DoSomething(5). Si vous n'êtes pas sûr de ce que l'API de la fonction est le cas, alors il est préférable de regarder à la définition de la fonction. Il n'y a rien de mal avec un paramètre booléen plus qu'il y a quelque chose de mal avec un paramètre de n'importe quel autre type. Si l'appelant ne connaît pas l'API, aucune quantité de type de données de la gymnastique aidera.

12voto

BlackTigerX Points 3569

Le problème (dans cet exemple particulier) ne concerne pas le paramètre booléen lui-même, mais le nom de la méthode qui le contient.

10voto

Otávio Décio Points 44200

Comme par ici :

N'utilisez pas de booléens à moins d'être absolument sûr qu'il ne sera jamais nécessaire d'utiliser plus de deux valeurs.

8voto

T.E.D. Points 26829

Boolean drapeaux sont douteux. Ils impliquent la routine utilise la logique (drapeau) de la cohésion. C'est un plus faible niveau de cohésion que ce qui est idéal. La seule pire genre est "une Coïncidence" (bref pas de cohésion). Vous devriez essayer de l'éviter si vous le pouvez. Le typique solution est de diviser la routine en deux. Mais parfois, c'est le plus simple et le plus clair de la façon de faire les choses.

Que diable suis-je censé penser quand j'ai lu quelque chose comme ça?!

Eh bien, c'est pourquoi les langues doivent avoir des paramètres nommés. En Ada le code pouvait lire:

DoSomething (WithKetchup => false)

Les langues qui permettent des paramètres nommés dans les appels incluent: Ada, Python, Ruby et Javascript.

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