Pippen123 schrieb:
Brauche ich weniger, dann freue ich mich und sehe mich sogar als besser als der Löser, brauche ich mehr, dann habe ich einen Fehler gemacht.
Du solltest danach gehen, welche Lösung Dir verständlicher, lesbarer, „elaganter“ vorkommt. Im Laufe der Zeit bekommt man als Programmierer ein Gespür für „guten“ vs. schlechten Code, besonders wenn man sich auch Code anderer Leute anschaut. Die Tücke ist, dass die eben genannten Kriterien sich manchmal widersprechen. So ist die beste Lösung nicht automatisch die, die am intuitivsten zu verstehen ist. Beispiel:
Du hast irgendwo ein if statement wo
„if not a and not b then…“ steht. Gemäß den de-morganschen Regeln ist das identisch mit „if not (a or b)“. Letzteres ist kompakter und „eleganter“, für einen Anfänger ist aber die erste Variante unter Umständen leichter zu verstehen.
Letztendlich ist das aber auch von der Zielgruppe abhängig. Leute mit fundiertem Wissen in theoretischer Informatik finden Dinge elagant und gut lesbar, die für jemanden der als Quereinsteiger zur Programmierung gekommen ist, nur unverständliches Kauderwelsch sind.
Pippen123 schrieb:
Mein naiver Hingergedanke ist: jeder Befehl kostet Zeit und Ressourcen, d.h. je weniger desto besser.
Teilweise ist das richtig, aber wenn man einen hochoptimierenden Compiler hat, kann es sein, das er den „umständlicheren“ Code selber optimiert. Es gibt natürlich simple, nicht optimierende Interpreter (z.B. bei manchen Scriptsprachen) wo selbst ein konstanter Ausdruck wie „5+3“ „wörtlich“ in Code umgesetzt wird. Im Falle Swift kannst du getrost von einem optimierenden Compiler ausgehen. Ich selber schreibe, der Lesbarkeit wegen, z.B. in C/C++ gelegentlich bewusst den „ausführlicheren“ Code hin, weil ich weiß, das der Compiler es eh optimiert.
Also z.B. if (p!=NULL) anstatt if (p).
In der Praxis ist nur ein kleiner Teil des Programmcodes für die Laufzeit des Programms verantwortlich. Üblicherweise sind das die sogenannten „Leaf Functions“ , d.h. die Funktionen ganz unten in der Aufrufhierarchie, die keine anderen Funktionen mehr aufrufen. Hier kann es Sinn machen, diese bis zum letzten Taktzyklus zu optimieren, ggf. auch auf Kosten der Lesbarkeit.
BeBur schrieb:
Das simpelste was man falsch machen kann ist, kurze Variablennamen zu vergeben.
Ja, aber auch hier sollte man mit Bedacht vorgehen.
Beispiel: Es ist seit seeligen Fortran Zeiten üblich Laufvariablen von for Schleifen i oder k zu nennen. Zumindest bei eher kurzen Schleifen finde ich dann lange, sprechende Namen wie „ArrayIndex“ unnötig, im Gegenteil, der Code wird oft sogar schwerer lesbar, weil in Summe länger.