Kontrollstruktur unless?
-
Vevusio schrieb:
wo wäre dann der unterschied zwischen
while(couter < MAX) { counter++; } until(counter < MAX) { counter++; }Die until Variante läuft, bis die Bedingung erreicht wird (bis counter < MAX), also in Deinem Beispiel wird die Schleife gar nicht durchlaufen, sofern die Initialwert < MAX war.
Die while-Variante läuft, solange die Bedingung erfüllt ist, terminiert also erst, wenn counter >= MAX wird.PS:
Makros zu erstellen um Befehle einer Programmiersprache umzubiegen ist das allerletzte. Die Syntax einer Programmiersprache ist begrenzt und im Falle von C/C++ standardisiert, und das aus gutem Grund.
Redundante Befehle einzuführen, die sich einem mit der Sprache vertrauten Programmierer nicht erschließen ist absolut der falsche Weg. Und wer mit der Sprache nicht vertraut ist, wird es auch mit Pseudo-Konstrukten schwer haben. Das einzige, was man damit erreicht, ist, dass der Code für beide Seiten unverständlich wird.
Es gibt eine Regel:
So komplex wie nötig aber so einfach wie möglich.
Und das bedeutet: Keine redundanten Befehle, schon gar nicht, wenn sie über Makros in die Sprache reingefrickelt werden müssen. C++ Programme sind aus Unkenntnis oder Dummheit vieler Programmierer eh schon schlimm genug (es gibt viele, die meinen, etwas C in Klassen gefüllt wäre gutes C++).
Mal ganz davon abgesehen, dass die Makroexpansion bei allen Dingen die Seiteneffekte haben, katastrophale Folgen haben kann.
Und ja, ich rege mich auf und steigere mich rein. Solche Ergüsse sind ja wohl das Letzte. Wer meint, eine Programmiersprache mit den "guten eigenen Befehlen" erweitern zu müssen, der sollte es lieber sein lassen, also das Programmieren, meine ich.
Wer bestimmt Konstrukte, die eine Sprache nicht bietet, benötigt, der sollte sich nach einer anderen Sprache umsehen, wo diese Konstrukte zur Verfügung gestellt werden. Ada oder Pascal vielleicht.
-
Vevusio schrieb:
natürlich heißt wort wörtlich until übersetzt "bis" und while "solange", ich hab nicht gesagt es ist dasselbe wort sondern es sind logische synonyme
Wenn Du der Meinung bist, dann machst Du sicher bei folgendem Spiel mit:
Du überweist mir jeden Monat 100 EUR, solange ich lebe. Ich überweise Dir auch jeden Monat 100 EUR, bis Du lebst.
-
Vevusio schrieb:
selbst so ein super einfacher ausdruck wie !highGravity bekommt gleich viel mehr information und verständlichkeit draufgepackt wenn man ihn für etwas konkretes benutzt (kann der charakter springen?) und dabei über einen extra boolean abstrahiert
*zustimm*
Aber generell hat doch niemand gesagt, dass er "until" oder "unless" ernsthaft benutzen will, oder? Und empfohlen wurde es imho auch nicht, ich verstehe die Aufregung darum nicht..
-
Badestrand schrieb:
Aber generell hat doch niemand gesagt, dass er "until" oder "unless" ernsthaft benutzen will, oder? Und empfohlen wurde es imho auch nicht, ich verstehe die Aufregung darum nicht..
Der einzige Grund warum man
unlessnicht uneingeschränkt empfehlen kann ist, dass C/C++'s Makrosystem so für die Tonne ist das manunlessnicht implementieren kann:<condition> := break_it(with, commas)Leute die mit
unlessnicht klar kommen oder kategorisch gegen jeden Einsatz von Makros sind, sollten sich mal fragen wer hier zu dumm für irgendetwas ist...
-
'f schrieb:
Badestrand schrieb:
Aber generell hat doch niemand gesagt, dass er "until" oder "unless" ernsthaft benutzen will, oder? Und empfohlen wurde es imho auch nicht, ich verstehe die Aufregung darum nicht..
Der einzige Grund warum man
unlessnicht uneingeschränkt empfehlen kann ist, dass C/C++'s Makrosystem so für die Tonne ist das manunlessnicht implementieren kann:<condition> := break_it(with, commas)Leute die mit
unlessnicht klar kommen oder kategorisch gegen jeden Einsatz von Makros sind, sollten sich mal fragen wer hier zu dumm für irgendetwas ist...Es gibt genügend Gründe dafür, dass in Sprachen, in denen es um hohe Betriebssicherheit der Software geht, komplett auf einen Präprozessor verzichtet wird. Ada ist hier wohl das beste Beispiel. Und in C++ wurden Templates und inline Funktionen bestimmt auch nur so aus Spaß eingeführt.
Man man man, wenn ihr Euch eine eigene Programmiersprache bauen wollt, dann macht das von Grund auf, aber missbraucht nicht den C-Präprozessor dafür.
-
Tachyon schrieb:
Es gibt genügend Gründe dafür, dass ist Sprachen, in denen es um hohe Betriebssicherheit der Software geht, komplett auf einen Präprozessor verzichtet wird.
Haha, hast du gerade C++ mit hoher Betriebssicherheit in Verbindung gebracht?

