Codevereinfachung

Hallo,

kann man das einfacher schreiben und falls ja, wie?

void increment()
{
  zaehler++;
  if (zaehler == 5) zaehler = 0;
}

Gruß Chris

Inwiefern einfacher? Zum verstehen einfacher? Oder nen kürzeren "einfacheren" Code? Falls du letzteres meinst: Geht, glaub ich, nicht einfacher.

LG

Fipsi

Ja, ich meine Letzteres. :-*

Gruß Chris

Man könnte auch

void increment()
{zaehler=(zaehler+1)%5;}

bin mir nicht sicher (noch kürzer)

void increment()
{++zaehler%=5;}

oder

void increment()
{if (++zaehler == 5) zaehler = 0;
}

schreiben

Alle drei Varianten funktionieren. Habs eben getestet.

Vielen Dank!

Gruß Chris

Edit: So geht's auch (ähnlich wie Deine erste Variante):

void increment()
{
  zaehler=++zaehler%5;
}

Bevorzugen würde ich die Schreibweise 2 von Theseus

if (++i >= 5) i = 0;

Alternativ
++i%=5;

Jetzt frag ich mal recht doof:
Seid ihr einfach nur schreibfaul, oder sind eure Programme so groß, dass es auf jedes Zeichen ankommt…?

LG

Fipsi

Mehrere tausend Zeilen sind kein Problem voll zu bekommen. Anweisung, die in einer Codezeile untergebracht werden, sind einfacher zu lesen als eine Anweisungen über mehrere Zeilen.

Meine Matheprofessor sagte immer, das Mathematiker faul sind. Trifft also zu. Warum 3 Zeilen schreiben wenn das ganze auch mit 7 Zeichen zu erledigen ist?

Weil ein "normal sterblicher" wie ich

das versteht: if (++i >= 5) i = 0;

da aber nicht ++i%=5;

Die erste Zeile ist bei wenig Kenntnissen selbst erklärend, die letzte nicht.

Das muss ich aber anfechten! :-\

Auch normal sterbliche sollten in der Lage sein, sich ein Buch für die Programmiersprache C (optional C++) anzueignen. Viele Bücher (zB. C von A bis Z aus dem Galileoverlag) sind aufbauend. Das heißt, es ist nicht nur ein Nachschlagewerk, sondern tastet sich Schritt für Schritt an die Programmiersprache an.

Nur wer nie sich ein Buch besorgt, wird da Probleme bekommen. Reines Nachschlagen mit Hilfe von Google ist nicht optimal. Sowas wie i%=5 ist nichts anderes als eine Kurzschreibweise (andere Beispiele i+=2 (bei jeder Ausführung erhöht sich der Wert von i um 2).

Modulo-Division sollte man schon verstehen. Das ist nicht etwas was man ständig braucht, aber es gibt mehrere Standard Probleme wo das vorkommt.

Man muss aber auch nicht Code Golf spielen. Das geht auch:

i = (i + 1) % 5;

Ich finde auch, dass man ++i%=5; verstehen können sollte.

Ich würde allerdings dieses bevorzugen:

i++;
i %= 5;

Das teilt das “komplizierte” Statement auf.
Ist also etwas leichter zu lesen. (für mich)
Der Compiler wird wohl (fast) das gleiche draus machen.

Und ich empfinde es als ganz schlechten Stil, wenn links vom Gleichheitszeichen was getan wird.
:slight_smile: Das widerspricht dem Prinzip der geringsten Verwunderung. :wink:

Fipsi:
Seid ihr einfach nur schreibfaul.. ..?

Ja. Warum mehr schreiben als nötig, so lange es lesbar bleibt?

So wenig Code wie möglich, so viel wie nötig (immer unter der Prämisse Lesbarkeit).

Gruß Chris

Lesbar so doch alle eingereichten Beiträge sein. Es ist halt immer nutzerabängig.welche Formel Sin macht und welche ggf. oversized ist.

Auf einem Arduino würde ich nie

i %= 5

schreiben wenn ich

if (i >= 5) { i = 0; }

meine. Grund: die AVRs haben keine Hardwaredivision eingebaut. Ich würde eher sowas schreiben:

i = i<5 ? i+1 : 0;