En Java, est-ce considéré comme un exemple d ' "instruction IF imbriquée"?


Ici, nous avons une hypothèse de longue date qui doit être éclaircie dans ma tête. Voici un exemple d'imbrication des instructions "if":

if (...)
  ...;
else if (...)
  ...;

J'avais l'impression que l'imbrication nécessitait un " si "dans un autre "si", comme ceci:

if (...)
  if (...)
    ...;

Ou au moins une séparation claire de la portée lorsque vous imbriquez dans un autre, comme ceci:

if (...)
  ...;
else { //if the next statement didn't 
       //exist, then the curly brace changes nothing?
  ...;
  if (...)
    ...;
}

Cela pourrait se résumer à la façon dont le compilateur interprète les choses, si le ' if ' dans else -fs est considéré au même niveau que le parent if, ou s'ils créent de "nouvelles" instructions 'if'. Je vous remercie pour votre temps!

Edit: Je demande parce que je suis un TA dans un laboratoire java, et le sujet du jour était imbriqué -fs. En fin de compte, j'ai découvert que l'enseignant considérait mon premier exemple comme valide pour les "déclarations if imbriquées".

Author: IAdapter, 2010-09-04

12 answers

Ceci est une instruction if :

if (condition1) {
    // ...
}

Ceci est une instruction if imbriquée :

if (condition1) {
    // ...
    if (condition2) {
        // ...
    }
    // ...
}

Ceci est une instruction if-else :

if (condition1) {
    // ...
} else {
    // ...
}

Ceci est une instruction if-else chaînée :

if (condition1) {
    // ...
} else if (condition2) {
    // ...
}
 12
Author: BalusC, 2010-09-03 20:55:18

Bien sûr, il est imbriqué. L'imbrication n'a rien à voir avec la façon dont vous formatez le code.

if (...)
{
    // some code
}
else if (...)
{
    // some code
}
else
{
    // some code
}

Est exactement équivalent à

if (...)
{
    // some code
}
else
{
    if (...)
    {
        // some code
    }
    else
    {
        // some code
    }
}

Il n'y a pas de mot-clé 'else if' en Java, l'effet est obtenu uniquement par une convention de formatage qui empêche les longues chaînes d'elses imbriquées de dériver à travers l'écran.

Au cas où quelqu'un aurait besoin de persuader, voici la spécification d'une instruction if: Java Language Specification section 14.9

 20
Author: JeremyP, 2016-12-16 22:32:23

Un if imbriqué est comme ceci:

if (...)
  if (...)
    ...;

Le premier exemple que vous avez donné est juste if/else.

Un bon moyen de s'en souvenir est que l'indentation augmente avec un if imbriqué, mais avec if/else ce n'est pas le cas.

 7
Author: dcp, 2010-09-03 20:04:59

Conceptuellement, pour moi la première forme

if (cond1)
{
}
else if (cond2)
{
}
else
{
}

N'est pas imbriqué car toutes les conditions sont évaluées au même niveau logique. En d'autres termes, j'ai lu ceci comme "branchez votre action basée sur cond1:cond2:autre chose".

if (cond1){ 
   if (cond2){ 
     if (cond3){ 

Est imbriqué parce que vous avez des conditions évaluées dans d'autres conditions , c'est-à-dire que dépend des conditions précédentes. Si vous voulez être littéral à ce sujet, la portée de cond2 dans le second cas est littéralement imbriquée dans la portée de cond1. C'est pas vrai dans la première forme.

Je n'ai jamais pensé que c'était controversé.

Edit: si vous avez déjà dû lire du code comme this la différence peut sembler moins académique.

 4
Author: Steve B., 2017-05-23 10:30:40

Je supposerais les troisfs imbriqués. Comme il y a un accord général sur les autres cas, je me concentre sur votre premier cas:

Ce code est imbriquée si de mon point de vue, comme un seul if est quelque chose comme

if(...) { } else { }

Où la partie else est facultative. Et vous avez effectivement imbriqué un if dans la partie else de l'extérieur if else, même si le formatage (et peut-être la sémantique) le suggère différemment.

Mais en fait, cela se résume à la définition exacte de " imbriqué si", et je ne pense pas qu'il y en ait un généralement accepté.

Pourquoi demandez-vous? Si c'est quelque chose en ce qui concerne l'efficacité du code, cela ne dépend pas uniquement du niveau d'imbrication. Si cela est dû à certaines lignes directrices en ce qui concerne les niveaux d'imbrication if, la ligne directrice devrait préciser comment elle définit exactement "if imbriqué".

 2
Author: Frank, 2010-09-03 20:18:14

Je ne considère pas la première forme (if/else if/etc) pour être "imbriqués". Au contraire, cela ressemble plus à un bloc de commutation, que je ne considérerais pas non plus comme imbriqué.

 2
Author: George Jempty, 2010-09-03 20:53:33

Je le comprends de la même façon que vous.

Si l'implémentation ne prend secrètement en charge que les mots-clés "if" et "else", je suppose que vous pourriez considérer le "if" dans "else if" comme une instruction if imbriquée dans une instruction "else". Mais je ne vois pas ce qui compte tant. La portée de " else "ne contient que le" if " dans ce cas, elle se comporte donc efficacement comme une portée unique.

Est-ce une légère curiosité, ou rencontrez-vous des problèmes de portée?

 1
Author: michael.bartnett, 2010-09-03 20:06:48

Vous pouvez imbriquer un if sans déclarer un else, ce qui semble être votre confusion.

 0
Author: Joel, 2010-09-03 20:07:47

L'instruction est un exemple d'imbrication dans une forme irrégulière.

Le formulaire que vous avez est:

if(statement1 == true)
   code1...;
else if (statement2 == true)
   code2...;

Cela équivaut à ce qui suit:

if (statement1 == false)
   if (statement2 == true)
      code2...;
else
   code1;

Cependant, je pense que c'est une mauvaise pratique de programmation d'imbriquer sous cette forme. Vous devriez être en mesure de réorganiser le code pour l'adapter à un formulaire plus traditionnel.

 0
Author: Matt Groff, 2010-09-03 20:30:41

S'il est placé dans un autre bloc if, c'est un if imbriqué. Le premier cas est une instruction if-else.

 0
Author: fastcodejava, 2010-09-03 20:56:18

Dans la construction

if (...)
  ...
else {
  if (...)
    ...
}

Le else identifie implicitement si: si l'antécédent est faux.

Ayant un if imbriqué dans cette portée else, alors, à mon avis, se qualifie sémantiquement comme une instruction if imbriquée.

 0
Author: Noel Ang, 2010-09-04 01:00:52

L'instruction if imbriquée signifie: dans la condition if placé une autre condition if

 0
Author: Ch.Bilal Aziz, 2018-03-13 22:39:55