Könnt ihr mir die if-Schleife erklären?

...komplette Frage anzeigen

11 Antworten

Ich dachte mir gerade: "Schon wieder eine dieser Fragen!", und dann habe ich gesehen, dass du es bist und mir gedacht: "Ist sie jetzt auf den Kopf gefallen, oder wie?". :)

Also in deiner Lieblingssprache PHP würde man eine if-Schleife ungefähr so implementieren:

$i = 0;

loop:
echo $i . "\n";

if (++$i < 10) {
goto loop;
}

Das macht natürlich (hoffentlich) kein Mensch in PHP, oder in jeder anderen Sprache, die irgendeine "intelligentere" Form von Schleifen bietet, aber es ist GENAU DAS wie man es in Assembler programmieren würde. (quasi 1:1 aus Maschinencode übersetzt)

  • Ich vermute deshalb, dass früher (so in den 80ern bis Anfang der 90er) viele Einsteiger, die bislang nur rudimentären Assembler kannten und plötzlich Bekanntschaft mit einer Hochsprache gemacht haben, ihre Gewohnheiten nicht ablegen konnten, und deshalb irgendwie dieser Begriff "if-Schleife" entstanden ist.
  • Oder auch heutzutage fummeln ja viele Leute mit der ollen DOS-Konsole rum und bauen Batchdateien in denen wie wild in feinster Spaghetticodemanier mit "goto" umher gesprungen wird. :)
  • Ooooder für Einsteiger ist bei schlechtem Lehrer bzw. schlechten Lehrmaterialien der Unterschied zwischen einer Bedingung in einer Verzweigung und einer Bedingung in einer Schleife nicht so klar, sodass beides vermischt wird. ("while" und "for" haben Bedingungen, "if" hat auch eine Bedingung, also ist es eine Schleife?)

Allerdings bin ich da ganz bei dir ... ich hatte früher von Anfang an auch noch nie Probleme mit der Unterscheidung und ich habe "if" nie als "Schleife" angesehen. Vermutlich lernen heutzutage viele junge Menschen zu oberflächlich und ohne den nötigen Tiefgang um gewisse Konzepte zu verinnerlichen. Ein Großteil versucht ja mit Youtube-Videos zu "lernen", die ebenfalls von Kindern produziert wurden, welche selber erst mal seit 3 Wochen programmieren, und sowohl qualitativ als auch didaktisch entsprechend minderwertig sind. ><

Daher kommt das mit der "if-Schleife" vermutlich, denke ich. :)

Naja, schönen Abend noch! :)

fluffiknuffi2 07.08.2017, 19:18

Hallo TeeTier,

PHP ist vielleicht meine Lieblingssprache aber das heißt nicht, dass ich PHP besonders toll finde. Oder ich bin ein praktisches Beispiel für das Stockholm-Syndrom, man weiß es nicht. >.<

"while" und "for" haben Bedingungen, "if" hat auch eine Bedingung, also ist es eine Schleife?


"while" und "for" haben Bedingungen, "if" hat auch eine Bedingung, also ist es eine Schleife?

Wahrscheinlich!

Das Zitat lasse ich übrigens mal genau so stehen wie es mir eingebaut wurde. Ob GF.net wohl auch noch goto verwendet? :o

Ein Großteil versucht ja mit Youtube-Videos zu "lernen", die ebenfalls von Kindern produziert wurden, welche selber erst mal seit 3 Wochen programmieren, und sowohl qualitativ als auch didaktisch entsprechend minderwertig sind

Leider hast du damit wohl nicht ganz unrecht. Wobei ja gerade bei PHP auch gerne ältere Personen Unsinn verbreiten. :(

Naja, schönen Abend noch! :)

Danke, dir auch! =)

5

Eine Einführung in die prozedurale Programmierung wird wohl zuerst "Simple Statements", dann "Compound Statements" behandeln. Letzteres sieht dann etwa so aus (die Programmiersprache ist dabei ziemlich egal):

    https://docs.python.org/3/reference/compound_stmts.html

Und hier trennt sich die Spreu vom Weizen: Wer sich bis zu den einfachen Zuweisungen noch ohne jegliches Verständnis durch Raten und Auswendiglernen durchmogeln konnte, rennt bei Fallunterscheidungen und Schleifen gegen die Wand. Er hört in dieser Lektion gefühlt 1000mal "if" und "Schleife", versteht aber nur Bahnhof.

