Opérateur conditionnel vs if then else

Si je veux implémenter un code conditionnel qui peut être implémenté des deux manières. Alors quel chemin est meilleur opérateur conditionnel?: Ou si .. alors..else ??

Ça dépend. En général, vous souhaitez que le stream principal d’activité soit représenté dans la structure du code. Si le point clé de l’algorithme est l’initialisation de la variable x , la meilleure solution consiste à utiliser l’opérateur conditionnel:

 x = condition ? f1() : f2(); 

Si la décision est la question cruciale pour comprendre ce qui se passe, vous préférerez le if . En pratique, cela signifie que lorsque les deux sont raisonnablement possibles, vous utiliserez ?: . La clé étant “raisonnablement” —si vous trouvez que vous utilisez l’opérateur virgule dans les sous-expressions, les sous-expressions ont des effets secondaires, alors utiliser ?: probablement pas “raisonnable”.

MODIFIER:

Lorsque vous utilisez l’opérateur ?: , Dans tous les cas sauf le plus simple, vous devez le formater exactement comme vous le feriez if , par exemple:

 x = condition ? complex_expression_1 : complex_expression_2; 

Je le fais régulièrement. (Il y a un cas spécial où je vais le pousser: si je peux réduire toute la fonction à une seule instruction return. Je ne permettrai toujours pas les effets secondaires de l’opérateur virgule, mais j’utiliserai parfois des expressions plus compliquées que celles que je ferais autrement. aurait.)

Ils sont assez proches si pas exactement les mêmes . Même s’il y a de légères différences dans le bytecode. Vous pouvez toujours faire des tests de performance pour vous en assurer.

Pour vérifier le code octet, consultez javap and jad

Cela dépend du compilateur, mais dans le compilateur moderne, il n’y a pas de différence entre if else et l’opérateur ternaire. Ne vous fiez pas “le compilateur générera toujours un code plus efficace si j’utilise l’opérateur conditionnel”.