Wejście X:
if (0 <= X and X < 49)
output abc
else if (50 <= X and X < 70)
output def
else if (70 <= X and X < 85)
output ghi
else if (85 <= X and X < 100)
output jkl
endif
Wejście X:
if (0 <= X and X < 49)
output abc
else if (50 <= X and X < 70)
output def
else if (70 <= X and X < 85)
output ghi
else if (85 <= X and X < 100)
output jkl
endif
Edit: nie szkodzi, ja zgadzam się wronfg na ten jeden.
To nie jest, bo nie ifjest testowany wewnątrz innego if, że testowane true.
W szczególności swoim przykładzie:
if (0 <= X and X < 49) output "abc"
else if (50 <= X and X < 70) output "def"
else if (70 <= X and X < 85) output "ghi"
else if (85 <= X and X < 100) output "jkl"
endif
może być zapisane jako:
if (0 <= X and X < 49) output "abc"; return; end if
if (50 <= X and X < 70) output "def"; return; end if
if (70 <= X and X < 85) output "ghi"; return; end if
if (85 <= X and X < 100) output "jkl"; return; end if
// X < 0 or X >= 100
Komentarz:
If nie musi być zagnieżdżona wewnątrz innego, jeśli mają być zagnieżdżone. To może być zagnieżdżona wewnątrz innego -Bill Lizard
Punkt podjęte; Ja zgadzam się mylę w tej jednej.
Można myśleć o nim jako logicznie równoważna następującej:
if(a) {
// code
} else {
if(b) {
// code
} else {
// code
}
}
Więc pod tym względem, można nazwać to zagnieżdżone. W C i podobnych języków, to jest dokładnie, jak to działa, ponieważ nie ma „elseif” oświadczenia dostępnego. Nawiasy klamrowe są opcjonalne, choć, po prostu włączone je do uczynienia go bardziej zrozumiałym.
To może być realizowany jako zagnieżdżonych pętli, w zależności od języka. Jednak sposób, w jaki logicznie napisał go, to nie byłby uważany za jednego.
Oni są zagnieżdżone, ale sformatowane jak oni nie są.
Twój kod jest taki sam, jak:
if (0 <= X and X < 49)
output "abc"
else
if (50 <= X and X < 70)
output "def"
else
if (70 <= X and X < 85)
output "ghi"
else
if (85 <= X and X < 100)
output "jkl"
endif
endif
endif
endif
To nie jest zagnieżdżona:
if (0 <= X and X < 49)
output "abc"
endif
if (50 <= X and X < 70)
output "def"
endif
if (70 <= X and X < 85)
output "ghi"
endif
if (85 <= X and X < 100)
output "jkl"
endif
To jest ważne we wszystkich (?) Języków, które mają if (pomijając rzeczy, jak przy użyciu {} zamiast endif)
Jednak niektóre języki mają rzeczywisty „elseif” polecenia (lub „Elif”), w którym sprawa będzie nie gniazdo, ale napisany jako „else if”, można przypuszczać, że to jest po prostu inaczej sformatowane gniazdo.
To zależy od rzeczywistego języka, a jak to jest napisane.
Na przykład przy użyciu VB, te Ifstwierdzenia nie są zagnieżdżone:
If 0 <= x And x < 49 Then
output("abc")
ElseIf 50 <= x And x < 70 Then
output("def")
ElseIf 70 <= x And x < 85 Then
output("ghi")
ElseIf 85 <= x And x < 100 Then
output("jkl")
End If
Chociaż te Ifoświadczenia są zagnieżdżone:
If 0 <= x And x < 49 Then
output("abc")
Else
If 50 <= x And x < 70 Then
output("def")
Else
If 70 <= x And x < 85 Then
output("ghi")
Else
If 85 <= x And x < 100 Then
output("jkl")
End If
End If
End If
End If
Powiedziałbym tak są zagnieżdżone. Kod jest dokładnie równoważna
if (0 <= X and X < 49)
output "abc"
else
if (50 <= X and X < 70)
output "def"
else
if (70 <= X and X < 85)
output "ghi"
else
if (85 <= X and X < 100)
output "jkl"
endif
Zauważ, że zmieniłem tylko spacje. Kiedy język ocenia if...else if...elseklauzule, to testuje każdą z nich, dopóki nie znajdzie prawdziwej klauzuli (lub trafi ostateczna else). Zagnieżdżone ifs ocenić dokładnie w ten sam sposób. Należy również pamiętać, że nie jest to konieczne w przypadku, gdy istnieje wyraźna elsifsłów kluczowych.
Jeszcze jedna rzecz, którą zauważył, co następuje to nie równoważne do kodu:
if (0 <= X and X < 49)
output "abc"
if (50 <= X and X < 70)
output "def"
if (70 <= X and X < 85)
output "ghi"
if (85 <= X and X < 100)
output "jkl"
Gniazdowania jest konieczne , aby utrzymać cały tekst od bycia wyjście, gdy wszystkie warunki są spełnione.
Ze względu na składnię pokazany, myślę, że odpowiedź powinna być „Nie”, w przeciwieństwie do skumulowanej mądrości innych odpowiedzi.
Pokażesz:
if (0 <= X and X < 49)
output "abc"
else if (50 <= X and X < 70)
output "def"
else if (70 <= X and X < 85)
output "ghi"
else if (85 <= X and X < 100)
output "jkl"
endif
Jest to oczywiście jedno if... endifrachunek, a więc nie ma zagnieżdżenia. Gdyby nie było wiele endifwypowiedzi, to być zagnieżdżone:
if (0 <= X and X < 49)
output "abc"
else
if (50 <= X and X < 70)
output "def"
else
if (70 <= X and X < 85)
output "ghi"
else
if (85 <= X and X < 100)
output "jkl"
endif
endif
endif
endif
Tak więc, w swoim języku, wydaje się, że słowo kluczowe elif(używany przez Bourne shell) i elsif(stosowany przez Perl) i ElseIf(używany przez Visual Basic) jest pisane else if.
Jeśli nie było jednoznaczne endif, aby zaznaczyć koniec rachunku, wtedy będę w porozumieniu z innymi odpowiedziami - że ifsprawozdanie (! Mnogiej) są zagnieżdżone, chociaż układ jest doskonale rozsądne i zalecane.
Nie, nie jest.
Zagnieżdżona stwierdzenie jest jeden, który pojawia się w tym samym oświadczeniu, jak gdyby ... If. Jeśli ... ElseIf to wszystko w tym samym „oświadczenie”.
To nieco bezcelowe gra semantyki; to zależy od składni języka zaangażowanych.
Na przykład w składni C-jak zwykle, będą uważane za zagnieżdżony w klauzulach indziej, z szelki pominięte przesłonić tego faktu. W tym przypadku przykład Turnor jest prawo.
W niektórych innych językach, takich jak Python i VB, „else-if” jest konstruktem atomowy własnych. W tym przypadku „czy” nie może być uznana za wewnątrz „inny”, więc nie można nazwać „zagnieżdżone”.
if (0 <= X and X < 49)
output "abc"
else if (50 <= X and X < 70)
output "def"
endif
Nie zdefiniowano składnię pseudocode tyle, aby powiedzieć na pewno, ale krocząca „endif” jest podejrzane. Jego istnienie nie pasuje do C-szelki-pominiętym stylu; oraz fakt, że jest tylko jeden z nich i nie więcej -
else
if (50 <= X and X < 70)
output "def"
endif
endif
- oznacza to, że nie pasuje do with-szelki (lub rozpoczęcia / zakończenia) modelu albo. Więc sądząc po tej składni Chciałbym umieścić swój język pseudokod w „atomowej innego-if” obozu i powiedzieć dość arbitralnie: Nie, if-oświadczenie nie jest zagnieżdżona.
(Ale zawsze można mieć zdefiniowany język gdzie endifs są opcjonalne lub spacje zależne. Albo, może mieć zdefiniowany język gdzie powyższe program wypisuje „Hello world”, a następnie usuwa wszystkie pliki. I posiada wbudowany czytnik poczty. )