10
votes

Java équivalent à la fonction iif

La question est simple, il existe un équivalent fonctionnel de la célèbre IIF en Java?

Par exemple: P>

IIf (vData = "S", True, False)


2 commentaires

Janguy: non, si est une fonction inline-si elle prend une valeur booléenne comme premier paramètre, et lorsque True renvoie le deuxième paramètre, et lorsque FAUX renvoie le troisième paramètre.


Pour la postérité: Veuillez noter que la réponse acceptée n'est pas réellement correcte en ce qui concerne le court-circuit. Lire Stackoverflow.com/questions/822810/iif-equivalent-in-c à la place ...


4 Réponses :


6
votes

Ouais, le Ternary Op ? : xxx


0 commentaires

25
votes
vData.equals("S")

4 commentaires

surtout le deuxième bit. Ce n'est pas si évident pour beaucoup de gens.


Ce n'est pas tout à fait la même chose. En utilisant iif (x, y, z) évaluera toujours y et z (provoquant des effets secondaires de la fois visible), tandis que < code> x? Y: z n'évaulement que y xor z (provoquant uniquement les effets secondaires d'un seul à être visible).


@Gabe: VB ne prend pas en charge l'évaluation de court-circuit en général. Bien que vb.net fait


Merci Adrian, toutes les réponses m'a aidé.



2
votes

Si est identique à l'IFF logique.

 if ("S".equals(vData)) {


0 commentaires

4
votes

La principale différence entre l'opérateur ternaire Java et iif est que iif évalue à la fois la valeur renvoyée et la valeur non retardée, tandis que le ternaire Les courts-circuits de l'opérateur et n'évaluent que la valeur renvoyée. S'il y a des effets secondaires à l'évaluation, les deux ne sont pas équivalents.

Vous pouvez, bien sûr, réimplément iif en tant que méthode Java statique. Dans ce cas, les deux paramètres seront évalués au temps d'appel, tout comme avec iif . Mais il n'y a pas de fonctionnalité de langue java intégrée qui équivaut exactement à iif . xxx

(Notez que le iftrue et < Code> iffalse arguments doit être du même type en Java, en utilisant l'opérateur ternaire ou en utilisant cette alternative générique.)


2 commentaires

Merci, je comprends, semblable à la fonction AndelSo, Orelse dans VB Net, non?


Oui, c'est un autre exemple de court-circuit.