web-dev-qa-db-fra.com

Si sans opérateur ternaire

Jusqu'ici, j'ai cherché sur le net, la déclaration a toujours si et d'autre condition telle que a ? b : c. Je voudrais savoir si la déclaration ternaire if peut être utilisée sans else. En supposant que j'ai le code suivant, je souhaite fermer le PreparedStatement s'il n'est pas null

(J'utilise le langage de programmation Java.)

PreparedStatement pstmt;

//.... 

(pstmt!=null) ? pstmt.close : <do nothing>;
44
Z.V

Non ... tu ne peux pas faire ça. Essayez plutôt ceci:

if(bool1 && bool2) voidFunc1();
45
frankie liuzzi

Juste l'écrire?

if(pstmt != null) pstmt.close();

C'est exactement la même longueur.

13
Jeroen Vannevel

Pourquoi utiliser l'opérateur ternaire alors que vous n'avez qu'un seul choix?

if (pstmt != null) pstmt.close(); 

est assez!

13
cigno5.5

Comme mentionné dans les autres réponses, vous ne pouvez pas utiliser un opérateur ternaire pour le faire. 

Toutefois, si le besoin s’en fait sentir, vous pouvez utiliser Java 8 Optional et lambdas pour mettre ce type de logique dans une seule instruction:

Optional.of(pstmt).ifPresent((p) -> p.close())
9
Krease

L'opérateur ternaire if est l'opérateur particulier ternaire. Unique en son genre.

De Wiki:

En mathématiques, une opération ternaire est une opération n-aire avec n = 3.

Cela signifie que les 3 opérandes sont nécessaires pour vous.

9
Yegoshin Maxim

Une opération ternaire est appelée ternaire car elle prend 3 arguments, si elle en prend 2 c'est une opération binaire.

Et comme indiqué ci-dessus, il s’agit d’une expression expression renvoyant une valeur.

Si vous omettez le contraire, vous obtiendrez une situation non définie dans laquelle l'expression ne renverra pas de valeur.

Donc, comme indiqué dans une autre réponse, vous devriez utiliser un if statement.

8
David Mårtensson

Vous ne pouvez pas utiliser ternary sans autre option, mais pour faire un "if-without-else" sur une ligne, vous pouvez utiliser Java 8 Optional class.

PreparedStatement pstmt;

//.... 

Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.
0
WesternGun