Question

Je ne vais pas pour la maintenabilité ou l'élégance ici .. à la recherche d'un moyen de réduire les jetons au total dans une méthode juste pour le plaisir. La méthode est composée d'une construction longue nichée if-else et je l'ai trouvé que (je pense) la façon de le faire avec le plus petit nombre de jetons est l'opérateur ternaire. Essentiellement, je traduis ceci:

String method(param) {

    if (param == null)
        return error0;

    else if (param.equals(foo1))
        if (condition)
            return bar1;
        else
            return error1;

    else if (param.equals(foo2))
        if (condition)
            return bar2;
        else
            return error1;

    ...


    else
        return error;

}

à ceci:

String method(param) {

    return 

        param == null ?
            error0 :

        param.equals(foo1) ?
            condition ?
                bar1 :
                error1 :

        param.equals(foo2) ?
            condition ?
                bar2 :
                error2 :

        ...

        error

    }

Cependant, il y a des cas de couples où, en plus de retourner une valeur que je veux aussi changer un champ ou appeler une méthode; par ex.,

    else if (param.equals(foo3))
        if (condition) {
            field = value;
            return bar3;
        }
        else
            return error3;

Quel serait le meilleur moyen de le faire sage jeton? Ce que je fais est maintenant laid, mais ne perd pas trop de jetons (ici le champ est une chaîne):

        param.equals(foo3) && (field = value) instanceOf String ?
            condition ?
                bar2 :
                error2 :

Encore une fois, le point est pas bon codage, je cherche juste hacks pour diminuer le nombre de jetons. S'il y a un chemin plus court pour écrire la chose entière, je suis ouvert à cela aussi. Merci pour toutes suggestions.

Modifier: chaque mot et signe de ponctuation compte comme un jeton. Ainsi, par exemple, « instanceOf String » est deux jetons, mais « ! = Null » est de trois. Les principales choses que je peux voir à l'amélioration possible sont les « && » et les parenthèses. Y at-il un moyen de mettre « champ = valeur » quelque part en dehors du conditionnel, et sinon est là une construction qui fait « champ = valeur » un booléen sans besoin de parenthèses?

Était-ce utile?

La solution

(field = value) instanceof String

Si l'on suppose qu'il répond déjà à vos besoins (et il comprend donc faux retour quand value est null), une plus courte solution de rechange aurait alors été

(field = value) != null

Ou si vous avez réellement perdre de vue que et que vous voulez faire null true de retour aussi bien, puis utilisez

(field = value) == value

Cela peut être beaucoup plus courte si vous utilisez des noms de variables 1 lettre.

En outre, je ne vois pas d'autres moyens et je suis d'accord avec la plupart d'entre nous que tout cela est un peu méchant;)

Autres conseils

si param est nulle, retour 0
Ensuite, faire un cas / commutateur / instruction select sur le paramètre. C'est clean .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top