Diskussion:Schleife (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 5 Jahren von Arilou in Abschnitt LOOP-EXIT fehlt
Zur Navigation springen Zur Suche springen

Reihenfolge[Quelltext bearbeiten]

Bei den Arten werden zunächst die Kopfgesteuerten (while), dann die Fußgesteuerten (do/repeat) und zuletzt die Zählschleifen (for/foreach) erwähnt. Wäre es nicht sinnvoll, auch in den Beispielen diese Reihenfolge zu benutzen? Die while(<bedingug>) do {BLOCK} scheint mir die wichtigste Schleifenart, zumal sie in beinahe allen höheren (3. Genaration) Sprachen beinahe unverändert auftritt und da zudem jedes Programm auch ohne die anderen Schleifenarten (wenn manchmal auch ungleich komplizierter) umgesetzt werden kann (vorausgesetzt eine Variablenzuweisung ist vorhanden): WHILE-Programm. Ist vielleicht nicht ganz einfach neu zu ordnen, denn der Assembler-Code steht etwas quer in der Landschaft, darf aber meines Erachtens nicht fehlen: alle Schleifen werden auf tiefer Ebene ja mit einem Assembler umgesetzt; einzig die theoretische While-Programmierung kommt ohne Assembler aus ;-) (nicht signierter Beitrag von Phiki (Diskussion | Beiträge) 23:54, 28. Mär. 2010 (CEST)) Beantworten

Dieser Abschnitt kann archiviert werden. arilou (Diskussion) 15:34, 13. Feb. 2013 (CET)

Der Artikel Break hierher, der Artikel enthält dieses Wort aber nicht. Bin leider kein Informatiker. Vielleicht könnte das jemand vom Fach erklären ;-)

Dieser Abschnitt kann archiviert werden. arilou (Diskussion) 15:34, 13. Feb. 2013 (CET)

Fehlt hier nicht der Konstrukt der foreach schleife (Ist schließlich mitlerweile in vielen Programiersprachen enthalten)

--Just-Ben 11:46, 17. Okt 2004 (CEST)

Dieser Abschnitt kann archiviert werden. arilou (Diskussion) 15:34, 13. Feb. 2013 (CET)

[2004-03-26][Quelltext bearbeiten]

Ich habe das mal etwas umstrukturiert und erweitert. Die GOTO-Konstrukte sind nicht wirklich aktuell und relevant (wer benutzt noch einen C64? :)). Deshalb habe ich das mit einem entsprechenden Kommentar versehen und nach unten abgetrennt (3. Absatz).

Hinzugefügt habe ich ein Assembler-Beispiel.

Ich will keinen Artikelkrieg beginnen, bei dem immer hin- und her geändert wird. :-)

Tjabo

Niemand will das :-). Die GOTO-Sachen sollten auch nicht eine Anleitung zum C64-Programmieren sein, sondern nur die prinzipielle Möglichkeit aufzeigen. Das könnte man genausogut an Assembler-Beispielen tun, die aber mehr verdecken, da unter anderem unverständliche Kürzel eingesetzt werden. Die C64-BASIC-Übereinstimmung besteht ja auch nicht exakt und ist zufällig (!) lg Hubi 08:35, 26. Mär 2004 (CET)
Noch was: Der Artikel wurde im Kontext Kontrollstrukturen angelegt (nicht von mir) und hebt viel zu sehr auf dieses Thema ab. Sogar die Definition ist eine Kontrollstruktur gefällt mir nicht wirklich. Man könnte das ja ganz anders und meines Erachtens besser aufziehen, z. B. normale sequenzielle Ausführung, Wiederholungen durch Rückwärtssprünge. Dann Unterstützung in Prozessoren (PC, der normalerweise inkrementiert wird, Sprungbefehle in Maschinencode/Assember) und danach erst Kontrollstrukturen. Die GOTO-Beispiele können dann ganz raus oder sie können in einen anderen Artikel integriert werden. Obwohl sie von mir sind, würd ich ihnen nicht nachweinen. Also nur zu Hubi 08:53, 26. Mär 2004 (CET)

Ich finde, dass es den Teil mit den Basic-Pendants zu "for" usw. eigentlich nicht braucht. Jeder Sprache heute hat Sachen wie "for". Letzlich würde es vielleicht auch schon reichen zu schreiben: for i=1 to 10; print i; endfor; und darunter die Zahlen von 1 bis 10. Der Rest ist einfach klar ;-). Ich wende mich mal anderen Artikeln zu... Tjabo 22:54 25. Mär 2004

