Jeder, wie er will. "Meine Katze mag die Mäuse roh, ich mag sie nicht mal gekocht."
Gerade gefunden: Beitrag "Re: for(;;) bedeutung?" > Genau da haben wir das Problem mit dem redundanten Code sogar > noch in verschärfter Form. Natürlich kann man diese Schleife
1 | > for(;;) { |
2 | > // Codeabschnitt A |
3 | > |
4 | > if(bedingung) |
5 | > break; |
6 | > |
7 | > // Codeabschnitt B |
8 | > } |
> so umstellen, dass die Abbruchbedingung am Anfang der Schleife steht:
1 | > // Codeabschnitt A |
2 | > |
3 | > while(!bedingung) { |
4 | > // Codeabschnitt B |
5 | > |
6 | > // Codeabschnitt A |
7 | > } |
> Jetzt steht aber der Codeabschnitt A zweimal da.
Die Lösung mit Schleife mit Hineinsprung sähe so aus:
1 | *L.JP |
2 | |
3 | // Codeabschnitt B |
4 | |
5 | *HERE |
6 | |
7 | // Codeabschnitt A |
8 | |
9 | *RP.not(bedingung) |
Was ist besser?
Josef G. schrieb: > Was ist besser? Der C-Code, denn er ist lesbar und ein einziger Befehl macht den Kohl nicht fett...
1 | while( ( A ), bedingung ) |
2 | {
|
3 | B; |
4 | }
|
Klaus W. schrieb:
1 | > while( ( A ), bedingung ) |
2 | > { |
3 | > B; |
4 | > } |
Sieht halt merkwürdig aus, wenn A sehr umfangreich ist. Beitrag "Re: Gibt es eine Programmiersprache mit diesem Schleifentyp?" In meiner Lösung erscheinen A und B gleichrangig, so wie sie es tatsächlich auch sind.
Bei deiner Variante sieht es merkwürdig aus, egal ob A kurz oder lang ist ehrlich gesagt. (Abgesehen davon, daß man je nach Anwendung A gleich so formulieren kann, daß es Erfolg oder Mißerfolg als Rückgabewert meldet, und dann gleich als Bedingung nimmt. zumindest, wenn wenn man Funktionen hat :-)) Aber Geschmackssache!
Das sind alles Nebelkerzen. Die relevante Frage lautet: Warum hat C kein DO-UNTIL (oder "mitten in die Schleife springen")? Oder: Warum beschränkt man sich beim Beschreiben boolescher Funktionen nicht auf nand und nor (immerhin vollständiges System)? Oder: Warum verwenden wir nur 26 Buchstaben und Worte mit so vielen Buchstaben, wären 5000 verschiedene Zeichen nicht effizienter? Oder: Warum setzt sich durch, was am einfachsten erlernbar, kommunizierbar und wiedererkennbar ist? Oder: Warum wählt man von 2 Varianten nicht ohne irgend einen Vorteil freiwillig die umständlichere Variante? a. for (;;) b. *L.JP [...] *HERE [...] *RP.not(bedingung) c. nur ein kyrillisches Zeichen und die 2 Sprungmarken, um das alles zu beschreiben (Man braucht die Bedeutung dieses kyrillischen Zeichens schließlich nur einmal lernen, dann ist es intuitiv benutzbar!) Was ist besser?
Lars R. schrieb: > Oder: Warum verwenden wir nur 26 Buchstaben Nun, zumindest hier gibt es real existierende und schon sehr lange praktizierte Gegenentwürfe. Ob "unser" Verfahren "besser" ist? Es ist primär anders. Und vermutlich wirklich leichter zu erlernen, was aber die den Gegenentwurf nutzenden nicht davon abbringt, ihr System beizubehalten.
Rufus Τ. F. schrieb: > Lars R. schrieb: >> Oder: Warum verwenden wir nur 26 Buchstaben > > Nun, zumindest hier gibt es real existierende und schon /sehr lange/ > praktizierte Gegenentwürfe. Ob "unser" Verfahren "besser" ist? Es ist > primär anders. Und vermutlich wirklich leichter zu erlernen, > was aber > die den Gegenentwurf nutzenden nicht davon abbringt, ihr System > beizubehalten. Im Laufe der Jahrhunderte und in Gegenwart von Alternativen scheinbar doch. Auch viele chinesische Zeichen werden im Alltag nicht verwendet.
Lars R. schrieb: > c. nur ein kyrillisches Zeichen und die 2 Sprungmarken Hat hier einer „APL“ gerufen? :-)
Lars R. schrieb: > Warum hat C kein DO-UNTIL Hat es doch, in Gestalt der do-while-Schleife, wenn auch mit negierter Angabe der Bedingung. > (oder "mitten in die Schleife springen")? Die Formulierung soll offenbar die Schleife mit Hineinsprung als abstruse Idee erscheinen lassen. In Wahrheit ist diese Schleife aber genau jene Struktur, durch welche while-Schleifen tatsächlich im compilierten Code meistens realisiert werden.
Josef G. schrieb: > Lars R. schrieb: >> Warum hat C kein DO-UNTIL > > Hat es doch, in Gestalt der do-while-Schleife, > wenn auch mit negierter Angabe der Bedingung. > > >> (oder "mitten in die Schleife springen")? > > Die Formulierung soll offenbar die /Schleife mit Hineinsprung/ > als abstruse Idee erscheinen lassen. In Wahrheit ist diese Schleife > aber genau jene Struktur, durch welche while-Schleifen tatsächlich > im compilierten Code meistens realisiert werden. Ich stimme Dir zu, dass meine Fragen provokativ formuliert waren und Du brauchst darauf nicht antworten. Dort wo Du es aber dennoch tust, weichst Du jeweils der Frage aus. Die Fragen waren: Warum hat C kein DO-UNTIL und warum hat C nicht die Schleife mit Hineinsprung? Die Fragen hatte ich formuliert als Antwort auf Deine Kritik des C-Konstruktes for(;;). Du hattest Deine Konstrukte schließlich mit der for- bzw. while-Schleife verglichen und impliziert, dass Deine Variante effizienter sei. Und ich habe gefragt, warum C wohl ein solches Konstrukt dennoch nicht hat. Darauf nimmst Du einfach keinen Bezug, sondern kommst mit etwas anderem. Edit: Ok, zu Deiner ersten Antwort war meine Frage vielleicht zu ungenau: Warum hat C nicht zusätzlich das DO-UNTIL? Damit ließe sich doch viel effizienterer Code erstellen.
:
Bearbeitet durch User
Josef G. schrieb: > Lars R. schrieb: >> warum C wohl ein solches Konstrukt dennoch nicht hat. > > Das weiss ich nicht. Meiner Ansicht nach wäre es hilfreich, wenn Du einen C-Experten suchst, dessen Antworten Du akzeptierst und ihn dazu befragst.
Lars R. schrieb: > Warum hat C nicht zusätzlich das DO-UNTIL? Aus dem selben Grund aus dem C auch kein ifnot(), kein whilenot() und auch Pascal kein repeat-while hat: weil es redundant und überflüssig wäre, denn es gibt bereits den separaten not operator !, damit kann man es sich so kombinieren wie man es braucht.
:
Bearbeitet durch User
Bernd K. schrieb: > Aus dem selben Grund aus dem C auch kein ifnot() Perl kennt ein "unless". ;-) Macht sich manchmal gut für die Lesbarkeit, weil man in Perl die Bedingung auch hintenan stellen kann.
1 | save_file() unless $readonly; |
Aber ich zweifle, dass die Bome-CPU jemals Perl sehen wird …
@ Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
>Aber ich zweifle, dass die Bome-CPU jemals Perl sehen wird …
Das wäre ja PERLen vor die Säue ;-)
Jörg W. schrieb: > Aber ich zweifle, dass die Bome-CPU jemals Perl sehen wird … Das ist nun in jeder Hinsicht kein Verlust... Ruby kennt die hinten angestellte Bedingung incl. unless auch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.