Tachyon schrieb:
Und in C++ wurden Templates und inline Funktionen bestimmt auch nur so aus Spaß eingeführt.
Templates und inline Funktionen decken alle Einsatzmöglichkeiten von Makros ab?
Tachyon schrieb:
Man man man, wenn ihr Euch eine eigene Programmiersprache bauen wollt, dann macht das von Grund auf, aber missbraucht nicht den C-Präprozessor dafür.
Inwieweit unterscheidet sich
unlessdenn von selber definierten Funktionen, Typen, etc.?Btw, was wäre denn deiner Meinung nach kein Missbrauch des CPP?
-
'f schrieb:
Btw, was wäre denn deiner Meinung nach kein Missbrauch des CPP?
selber definierte Funktionen, Typen, etc. Denn diese sind Sprachmittel und keine Präprozessor-Makros.
-
Ich weiss nicht, obs schon gesagt wurde:
Benutz so ein Konstrukt nicht um dir "deine" Programmiersprache zu basteln...Das ganze extrem wird unleserlich.
Und den ganzen Makro Kram auch nur verwenden, wenn es nicht anders geht.
-
'f schrieb:
Tachyon schrieb:
Es gibt genügend Gründe dafür, dass ist Sprachen, in denen es um hohe Betriebssicherheit der Software geht, komplett auf einen Präprozessor verzichtet wird.
Haha, hast du gerade C++ mit hoher Betriebssicherheit in Verbindung gebracht?