Wobei das kein Basic sein sollte. :-) Und vielleicht ist es ja nur dir/einem Geschulten klar. Jedenfalls ist deine Einfügung nach wie vor gut Hubi 07:17, 27. Mär 2004 (CET)

Ich habe ziemlich viel Probleme mit den GOTO-Befehlen, wie sie hier wieder eingeführt werden, denn

  1. Man hat (fast) Jahrzehnte gebraucht um den Mist aus den Köpfen zu verdrängen, da der dadurch entstehende Spaghetti-Code unwartbar wird.
  2. Der Goto-Befehl ist ein unbedingter Sprung (also an keine Bedingung geknüpft) (also eigentlich nur für Endlos-Schleifen sinnvoll verwendbar), bei dem in einer vorgeschalteten Abfrage die Bedingung abgefragt wird.
  3. Die Aussage über Assembler ist ebenfalls falsch, denn alle Assembler-Sprachen kennen neben dem unbedingten Sprung (=GOTO) bedingte Sprünge, die natürlich zum Aufbau der Schleifen verwendet werden. RolfS 11:25, 8. Mär 2004 (CET)
nur als anmerkung, fast alle compiler benutzen bei der codegenerierung unbedingte sprünge (im besonderen bei schleifen), es macht also wenig sinn zu verschweigen das es sie gibt.195.243.149.235 13:03, 9. Mär 2004 (CET)

Na ja, wer einen Sprung hat (GOTO) braucht auch einen bedingten Sprung, der hier mit IF...GOTO wiedergegeben ist. Das mit GOTO=unbedinger Sprung siehst du m.E etwas zu eng, da es je nach Programmier-/Assemblersprache individuell verschieden aussieht. Der bedingte Sprung kann natürlich in Assembler dann BNE, BGT, JNZ usw. heissen. Und dass man strukturiert programmieren sollte, ist eine Software-Engineering-Technik. In einer Enzyklopädie können die GOTOs schon stehen bleiben (nur meine Meinung). Dass GOTOs Spaghetti Code ermöglichen, könnte man durchaus sagen. Aber auch in Assembler muss man keinen Spaghetti-Code programmieren, nur weil Kontrollstrukturen fehlen. Und die Äquivalenz Kontrollstruktur/GOTO-Code kann und sollte man schon zeigen. Hubi 12:20, 8. Mär 2004 (CET)
PS: und das IF...GOTO entspricht meinem "geliebten" C64-Basic, entstammt also einer realen, unstrukturierten Programmiersprache (das geliebt bitte nicht wörtlich nehmen!), ist also bestimmt nicht (so) falsch Hubi 12:24, 8. Mär 2004 (CET)
PSPS. Hab gerade den Artikel nochmal angeschaut. Dort heisst es nur, dass in Assemblersprachen nichts anderes als Sprünge (in Bezug auf Kontrollstrukturen) möglich ist. Von unbedingten Sprüngen ist da gar nicht die Rede. Daher behauptet der Artikel gar nicht das, was du ihm unterstellst. Viele Grüße Hubi 12:34, 8. Mär 2004 (CET)

vielleicht sollte man das durch Bilder ersetzen.

Probleme habe ich mit dem Wort "Kontrollstruktur", das ist eigentlich eine Fehlübersetzung aus dem Englischen (siehe falsche Freunde) und müsste zum Beispiel "Steuerstruktur" heißen. Andererseits bürgert sich der Begriff langsam ein und übernimmt die englische Bedeutung: An den Kontrollen saß = an der Steuerung saß.

-- Hutschi 11:37, 8. Mär 2004 (CET)

Im Deutschen hat sich das Wort Kontrollstruktur schon seit langem eingebürgert, obwohl to control ja eigentlich steuern und nicht kontrollieren heisst. Steuerstruktur ist absolut unüblich. Vielleicht könnte man das mit der Fehlübersetzung einfach an geeigneter Stelle in den Artikel einarbeiten. Hubi 12:20, 8. Mär 2004 (CET)



Ich habe einen Hinweis bei dem Artikel Falsche Freunde eingebaut.

-- Hutschi 12:56, 9. Mär 2004 (CET)

