Dieser Code ist nicht hässlich, er ist einfach, praktisch, lesbar und leicht zu verstehen. Es wird auf seine eigene Weise isoliert, so dass sich niemand im Alltag damit auseinandersetzen muss. Und nur für den Fall, dass jemand dies überprüfen muss - möglicherweise, weil er Ihre Anwendung für ein Problem an einem anderen Ort debuggt -, ist es so einfach, dass er zwei Sekunden benötigt, um den Code und seine Funktionsweise zu verstehen.
Wenn ich ein solches Debugging durchführen würde, wäre ich froh, nicht fünf Minuten damit verbringen zu müssen, zu verstehen, was Ihre Funktion tut. In dieser Hinsicht scheitern alle anderen Funktionen vollständig, da sie eine einfache, fehlerfreie Routine zum Vergessen und Ändern in einem komplizierten Durcheinander ändern, das die Benutzer beim Debuggen gezwungen sind, gründlich zu analysieren und zu testen. Als Projektmanager würde ich mich sehr darüber aufregen, dass ein Entwickler eine einfache Aufgabe übernimmt und anstatt sie auf einfache, harmlose Weise zu implementieren, Zeit verschwendet, um sie auf eine zu komplizierte Weise zu implementieren. Denken Sie nur die ganze Zeit nach, die Sie damit verschwendet haben, darüber nachzudenken und dann zu SO zu fragen, und das alles nur, um die Wartung und Lesbarkeit der Sache zu verschlechtern.
Das heißt, es gibt einen häufigen Fehler in Ihrem Code, der ihn weniger lesbar macht, und ein paar Verbesserungen, die Sie ganz einfach vornehmen können:
int angle = this->_car.getAbsoluteAngle();
if (angle <= 30 || angle >= 330)
return Car::EDirection::RIGHT;
else if (angle <= 60)
return Car::EDirection::UP_RIGHT;
else if (angle <= 120)
return Car::EDirection::UP;
else if (angle <= 150)
return Car::EDirection::UP_LEFT;
else if (angle <= 210)
return Car::EDirection::LEFT;
else if (angle <= 240)
return Car::EDirection::DOWN_LEFT;
else if (angle <= 300)
return Car::EDirection::DOWN;
else if (angle <= 330)
return Car::EDirection::DOWN_RIGHT;
Fügen Sie dies in eine Methode ein, weisen Sie dem Objekt den zurückgegebenen Wert zu, reduzieren Sie die Methode und vergessen Sie ihn für den Rest der Ewigkeit.
PS: Es gibt einen weiteren Fehler über der Schwelle von 330, aber ich weiß nicht, wie Sie ihn behandeln möchten, deshalb habe ich ihn überhaupt nicht behoben.
Späteres Update
Laut Kommentar können Sie sogar das andere loswerden, wenn überhaupt:
int angle = this->_car.getAbsoluteAngle();
if (angle <= 30 || angle >= 330)
return Car::EDirection::RIGHT;
if (angle <= 60)
return Car::EDirection::UP_RIGHT;
if (angle <= 120)
return Car::EDirection::UP;
if (angle <= 150)
return Car::EDirection::UP_LEFT;
if (angle <= 210)
return Car::EDirection::LEFT;
if (angle <= 240)
return Car::EDirection::DOWN_LEFT;
if (angle <= 300)
return Car::EDirection::DOWN;
if (angle <= 330)
return Car::EDirection::DOWN_RIGHT;
Ich habe es nicht getan, weil ich das Gefühl habe, dass ein bestimmter Punkt nur eine Frage der eigenen Vorlieben ist, und der Umfang meiner Antwort war (und ist), Ihrer Besorgnis über "Hässlichkeit des Codes" eine andere Perspektive zu geben. Wie gesagt, jemand hat in den Kommentaren darauf hingewiesen, und ich denke, es ist sinnvoll, es zu zeigen.
this->_car.getAbsoluteAngle()
einmal vor der ganzen Kaskade ficken .