Ebenso könnte ich von "ATP-Osmose" reden, wenn mich die Biostunde zum Thema "Zelle" geistig überfordert hat. Oder von "Sinus-Dreiecken" nach einer - erfolglosen - Einführung in die Trigonometrie.

Ich vermute, die if-Schleife hat es bis zur eigenen Webseite nur deshalb geschafft, weil drei Dinge unglücklich zusammentreffen:

  • Beide Strukturen werden in der selben Unterrichtseinheit behandelt.
  • Die Wörter "if" und "Schleife" sind so elementar, dass sie gerne auch zu ihrer eigenen Erklärung verwendet werden. Das macht sie zu Reizwörtern.
  • Die Referenten sind oft selbst nicht wirklich mit der Materie vertraut und erklären wirr oder falsch.
fluffiknuffi2 07.08.2017, 20:46

Klingt plausibel.

Übrigens interessant, dass die Phyton-Doku erst mal erklärt, was compound statements sind. Sehr schön.

0

Wenn man mit dem Programmieren anfängt (speziell wenn man in der Schule darauf keine Lust hat und es halt zum Stoff gehört) lernt man meistens die for und while Schleife und eben die if Abfrage.

Da jetzt alles außer dem if Schleifen sind (und die meisten, die if Schleifen erfinden keine Ahnung haben) wird es hauptsächlich davon kommen.
Zusätzlich kann man als Anfänger schon mal if und for verwechseln (von den Namen) oder eben while und if (vom Aussehen).

Passierte auch meinen Mitschülern ständig ;D ist also kein seltenes Phänomen.

PS: und ich dachte schon da hat jemand wieder mal des einfach Prinzip von Wenn(...)->Dann(...)/Sonst(...) nicht kapiert...

~Tim

fluffiknuffi2 09.08.2017, 18:27



PS: und ich dachte schon da hat jemand wieder mal des einfach Prinzip von Wenn(...)->Dann(...)/Sonst(...) nicht kapiert...

Doch doch :D Aber für viele ist es scheinbar ziemlich scher zu verstehen. Und wenn dann noch so Dinge wie elseif und switch dazu kommen, dann wird es wahrscheinlich noch viel schwerer. Und wenn dann noch ternäre Operatoren ins Spiel kommen, ist wahrscheinlich bei den meisten Anfängern das Limit erreicht:

x = (zahl == 5) ? "Zahl gleich 5" : "Zahl ungleich 5";

Quelle: https://de.wikipedia.org/wiki/Bedingte\_Anweisung\_und\_Verzweigung#Auswahloperator

1
timlg07 12.08.2017, 15:50
@fluffiknuffi2

Und wenn dann noch ternäre Operatoren ins Spiel kommen, ist wahrscheinlich bei den meisten Anfängern das Limit erreicht:

x = (zahl == 5) ? "Zahl gleich 5" : "Zahl ungleich 5";

Ja diese Schreibweise ist aber einfach mega praktisch *_*  

0

„Schleifen“ und „if-Abfragen“ liegen näher beieinander, als manchem bewusst ist!

Zunächst dienen beide Konstrukte der Steuerung von Programmen.

Die „reine“ if-Abfrage will eine Bedingung testen und verzweigt je nach Testergebnis zur einen oder zur anderen Programmfortsetzung. Beispielsweise möchte man wissen, ob das Auto grün oder pink ist …

Bei Schleifen „weiß“ der Programmierer, dass seine Teilaufgabe (z.B. ein Suchalgorithmus o.ä.) wiederholt ausgeführt werden muss. Genau dafür sind diese Schleifen-Konstrukte gedacht. Allerdings muss man jedoch auch feststellen, wann und ob eine Bedingung vorliegt, damit die Schleife beendet werden kann. Genau dafür wird dann wieder eine if-Abfrage verwendet, die dann jedes Mal prüft, ob die Abbruchbedingung der Schleife erfüllt ist.

Schleifen und „if's“ liegen somit nicht sehr weit auseinander und der eine oder andere vergisst sich und redet dann von einer „if-Schleife“, was dann u.U. dümmlich daher kommt … :-)

Weiter oben war von der „reinen“ if-Abfrage die Rede. Hiermit ist eine „einfache“ if-Abfrage gemeint.

„Böse“ Menschen wie die Mathematiker und Informatiker kennen dann noch die „Verschachtelung“ von if-Abfragen und den „Switch“. Das will ich jetzt nicht weiter aufdröseln – ich wollte nur darauf hinweisen … :-)

fluffiknuffi2 09.08.2017, 18:38

„Böse“ Menschen wie die Mathematiker und Informatiker kennen dann noch die „Verschachtelung“ von if-Abfragen und den „Switch“.



Und den ternären Operator ?: und je nach Programmiersprachen Zuweisungen im Bedingungs-Teil der if-Abfrage 

if ((x = machWas()) == 1) ...
und elseif und Steuerungsmöglichkeiten in Schleifen, sprich continue, und break und und und... Und puff, da ist der Kopf des Anfängers / der Anfängerin explodiert. 



0
wolfgang1956 09.08.2017, 19:00
@fluffiknuffi2

Und den ternären Operator ?: und je nach Programmiersprachen Zuweisungen im Bedingungs-Teil der if-Abfrage

Natürlich hätte ich auch aus den Lehrbüchern für C, C++, Jaffa … weitere Gemeinheiten zitieren können – habe mich aus Gründen der „Übersicht“ auf die Fragenstellung beschränkt …

Und puff, da ist der Kopf des Anfängers / der Anfängerin explodiert.

Na ich hoffe, dass er inzwischen wieder implodiert ist. Nicht, dass bei dir bleibende Schäden zu verzeichnen wären … :-)

Wissen ist Macht, …

1

Also ich war immer der Ansicht, dass diese Verwechslung / falsche Bezeichnung davon kommt, dass in Sprachen wie C#/C++/Java sowohl Schleifen als auch "if" jeweils mit ähnliche Syntax haben.

if(x > 5)
{
    do();
}

while(x > 5)
{
    do();
}
fluffiknuffi2 09.08.2017, 18:29

Ja, das klingt schlüssig. Wenn man sich eher die Syntax / Form merkt als die Bedeutung, dann kann man die beiden wahrscheinlich nicht so einfach auseinanderhalten.

0

Eine if schleife? Gibts nicht. If ist eine möglichkeit etwas zu prüfen. Was meinst du mit woher das kommt? Warum if so bekannt ist? Na weil du sonst schlecht prüfen könntest was welchen wert oder zustand hat.

fluffiknuffi2 09.08.2017, 18:28

Ich meinte: Warum viele von der "if-Schleife" sprechen, also die if-Bedingung und z. B. die for-Schleife sprachlich vermischen.

0
LeonardM 10.08.2017, 09:36

ich würde behaupten weil sie es nicht besser wissen. TeeTier hat ein Beispiel geliefert aber wenn du das if weg lässt bleibt die Schleife trotzdem voll funktionsfähig. Nur weil in seinem Beispiel jetzt ein if vorkommt ist es nichts besonderes. ich könnte genauso sagen $lauf = true; $i = 0; while(true){if(++$i = 10){$lauf=false;}} da hast du auch nen if dabei und es ist trotzdem keine if schleife sonder ne while.

1
LeonardM 10.08.2017, 09:37

meinte ein doppel = beim if. am handy ists manchmal blöd :D

1

Nun man spricht von Schleifen wenn ein bestimmter Code mehrfach ausgeführt werden soll. Also FOR, WHILE und DO UNTIL.

Viele Anfänger verwechseln den Sinn der Schleife, weil ein "IF" nur eine Verzweigung erzeugt.

Für den Beginner sind auch die Schweifklammern eine Schleife...

fluffiknuffi2 07.08.2017, 19:08

Vielleicht :D Vielleicht merken sie sich nur was von wegen geschweiften Klammern und dann verschwimmt alles mit geschweiften klammern irgendwie zu einem Schleifenbedingungsdingsda. Aber 100%ig überzeugt bin ich nicht. :P

0

http://www.if-schleife.de/

Die Gemeinsamkeit zwischen Schleife und Bedingung ist, dass Schleifen eine Abbruchbedingung haben können. 

Man könnte mit VBA und GoTo tatsächlich so etwas wie eine if-Schleife programmieren:

Sub ifschleife()

start:
a = a + 1
If a < 3 Then
MsgBox "a ist jetzt " & a
GoTo start
Else
MsgBox "Programmende"
End If
End Sub
fluffiknuffi2 07.08.2017, 19:06