Hilft den Lesern _dieses_ (Schleife (Programmierung)) Artikels aber wenig. Sollte man das nicht auch in diesem Artikel erwähnen? --Dark Mania 03:05, 2. Feb. 2009 (CET)Beantworten
Dieser Abschnitt kann archiviert werden. arilou (Diskussion) 15:34, 13. Feb. 2013 (CET)

Butter bei die Fische[Quelltext bearbeiten]

In diesem Artikel fehlt's vorne und hinten...

  1. keine Erwähnung von Dingen wie (aus Java) break oder continue (break: Schleife abbrechen; continue: aktuellen Schleifenrumpf abbrechen, weiter mit nächster Iteration)
  2. keine Erwähnung, dass man Schleifen auch verschachteln kann
  3. keine Erwähnung von Endrekursion bzw. Rekursion allgemein
  4. keine Erwähnung von Loop Unrolling
  5. keine Erwähnung von angepassten Assemblerbefehlen à la "compare_jumpNotZero Adresse"

Bestimmt gibt's noch mehr, was man zu Schleifen sagen kann; vielleicht gibt's ja noch jemand hier, der mal mit Lochkarten programmiert hat, da stell' ich mir Schleifen lustig vor... --arilou 16:13, 3. Jan. 2012 (CET)Beantworten

Über 1 Jahr keine Reaktion, also... dann eben ich. --arilou (Diskussion) 20:11, 10. Feb. 2013 (CET)Beantworten
Dieser Abschnitt kann archiviert werden. arilou (Diskussion) 15:34, 13. Feb. 2013 (CET)

Schleife oder Wiederholung[Quelltext bearbeiten]

Dieser Artikel geht nicht bedacht genug mit Fachwörtern um. Eine Schleife entspricht eben nicht jeder Wiederholung. In höheren Programmiersprachen heißt die hier erklärte Kontrollstruktur eben "Wiederholung". Dabei gibt es "Wiederholungen mit fester Anzahl" und "Wiederholungen mit Bedingung". Schleifen kommen noch aus Zeiten hardwarenaher Programmierung. z.B. Java und C++ kennen als Kontrollstruktur lediglich Wiederholungen und keine Schleifen! Der Ausdruck wird hier falsch verwendet! Siehe z.B. http://www.isb.bayern.de/download/12311/hr_kompetenzorientierte_aufgaben_informatik.pdf (nicht signierter Beitrag von 2001:4C50:22E:A200:A814:36BC:9F14:B5C2 (Diskussion | Beiträge) 15:29, 23. Jan. 2015 (CET))Beantworten

Bist du sicher? Schau mal hier http://www.willemer.de/informatik/cpp/loop.htm, dort ist das Thema eigentlich recht anschaulich am Beispiel C++ erläutert. Oder was genau meinst du? Grüße --losch (Diskussion) 21:21, 23. Jan. 2015 (CET)Beantworten
Was ein Prof oder ein Buch zum Sprachgebrauch zu sagen haben, kann im Artikel erwähnt werden. Auch kann ruhig erwähnt werden, dass diese Kontrollstruktur auch "Wiederholung" genannt wird. Aber solange 99% der Programmierer zu dem Teil "Schleife" sagen, ist das nunmal die vorherrschende Bezeichnung, und damit nicht "falsch".
--arilou (Diskussion) 15:52, 28. Jan. 2015 (CET)Beantworten

Warum keine fußgesteuerten Schleifen?[Quelltext bearbeiten]

Viele Programmiersprachen (Python, Matlab, ..) haben keine fußgesteuerten Schleifen, was widerwärtige Konstuktionen mit "if () break" oder zusätzlichen Statusvariablen o.ä. im Code erzwingt. Gibt es dafür eigentlich irgendeinen vernünftigen Grund? --129.13.72.198 16:45, 17. Jun. 2015 (CEST)Beantworten

Ja, gibt es.
In den meisten Sprachen gibt es FOR- und FOR_EACH-Schleifen, WHILE ("kopfgesteuert") und DO ("fußgesteuert"). Also vier "verschiedene" Schleifentypen.
Wenn man jedoch FOR_EACH weglässt/per Precompiler zu FOR-Schleifen macht, muss die "eigentliche Sprache" nur noch drei Schleifentypen können.
Wenn man jetzt FOR-Schleifen noch (per Precompiler) zu
INIT; WHILE(DURCHLAUFBEDINGUNG){ {SCHLEIFENRUMPF} ; ZÄHLER_INCREMENT};
macht, genügen für die "eingentliche Sprache" nur noch zwei Schleifentypen. (WHILE und DO)
Wenn ich jetzt noch eine dieser beiden Varianten wegbekomme, z.B. könnte der Precompiler DO ersetzen durch
boolean FIRST_LOOP=true; WHILE(FIRST_LOOP OR (DURCHLAUFBEDINGUNG)){SCHLEIFENRUMPF;FIRST_LOOP=false;};
dann muss die "eigentliche Sprache" nur noch WHILE-Schleifen implementieren. (Das macht deren EBNF o.ä. dann einfacher.) Daraus folgt:
  • Mit WHILE-Schleifen (oder DO-Schleifen + IF) sind sämtliche anderen Schleifenformen abbildbar; die Sprache ist genauso "mächtig" wie eine, die alle 4 Formen "direkt beherrscht".
  • Wenn die eigentliche Sprache nur 1 Schleifentyp bietet (WHILE oder DO), genügt ein Precompiler, um dem Programmierer alle vier Formen bieten zu können.
--arilou (Diskussion) 09:51, 18. Jun. 2015 (CEST)Beantworten
PS: (OT) Mit ähnlichen 'Tricks' über einen Precompiler kann man die "eigentliche Sprache" auch noch weiter vereinfachen und sich noch so manches Konstrukt sparen; z.B. die letzte verbliebene Schleifenform durch IF+GOTO ersetzen oder umgekehrt IF_THEN_ELSE ersetzen durch WHILE ...
Aber wenn man im Precompiler die Schleifen durch IF+GOTO ersetzen kann, dann kann man doch die anderen Schleifen auch unproblematisch wieder definieren und vom Precompiler ebenfalls in solche umwandeln lassen? (Wenn man das will, müßte es auch möglich sein, das GOTO im vom Programmierer sichtbaren Teil per Precompiler zu verbieten und erst im vom Precompiler erzeugten Teil einzuführen?)--131.159.76.237 19:58, 19. Jan. 2018 (CET)Beantworten
Ja richtig, und darum bieten die meisten Sprachen auch alle vier Schleifenvarianten.
Frag' die Python- und Matlab-Erfinder, warum sie nicht dazu fähig waren/es nicht gemacht haben. (Bei Python kann ich's mir denken/vermuten.)
--arilou (Diskussion) 09:30, 22. Jan. 2018 (CET)Beantworten

BKL Verlinkung[Quelltext bearbeiten]

Die Verlinkung auf Laufbedingung verweist auf eine Begriffsklärungsseite. Damit der Leser nicht durch die Inhalte der BKL verwirrt wird, habe ich die zutreffende Aussage als Fußnote in den Artikel eingefügt und den Link entfernt. --Pittimann Glückauf 19:46, 12. Okt. 2015 (CEST)Beantworten

Das ist eine gute Lösung, danke!
(In selbiger Anmerkung verlink' ich dann auf Aussagenlogik, womit für den Leser der Link-Weg dorthin dann bestehen bleibt.)
--arilou (Diskussion) 09:21, 13. Okt. 2015 (CEST)Beantworten

Links[Quelltext bearbeiten]

Alle vier Links sind tot 29.06.2018

Zwei konnt' ich wieder auffinden, eines vermutlich, ein Link ist echt tot.
--arilou (Diskussion) 15:15, 29. Jun. 2018 (CEST)Beantworten

LOOP-EXIT fehlt[Quelltext bearbeiten]

Es fehlt die allgemeine Form der Schleife, die durch

LOOP
 Anweisungen1
 IF Logischer Ausdruck THEN EXIT
 Anweisungen2
END

gekennzeichnet ist. --Tomatenbrille (Diskussion) 13:41, 29. Nov. 2018 (CET)Beantworten

Nun, spitzfindig betrachtet fehlt die Endlosschleife nicht, denn sie wird sowohl in der Einleitung als auch bei 'Arten' beschrieben. Dort wo sie fehlt, steht "Beispiele" als Überschrift darüber...
Dennoch pflichte ich zu, dass die echte und die unechte Endlosschleife noch ausführlicher behandelt werden könnten.
--arilou (Diskussion) 14:55, 29. Nov. 2018 (CET)Beantworten