9
votes

Complexité cyclomatique McCabe pour interrupteur en Java

J'utilise une instruction de commutation avec 13 cas, chaque cas n'a qu'une valeur de retour d'une ligne.

McCabe peint en rouge. Existe-t-il un moyen plus facile d'écrire une déclaration de commutation grosse? Il ne semble pas complexe de lire, mais je n'aime pas le réglage par défaut tournant en rouge. Si d'autres personnes utilisent le même outil sur mon code et que vous voyez des trucs rouges, ils pourraient penser que je suis stupide :-)

Edit: Je mappe différents types SQL à mes types plus abstraits, donc réduisant ainsi la quantité totale de types. xxx

et ainsi de suite ...


4 commentaires

Il est plus facile si vous expliquez pourquoi vous avez 13 cas dans un commutateur et pourquoi vous ne pourriez pas pouvoir faire la même chose en utilisant le polymorphisme ou une carte.


D'accord. Pouvez-vous nous montrer le code?


Vous pouvez utiliser un Enumma à la place


+1 Pour les cartes, bien qu'ils ne cachent que la complexité (donc l'outil ne se plaint pas), ils ne réduisent pas la complexité. Votre cas d'utilisation est plus d'un registre que d'une condition if-sinon, alors peut-être que des cartes sont plus adaptées.


3 Réponses :


6
votes

Je ne sais pas autant de choses sur les outils McCabe. L'une des choses que la complexité cyclomatique prend en compte plusieurs points de sortie.

J'aime l'idée de Enummap. P>

Si un interrupteur sera utilisé, vous pourriez avoir une variable de résultat et supprimer tout le retour déclarations. Vous pouvez également réduire toutes les valeurs source qui ont le même type de résultat: p>

result = null;

case Types.TIME:
case Types.DATE:
case Types.TIMESTAMP: result = AbstractDataType.TIME

// etc.

return result;


0 commentaires

7
votes

Vous utilisez le code pour exprimer ce qui est vraiment des données. Utilisez simplement une carte d'énumération ou définissez une fois pour tout un dictionnaire constant. De cette façon, vous ne faisez que paramétrer un algorithme de correspondance simple et générique, au lieu d'écrire un long boîtier de commutation.


0 commentaires

3
votes

+1 pour l'idée de la carte ...

quelque chose comme ceci: p>

initialiser la carte p> xxx pré>

puis dans votre code simple faire P>

sqlTimeType.getAbstractType();


0 commentaires