Ja, da kommst du aber zu spät, das hat TeeTier vor ein paar Tagen auch schon demonstriert. :P (Bin jetzt zu faul das herauszusuchen.)

Aber du hast recht, die (Abbruch)bedingung ist eine Gemeinsamkeit. Also eine gewisse Ähnlichkeit besteht auf jeden Fall. 

1

Es gibt keine if-Schleife.

https://de.wikipedia.org/wiki/Bedingte_Anweisung_und_Verzweigung

Ich würde mal behaupten, dass Leute auf "if-Schleife" kommen, weil sie schlicht keine Ahnung haben.

fluffiknuffi2 07.08.2017, 19:10

Okay, aber da fehlt ja der Zusammenhang? Warum nennen sie es dann if-Schleife und nicht if-Array, oder so?

0
Etter 07.08.2017, 19:30
@fluffiknuffi2

Weils von der Form her eher wie ne Schleife ausschaut, als n Array würd ich mal vermuten.

Zudem haben Schleifen Abbruchbedingungen (weitere Ähnlichkeit).

1
Omnivore14 07.08.2017, 19:32
@fluffiknuffi2

Warum nennen sie es dann if-Schleife und nicht if-Array, oder so?

Aua aua aua. Ich brauche dringend Asperin. Wer kann helfen?

0
Omnivore14 07.08.2017, 19:34
@Etter

Zudem haben Schleifen Abbruchbedingungen (weitere Ähnlichkeit).

Das würde ich so nicht sagen. Schleifen und Verzweigungen haben nur Eintrittsbedingungen. Abbruchbedingungen gibt es nicht. Was man allerhöchstens machen kann ist eine Schleife von innen zum Abbruch zwingen (break).

Abbruchbedingung ist so ein Sprachgebrauch. Technisch gesehen gibt es aber nur Eintrittsbedingungen.

0
Etter 07.08.2017, 19:41
@Omnivore14

Mhh da habe kein so gutes mehr dar, aber wenn n Jever reicht *rüberschieb*

1
Etter 07.08.2017, 19:45
@Omnivore14

Ich find eher den Geschmack fies, aber das mitm sprudelig kann ich auch akzeptieren =D

0
ralphdieter 07.08.2017, 20:12
@Omnivore14

Abbruchbedingungen gibt es nicht

In C gibt es

 do {...} while (condition);

In Pascal gibt es

repeat ... until condition
1
fluffiknuffi2 07.08.2017, 20:30
@Etter

Ich mag lieber Honig. Und Bienen. Die schmecken so gut. In meinem letzten Leben war ich wohl eine Venusbienenfalle.

0
Omnivore14 07.08.2017, 21:12
@ralphdieter

die fußgesteurte Schleife in C hat trotzdem eine "weitermach"-bedingung oder bin ich da etwa auf dem falschen Dampfer?

Mit pascal kenne ich mich nicht aus.

"Repeat...until Abbruchbedingung" ist für mich jedenfalls ein sehr verwirrender Stil.

0
Franz1957 07.08.2017, 22:57
@Omnivore14

Verwirrend kann nur sein, was dogmatische Ansichten beendet. Schleifen mit Abbruchbedingung gibt es auch in COBOL, PL/I, manchen Basic-Versionen, Perl, Perl 6, Ruby, und im Prinzip in jeder Sprache, die mit irgendeiner bedingten Anweisung (wie break in Perl oder exit in Fortran) das Verlassen einer Schleife gestattet.

0

'if' ist keine Schleife, sondern eine Verzweigung. Wenn Bedingungen erfüllt werden, kommst Du ja nicht mehr zum 'if' zurück - so wie das bei zB 'for' oder 'while' ist - sondern Du reagierst nur auf bestimmte Bedingungen und verzweigst dementsprechend.

fluffiknuffi2 07.08.2017, 19:10

Du weißt das, ich weiß das. Und dass du meine Frage nicht zu Ende gelesen hast, weißt du in 10 Sekunden bestimmt auch. :'D :'D

0

Die If Schleife gibt es nicht, die gibts erst dann wenn es das Internet auch für Computer gibt. 

fluffiknuffi2 07.08.2017, 20:42

...und wenn alle meine Frage mal komplett lesen. :P

0

Was möchtest Du wissen?