Partage
  • Partager sur Facebook
  • Partager sur Twitter

limite de l'opérateur ternaire en java

Sujet résolu
    7 janvier 2009 à 19:36:46

    bonjour,

    je n'ai pas trouvé de question similaire sur le forum, et ça n'a pas l'air d'être abordé sur d'autres forums donc je poste ici.
    n'y a-t-il aucune façon d'exécuter des instructions complètes dans des choix ternaires?
    par exemple (totalement idiot, juste pour l'exemple):
    a = (true) ? 1 : 2;
    

    fonctionne, mais
    (true) ? System.out.println() : System.out.println();
    

    ne fonctionne pas, le compilateur signale que ce n'est pas une instruction. pourtant ça marche en C (en remplaçant avec la bonne fonction évidemment). c'est un choix délibéré des concepteurs de java?

    edit: changement dans l'exeple dsl
    • Partager sur Facebook
    • Partager sur Twitter
      7 janvier 2009 à 20:16:33

      ?
      System.out.println() ne renvois rien =/
      tu ne peux pas assigner une valeur à a avec ...

      un code qui marche :

      public static void main(String args[]){
       	int a = (true) ? toto() : toto();
      	System.out.println(a);
             }
            public static int toto(){
                return 3;}
      
      • Partager sur Facebook
      • Partager sur Twitter
        7 janvier 2009 à 20:27:41

        @Snooooopy: ce n'est pas de ça qu'il s'agit je crois; le fait est qu'en C, on peut faire ceci :
        #include <stdio.h>
        
        void fct1(void)
        {
          printf("fct1()");
        }
        
        void fct2(void)
        {
          printf("fct2()");
        }
        
        int main(void)
        {
          (1) ? fct1() : fct1();
        
          return 0;
        }
        

        $ gcc main.c
        $ ./a.out
        fct1()

        En java non :
        class Test {
        
           static void fct1()
            {
        	System.out.println("fct1()");
            }
        
           static void fct2()
            {
        	System.out.println("fct2()");
            }
        
        
            public static void main(String[] args)
            {
        	(true) ?  fct1() : fct1();
            }
        }
        

        $ javac Test.java
        Test.java:16: not a statement
                (true) ?  fct1() : fct1();
                       ^
        1 error


        Je n'ai encore rien trouvé de précis dans les specification de java là dessus.
        • Partager sur Facebook
        • Partager sur Twitter
          7 janvier 2009 à 20:52:17

          oui c'est de ça dont je parle, désolé Snooooopy de pas avoir été clair.

          apparemment j'ai trouvé la réponse, alors que je croyais avoir cherché dans tous les sens avant de poster ~~'.

          Citation

          Also notice that the ternary operator is an expression that returns a value based on the conditional phrase it evaluates. This is different than the if-then-else syntax, which executes a statement block based on it's conditional phrase.


          ça vient d'ici.
          • Partager sur Facebook
          • Partager sur Twitter
            8 janvier 2009 à 8:53:25

            Pendant qu'on parle de limite de l'opérateur ternaire, j'avais découvert un truc assez bizaroïde aussi.
            Certaines expressions ne passent pas malgré appel de méthodes avec valeurs de retour, notamment lorsque les types des objets ne sont pas les mêmes mais néanmoins compatible (sans avoir recours à un cast en temps normal) p.ex. classe et sous-classe.
            Je ne retrouve plus l'exemple qui m'avait valu une erreur de compilation de ce genre mais j'aimerais bien le retrouver...
            • Partager sur Facebook
            • Partager sur Twitter

            limite de l'opérateur ternaire en java

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown