Bloc de controle en Java

anaurel Messages postés 48 Statut Membre -  
anaurel Messages postés 48 Statut Membre -
Bonjour,
Exite -il une instruction du genre << go to de Fortran >> en Java en dehors de des blocs if et switch?

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Les goto historiques sont incompatibles avec la programmation procédurale (appels de méthodes) et encore plus avec la programmation objet.

    Il existe cependant un mécanisme de label en Java qui permet de faire des break/continue plus avancés, mais c'est la seule chose que l'on puisse faire en Java qui se rapproche vaguement à un goto.

    Exemple :

    toto: for (int[] array : matrix) {
              for (int id : array) {
                  if (id < 0) {
                      break toto;
                  }
              }
          }
    0
    1. anaurel Messages postés 48 Statut Membre
       
      ok merci
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Pour aller plus loin :
    Au delà du langage de programmation Java, il y a la machine virtuelle qui interprète le bytecode (qu'il soit issu d'un code Java ou d'un autre langage compatible) et dans les instructions utilisables par la JVM il y a le goto.

    https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

    C'est une instruction assez courante dans les bytecode que l'on obtient après la compilation d'un code source Java.

    Exemple : voici la méthode equals() de la classe Object en Java.

        public boolean equals(Object obj) {
            return (this == obj);
        }

    Une fois compilé voici le bytecode obtenu, avec
    goto 10
    sur l'instruction 6 (ce qui permet d'éviter la section "else" du if).

      // Method descriptor #12 (Ljava/lang/Object;)Z
      // Stack: 2, Locals: 2
      public boolean equals(java.lang.Object arg0);
         0  aload_0 [this]
         1  aload_1 [arg0]
         2  if_acmpne 9
         5  iconst_1
         6  goto 10
         9  iconst_0
        10  ireturn
        Stack map table: number of frames 2
            [pc: 9, same]
            [pc: 10, same_locals_1_stack_item, stack: {int}]
    0