0
votes

Pouvons-nous utiliser '?' opérateur au lieu de la condition imbriquée?

une condition imbriquée à écrire en utilisant le? : Syntaxe. N'est-ce pas un scénario autorisé?

ci-dessous est le code xxx

que je pensais être égal à xxx

Mon idée était que 10> 5 seront évaluées, et comme c'est vrai, il vérifierait alors si 2 <5 ou non. Depuis que cela est également vrai, "je" devait être affecté à 230. Le message d'erreur était xxx


7 commentaires

Vous avez deux ternaires ? avec un seul séparateur de choix : . Vous avez besoin autant de ? comme : . (10> 5)? (2 <5)? 230: 430: 430: 430: 9999 est valide, si incroyablement difficile à lire, expression.


Les deux sont des choses séparées. C'est jusqu'à votre exigence.!


IMHO, la lisibilité est préférée sur le nombre de lignes de code. De plus, pourquoi JavaScript est-il étiqueté JavaScript dans cette question ??


@KrishnaNaprashatt, j'ai marqué JavaScript parce que nous avons également une utilisation de l'opérateur ternaire dans JS. J'étais sur le point de modifier mon code.


J'ai supprimé la balise JavaScript, veuillez vous concentrer uniquement sur une seule langue lorsque vous posez des questions.


@Aishwarya, oui nous avons, mais la question postée ne poste pas


Je résoudrais cela avec simplement si ... autre si ... sinon .


5 Réponses :


2
votes

Vous avez oublié d'ajouter une partie de l'expression. Essayez comme suit:

int i = (10>5) ? ( (2<5) ? 230:456 ) : 0; 


0 commentaires

2
votes

L'opérateur ternaire a la syntaxe xxx

et il retournera une valeur elle-même, de sorte que vous pouvez les nichez comme xxx

Votre code (10> 5)? (2 <5)? 230: 456; équivaut à xxx

donc il manque donc la deuxième valeur pour votre premier opérateur ternaire.


0 commentaires

1
votes

Vous pouvez aller pour des solutions ci-dessous. Mais cela n'est pas recommandé aujourd'hui car la complexité cognitive d'un code source est une question considérable dans l'industrie aujourd'hui. Selon la logique que vous avez partagée, il peut être implémenté de la même manière que ci-dessous.

 int i=(10>5) && (2<5)?230:456;
    System.out.println("i="+i);


 int i = (10>5)?(2<5)?230:456:0;
    System.out.println("i="+i);


3 commentaires

(10> 5) && (2 <5)? 230: 456 est une condition complètement différente


Selon la logique, il n'y a aucune autre partie à 10> 5. Une fois que c'est réussi, il traverse la prochaine condition qui est 2 <5. Seule cette condition s'attend à avoir une partie d'autre. Il semble que cette logique puisse être réécrite dans deux conditions combinées et logique qui fournit la même réponse. Ce serait génial si vous pouvez expliquer la raison de votre commentaire avec une explication @ Andrewtobilko


Mais la combinaison IF de 10> 5 et 2 <5 échoue, nous pouvons aller pour le retour de 456 selon la logique dérivée de l'original qui fournit la même réponse. N'est-ce pas?



0
votes

Oui, vous pouvez nier l'opérateur ternaire aussi profond possible que possible, cependant, les opérateurs ternaires étant la version condensée de si les conditions, elles peuvent rendre votre code non lisible si vous les condensez plus profondément.

N'oubliez pas de saisir le support des conditions pour le rendre lisible, mais ce n'est pas une exigence (0 <1)?


0 commentaires

1
votes

Parfois, il peut être plus facile de comprendre si vous réorganisez les conditions.

au lieu de

int v = (A> b)? (C> D)? 100: 200: 300;

vous pouvez faire

int v = (a <= b)? 300: (C> D)? 100: 200;

La seule différence est dans ce dernier cas, la condition initiale renvoie une valeur immédiatement lorsque cela est vrai et requiert nécessite une évaluation ultérieure lorsque FALSE.


0 commentaires