Ich sagte, solche Sprachen verzeichten komplett auf einen Präprozessor und führte Ada an. Verzichtet C++ auf einen Präprozessor? Ich denke nicht. Lesen hilft verstehen.
'f schrieb:
Tachyon schrieb:
Und in C++ wurden Templates und inline Funktionen bestimmt auch nur so aus Spaß eingeführt.
Templates und inline Funktionen decken alle Einsatzmöglichkeiten von Makros ab?
Unter C++ leider nicht, da z.B. Interfaces nicht über einen entsprechenden Mechanismus eingefügt werden, sondern durch textuelle Ersetzung (#include).
Es ging aber auch nicht um alle Einsatzmöglichkeiten, sondern um das völlig überflüssige definieren von redundanten pseudo Schlüsselwörtern.'f schrieb:
Tachyon schrieb:
Man man man, wenn ihr Euch eine eigene Programmiersprache bauen wollt, dann macht das von Grund auf, aber missbraucht nicht den C-Präprozessor dafür.
Inwieweit unterscheidet sich
unlessdenn von selber definierten Funktionen, Typen, etc.?Btw, was wäre denn deiner Meinung nach kein Missbrauch des CPP?
Dir ist offensichtlich nichtmal der Unterschied zwischen Daten, Funktionen und Kontrollstrukturen bewusst.
Unless wäre eine selbst definierte Kontrollstruktur, die mit textueller Ersetzung etwas nachbildet, dass sich ohne weiteres auch mit if direkt im Code, verständlich für jeden der die Sprache kennt, implementieren lässt.
Man kann hier natürlich gerne als unregistrierter Unwissender auf irgendwelchen Leuten rumbashen, aber vielleicht solltest Du mal ein paar Bücher z.B. von Bjarne Stroustrup oder Scott Meyers lesen, bevor Du hier mit Deiner grandiosen Unwissenheit glänzt. Das Nachbilden von Kontrollstrukturen kommt in der Regel von irgendwelchen Leuten, die von einer anderen Programmiersprache her kommen, und meinen ein bestimmtes Schlüsselwort (aus der alten Sprache) wäre unbedingt erforderlich (in der Regel um irgendwelchen Code 1:1 portieren zu können) anstatt sich mit der Sprache auseinanderzusetzen und etwas vernünftiges zu generieren. Solche Leute sind leider hoffnungslose Anachronisten.
-
'f schrieb:
Haha, hast du gerade C++ mit hoher Betriebssicherheit in Verbindung gebracht?

Sauber geschriebener C++ Code hat auch eine hohe Betriebssicherheit. Und schlecht geschriebene Software mag von der ein oder anderen Sprache etwas abgefangen werden, wenn ich mir aber z.B. die Abstürze diverser Anwendungen ansehe hat Betriebssicherheit nichts, aber auch garnichts mit der Sprache zu tun (ob nun C++, VB, C#, Java, ...).
Ich hoffe dir ist überhaupt bewusst wieviel Software in C++ geschrieben wurden ist (und wie alltäglich man mit dieser in Einsatz kommt).
'f schrieb:
Templates und inline Funktionen decken alle Einsatzmöglichkeiten von Makros ab?
Nein, aber fast alle sinnvollen.
'f schrieb:
Inwieweit unterscheidet sich
unlessdenn von selber definierten Funktionen, Typen, etc.?Ich würde sagen es macht grundsätzlich keinen Sinn in einer Sprache weitere Befehle mit Makros nachzubauen, da man den Code schlechter lesbar macht. Manche mögen "unless" als sinnvoll erachten, ich halte es eher für "useless", da man effektiv wie bei der Ungarischen Notation eine neue Sprache lernen muss.
Und der Vergleich mit Funktionen, eigenen Typen und Makros ist hinfällig: Makros sind kein direktes Sprachmittel und werden nicht so unterstützt wie ersteres. Mit eigenen Funktionen und eigenen Typen schafft man nicht noch nette Nebeneffekte wie das gerne von mir angeführte max-Makro (z.B. in windows.h) wenn man nichttriviale und auswertbare ausdrücke diesem Makro übergibt.
'f schrieb:
Btw, was wäre denn deiner Meinung nach kein Missbrauch des CPP?
Verwendung der C++ Sprachmittel, Vermeidung des Präprozessor wo er nicht (wie bei Include) unbedingt notwendig ist.
cu André
P.S: @Tachyon war keine Absicht
-
asc schrieb:
Tachyon schrieb
Puh, ich habe das nicht geschrieben. Bitte ändern.
-
Tachyon schrieb:
Ich sagte, solche Sprachen verzeichten komplett auf einen Präprozessor und führte Ada an. Verzichtet C++ auf einen Präprozessor? Ich denke nicht. Lesen hilft verstehen.
Dann solltest du vielleicht mal die Relevanz deines Einschubs erklären. Oder willst du auch Pointer, Arrays, praktisch alles was sich in C++ finden lässt verbieten weil man damit Schindluder treiben kann?
Tachyon schrieb:
Unter C++ leider nicht, da z.B. Interfaces nicht über einen entsprechenden Mechanismus eingefügt werden, sondern durch textuelle Ersetzung (#include).
Tja, dann muss man wohl auf solche Hacks verzichten und einfach alles in eine Quellcodedatei packen, hm?

Tachyon schrieb:
Es ging aber auch nicht um alle Einsatzmöglichkeiten, sondern um das völlig überflüssige definieren von redundanten pseudo Schlüsselwörtern.
Es ging auch um Makros allgemein. Und was meinst du denn mit "redundanten pseudo Schlüsselwörtern"?
Wenn du meinst dass
unlessredundant ist, sollten wir dann nichtwhile[c] und [c]do ... whilemeiden und uns komplett aufforkonzentrieren? Oder besser noch alles mitifundgotoregeln?Tachyon schrieb:
Dir ist offensichtlich nichtmal der Unterschied zwischen Daten, Funktionen und Kontrollstrukturen bewusst.
Wer im Glashaus sitzt, sollte Typen nicht mit Daten gleichsetzen.
Tachyon schrieb:
Unless wäre eine selbst definierte Kontrollstruktur, die mit textueller Ersetzung etwas nachbildet, dass sich ohne weiteres auch mit if direkt im Code, verständlich für jeden der die Sprache kennt, implementieren lässt.
Selbst definierte Datentypen, Funktionen, Templates, etc., lassen sich auch direkt im Code, verständlich für jeden der die Sprache kennt, implementieren. Und nun?
Tachyon schrieb:
Man kann hier natürlich gerne als unregistrierter Unwissender auf irgendwelchen Leuten rumbashen, aber vielleicht solltest Du mal ein paar Bücher z.B. von Bjarne Stroustrup oder Scott Meyers lesen, bevor Du hier mit Deiner grandiosen Unwissenheit glänzt. Das Nachbilden von Kontrollstrukturen kommt in der Regel von irgendwelchen Leuten, die von einer anderen Programmiersprache her kommen, und meinen ein bestimmtes Schlüsselwort (aus der alten Sprache) wäre unbedingt erforderlich (in der Regel um irgendwelchen Code 1:1 portieren zu können) anstatt sich mit der Sprache auseinanderzusetzen und etwas vernünftiges zu generieren. Solche Leute sind leider hoffnungslose Anachronisten.
Ich kann mich auch gerne einloggen wenn dich das glücklich macht

Deine Theorie ist im übrigen komplett falsch, allerdings, genau wie der Umstand dass du mir Unwissenheit vorwirfst, scheinbar allein weil du anderer Meinung bist, Zeugnis deiner beschränkten Vorstellungskraft und Verbohrtheit.
-
Gut, dass Du mit Deinen Meinungen hier alleine bist.
Ich hoffe übrigens, dass, falls Du überhaupt schon alt genug bist um zu Arbeiten, Dein Code Dir vor irgendwelchen Reviews oder Code Quality Checks um die Ohren fliegt. Sonst bist Du schneller wieder draußen als Dir lieb ist (oder die Firma ist ihren Namen nicht Wert).
Und noch eine ganz unbedarfte Frage hinterher:
Was meinst Du, soll jemand der Deinen Code liest denken was hier passiert?
unless(boolscher_wert) { //zeugs }Rufst Du eine Funktion auf die einen boolschen Wert als Argument erwartet und öffnest anschließend einen neuen Scope? Oder ist es doch ein Makro? Und wann ja, was tut das Makro? Oh, da muss man erstmal nachsehen.
Ist natürlich viel einleuchtender alsif(!boolscher_wert) { //zeugs }wo sofort jedem ohne rumsuchen klar wird, dass hier etwas passieren soll, wenn der boolsche Ausdruck falsch ist.
}
-
'f schrieb:
Dann solltest du vielleicht mal die Relevanz deines Einschubs erklären. Oder willst du auch Pointer, Arrays, praktisch alles was sich in C++ finden lässt verbieten weil man damit Schindluder treiben kann
?
Es geht hier gerade ausschließlich um den Präprozessor. Kennst Du überhaupt den Unterschied zwischen Präprozessor und Compiler?
-
asc schrieb:
Sauber geschriebener C++ Code hat auch eine hohe Betriebssicherheit.
Ja, durchaus. Allerdings nicht einmal annähernd so sicher wie viele andere Sprachen, inklusive und insbesondere Ada.
Und die Verwendung von Makros ist in C++ nicht prinzipiell unsicher, genauso wenig wie eigene Kontrollstrukturen (in Sprachen welche vernünftige Möglichkeiten dazu bieten).
asc schrieb:
'f schrieb:
Templates und inline Funktionen decken alle Einsatzmöglichkeiten von Makros ab?
Nein, aber fast alle sinnvollen.
asc schrieb:
Ich würde sagen es macht grundsätzlich keinen Sinn in einer Sprache weitere Befehle mit Makros nachzubauen, da man den Code schlechter lesbar macht. Manche mögen "unless" als sinnvoll erachten, ich halte es eher für "useless", da man effektiv wie bei der Ungarischen Notation eine neue Sprache lernen muss.
Und der Vergleich mit Funktionen, eigenen Typen und Makros ist hinfällig:
Nein, er ist keineswegs hinfällig: "Manche mögen Bibliotheken dritter als sinnvoll erachten, ich halte es eher für 'useless', da man effektiv wie bei der Ungarischen Notation eine neue Sprache lernen muss."
asc schrieb:
'f schrieb:
Btw, was wäre denn deiner Meinung nach kein Missbrauch des CPP?
Verwendung der C++ Sprachmittel, Vermeidung des Präprozessor wo er nicht (wie bei Include) unbedingt notwendig ist.
CPP = C preprocessor
-
Tachyon schrieb:
Gut, dass Du mit Deinen Meinungen hier alleine bist.
Ich hoffe übrigens, dass, falls Du überhaupt schon alt genug bist um zu Arbeiten, Dein Code Dir vor irgendwelchen Reviews oder Code Quality Checks um die Ohren fliegt. Sonst bist Du schneller wieder draußen als Dir lieb ist (oder die Firma ist ihren Namen nicht Wert).
Ein Haufen Fehlschlüsse gepaart mit Beleidigungen ersetzen noch lange kein Argument.
-
LordJaxom schrieb:
'f schrieb:
Dann solltest du vielleicht mal die Relevanz deines Einschubs erklären. Oder willst du auch Pointer, Arrays, praktisch alles was sich in C++ finden lässt verbieten weil man damit Schindluder treiben kann
?
Es geht hier gerade ausschließlich um den Präprozessor. Kennst Du überhaupt den Unterschied zwischen Präprozessor und Compiler?Uh. Was soll mir denn dieser schwachsinnige und offensichtlich falsche Kommentar näher bringen?
-
'f schrieb:
Ja, durchaus. Allerdings nicht einmal annähernd so sicher wie viele andere Sprachen, inklusive und insbesondere Ada.
Aussage, kein Argument.
'f schrieb:
Und die Verwendung von Makros ist in C++ nicht prinzipiell unsicher, genauso wenig wie eigene Kontrollstrukturen (in Sprachen welche vernünftige Möglichkeiten dazu bieten).
Aussage, kein Argument.
'f schrieb:
Nein, er ist keineswegs hinfällig: "Manche mögen Bibliotheken dritter als sinnvoll erachten, ich halte es eher für 'useless', da man effektiv wie bei der Ungarischen Notation eine neue Sprache lernen muss."
Noch eine Aussage ohne Argumente.
'f schrieb:
Ein Haufen Fehlschlüsse gepaart mit Beleidigungen ersetzen noch lange kein Argument.
Eine ulkige Aussage im Hinblick darauf, dass Du in Deinen gesamten Ergüssen hier NUR Aussagen triffst ohne jemals Argumente dazu zu liefern.
-
'f schrieb:
Allerdings nicht einmal annähernd so sicher wie viele andere Sprachen, inklusive und insbesondere Ada.
Ist nicht eine Ariane-Rakete durch einen Softwarefehler in Ada abgestürzt?
-
Badestrand schrieb:
'f schrieb:
Allerdings nicht einmal annähernd so sicher wie viele andere Sprachen, inklusive und insbesondere Ada.
Ist nicht eine Ariane-Rakete durch einen Softwarefehler in Ada abgestürzt?
Da haben die Entwickler die Contraint- und Type-Checks des Compilers abgeschaltet. Dazu kam noch ein Haufen weiterer Fehler:
http://www.wikiservice.at/dse/wiki.cgi?Ariane5Absturz