Czy to stwierdzenie JEŚLI zagnieżdżone, czy nie?

głosy
0

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
Utwórz 11/04/2009 o 00:47
źródło użytkownik
W innych językach...                            


9 odpowiedzi

głosy
-1

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.

Odpowiedział 11/04/2009 o 00:51
źródło użytkownik

głosy
8

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.

Odpowiedział 11/04/2009 o 00:56
źródło użytkownik

głosy
0

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.

Odpowiedział 11/04/2009 o 01:11
źródło użytkownik

głosy
5

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.

Odpowiedział 11/04/2009 o 01:11
źródło użytkownik

głosy
3

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
Odpowiedział 11/04/2009 o 01:17
źródło użytkownik

głosy
3

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.

Odpowiedział 11/04/2009 o 01:20
źródło użytkownik

głosy
1

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.

Odpowiedział 11/04/2009 o 01:45
źródło użytkownik

głosy
0

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”.

Odpowiedział 11/04/2009 o 01:54
źródło użytkownik

głosy
1

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. )

Odpowiedział 11/04/2009 o 02:50
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more