Open StefanUniBonn opened 1 year ago
Ach ja, was ich gerade vergessen hatte: Ich würde empfehlen, else
und else if
an geeigneten Stellen zu verwenden. Bei
bool checked = false;
if (belegung[pos] == 0){
//std::cout << "b" << std::endl;
belegung [pos] = 1;
checked = true;
}
if (belegung[pos] == 1 & checked == false){
//std::cout << "c" << std::endl;
belegung = next(belegung, pos);
}
Kann man die Variable checked
z.B. komplett weglassen, wenn man das zweite if
durch ein else
oder ein else if
ersetzt (je nachdem, ob du davon ausgehst, dass belegung[pos]
sowieso 0
oder 1
ist, oder ob du das nochmal explizit überprüfen möchtest)
Hier geht es nicht um performance sondern um so Dinge wie lesbarkeit und Anfälligkeit für bugs.
bools solltest du nicht
b == 0
verneinen sondern entweder mitnot b
oder mit!b
.Noch wichtiger: Schreibe nicht
b1 & b2
. Das ist ein bitwises und! Verwendeb1 and b2
oderb1 && b2
.Ich würde auskommentierten code vermeiden. Seit c++17 gibt es compile time expression, mit denen man das sehr gut Ersetzen kann. Beispiel:
Durch das
constexpr
wird das ganze if schon zur kompilierzeit weggeworfen. Dann kann man gegebenfalls mehrere outputs an/ausschalten, indem man eine einzelne Variable ändert.Code dokumentieren ist kein Selbstzweck. Du solltest Code so verständlich wie möglich schreiben. Dafür ist es hilfreich, möglichst passende Namen zu wählen, und falls nötig durch Kommentare zu ergänzen.
wird nie jemanden helfen, der den Code liest. Algemein ist es gut, Namen auszuschreiben. next_improved ist immer noch ein blöder Name, aber hätte mir schon mal deutlich mehr geholfen als nextimp.
Manche Stellen kann man auch einfacher formulieren. z.B. in
Clause::verify
würde ich die Variablecorrect
einfach weglassen. Du kannst die beidencorrect = true
einfach jeweils durchreturn true
ersetzen und dasreturn correct
am Ende dann durchreturn false
.