Ist die IF-Anweisung verschachtelt ist, oder nicht?

stimmen
0

Eingabe 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
Veröffentlicht am 11/04/2009 um 00:47
quelle vom benutzer
In anderen Sprachen...                            


9 antworten

stimmen
-1

Auf edit: geschweige denn, werde ich stimme ich auf dieses war wronfg.

Es ist nicht, weil nicht ifinnerhalb eines anderen getestet wird , ifdie getestet true.

Insbesondere Ihr Beispiel:

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

werden könnte neu geschrieben als:

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

Kommentar:

Eine if-Anweisung muss nicht in einer anderen verschachtelt werden, wenn verschachtelt werden. Es kann innerhalb einer anderen verschachtelt werden -Bill die Eidechse

Punkt genommen; Ich werde zustimmen, ich bin falsch auf diesem.

Beantwortet am 11/04/2009 um 00:51
quelle vom benutzer

stimmen
8

Man könnte daran denken, wie die folgenden logisch äquivalent zu sein:

if(a) {
    // code
} else {
    if(b) {
        // code
    } else {
        // code
    }
}

So in dieser Hinsicht könnte man es nennen verschachtelt. In C und ähnlichen Sprachen, das ist genau, wie es funktioniert, da keine da ist „elseif“ Anweisung zur Verfügung. Die geschweiften Klammern sind zwar optional, ich eingeschlossen nur sie es deutlicher zu machen.

Beantwortet am 11/04/2009 um 00:56
quelle vom benutzer

stimmen
0

Es könnte als eine verschachtelte Schleife implementiert werden, auf Sprache abhängig. Sie jedoch die Art und Weise logisch es schrieb, wäre es nicht zu berücksichtigen.

Beantwortet am 11/04/2009 um 01:11
quelle vom benutzer

stimmen
5

Sie sind verschachtelt, aber formatiert, wie sie sind es nicht.

Der Code ist das gleiche wie:

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

Dies ist nicht verschachtelt:

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

Dies gilt in allen (?) Sprachen, die, wenn Anweisungen (Dinge wie mit {} statt endif ignoriert)

Allerdings haben einige Sprachen eine tatsächliche „elseif“ (oder „Elif“) Befehl, in diesem Fall werden Sie nicht nisten, sondern als „else if“ geschrieben Sie es nur ein anders formatiert Nest annehmen kann.

Beantwortet am 11/04/2009 um 01:11
quelle vom benutzer

stimmen
3

Es hängt von der verwendeten Sprache, und wie es geschrieben.

Zum Beispiel VB verwenden, diese Ifsind Aussagen nicht verschachtelt:

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

Während diese IfAussagen sind verschachtelt:

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
Beantwortet am 11/04/2009 um 01:17
quelle vom benutzer

stimmen
3

Ich würde sagen, ja, sie verschachtelt sind. Ihr Code entspricht genau

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

Beachten Sie, dass ich nur die Leerzeichen geändert. Wenn eine Sprache wertet if...else if...elseKlauseln, prüft er jeden , bis sie die wahre Klausel findet (oder es trifft die endgültige else). Die verschachtelten ifs bewerten in genau der gleichen Weise. Beachten Sie auch , dass dies nicht unbedingt der Fall ist , wenn es ein explizites ist elsifSchlüsselwort.

Eine weitere Sache , die ich bemerkt, ist die folgende nicht äquivalent zu Ihrem Code:

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"

Die Verschachtelung ist notwendig , den gesamten Text zu halten von Ausgabe zu sein , wenn alle Bedingungen erfüllt sind.

Beantwortet am 11/04/2009 um 01:20
quelle vom benutzer

stimmen
1

In Anbetracht der Syntax gezeigt, ich glaube, die Antwort sollte auf die kumulierten Weisheit der anderen Antworten „Nein“, zuwiderläuft.

Du zeigst:

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

Dies ist eindeutig eine einzige if... endifAussage, und daher gibt es keine Verschachtelung. Wenn es mehr waren endifAussagen, wäre es verschachtelt:

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

Also, in Ihrer Sprache, scheint es , dass das Schlüsselwort elif(verwendet von dem Bourne - Shell) und elsif(verwendet von Perl) und ElseIf(verwendet von Visual Basic) geschrieben wird else if.

Wenn es kein explizites ist endifdas Ende der Anweisung zu markieren, dann würde ich mit den anderen Antworten einverstanden sein - , dass die ifAussagen (! Plural) verschachtelt sind, obwohl das Layout durchaus sinnvoll ist und empfohlen.

Beantwortet am 11/04/2009 um 01:45
quelle vom benutzer

stimmen
0

Nein ist es nicht.

Eine verschachtelte Anweisung ist eine, die innerhalb einer gleichen Aussage erscheint, wie If ... Wenn. If ... ElseIf ist alles in der gleichen „Anweisung“.

Beantwortet am 11/04/2009 um 01:54
quelle vom benutzer

stimmen
1

Dies ist ein etwas sinnlos Spiel der Semantik; es hängt von der Syntax der Sprache beteiligt.

Zum Beispiel in einer C-ähnlichen Syntax würde sie in der Regel verschachtelte in den else-Klauseln angesehen werden, wobei die Streben, diese Tatsache zu verschleiern weggelassen. In diesem Fall ist Turnor das Beispiel rechts.

In einigen anderen Sprachen wie Python und VB ‚else-if‘ ist ein atomares Konstrukt für sie. In diesem Fall ist die ‚wenn‘ nicht in der ‚else‘ betrachtet werden kann zu sein, so kann es nicht „verschachtelt“ bezeichnet werden.

if (0 <= X and X < 49)
    output "abc"
else if (50 <= X and X < 70)
    output "def"
endif

Sie haben nicht die Syntax des Pseudo-Code ausreichend zu sagen, sicher, aber die hintere ‚endif‘ definiert ist verdächtig. Seine Existenz paßt nicht mit dem C-Klammern weggelassene Stil; und die Tatsache, dass es nur einer von ihnen und nicht mehr -

else
    if (50 <= X and X < 70)
        output "def"
    endif
endif

- bedeutet es nicht , die mit Streben übereinstimmt (oder Beginn / Ende) Modell entweder. So urteilt, dass Syntax würde ich Ihre Pseudo - Code Sprache in den ‚Atom-else-if‘ Lagern gesteckt, und sage ganz willkürlich: Nein, Ihr if-Anweisung nicht verschachtelt ist.

(Aber Sie immer eine Sprache definiert haben könnte, wo endifs optional oder Leerzeichen abhängig sind. Oder Sie eine Sprache definiert haben könnte, wo die oben genannten Programm druckt „Hallo Welt“ dann alle Dateien löscht. Und hat eine integrierte Mail-Leser. )

Beantwortet am 11/04/2009 um 02:50
quelle vom benutzer

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