Das sieht doch soweit ganz gut aus. Ob der Code jetzt optimierter ist oder nicht ist relativ. An sich ist es erst mal wichtig dass er verständlich ist. Du könntest den Part theoretisch in eine Funktion auslagern. Dadurch würde das ganze vielleicht noch etwas leserlicher. Ansonsten optimieren Compiler eigentlich schon ganz gut für dich.
Spaßeshalber könnte man mal sehen was passiert wenn man ohne Optimierung übersetzt:
|
C-/C++-Quelltext
|
1
2
3
4
|
bool cellExists = currentCellIndex.x >= 0 &&
currentCellIndex.y >= 0 &&
currentCellIndex.x < mapCells.GetLength(0) &&
currentCellIndex.y < mapCells.GetLength(1);
|
Eine Zuweisung,
Vier Vergleiche,
Drei Konjunktionen die durch SCE die Ausführung frühzeitig unterbrechen können.
Im Fall der wohl am häufigsten vorkommt, dass die Position im Raster liegt, hast du also die vier Vergleiche, die drei Konjunktionen und die Zuweisung.
|
C-/C++-Quelltext
|
1
|
bool cellExists = Math.Min(mapCells.GetLength(0) - 1, Math.Abs(x)) == x && Math.Min(mapCells.GetLength(1) - 1, Math.Abs(y)) == y;
|
Eine Zuweisung,
Vier Vergleiche ( 2x == und 2x Math.Min )
Eine Konjunktion
Zwei Subtraktionen
Zwei mal Math.Abs ( kann geschickt durch bitweises Und implementiert werden )
Unabhängig davon dass die Leserlichkeit viel wichtiger ist als ist die erste Version vermutlich sogar effizienter. Allein dadurch dass du dort die SCE an drei Stellen hast und den ausgeführten Code frühzeitig unterbrechen kannst. Genauer nachgemessen habe ich das aber nicht. So Low Level Optimierung ist an sich total schwachsinnig. Ich wollte das hier nur mal ausführen um dir zu zeigen dass kürzerer Code nicht unbedingt optimaler sein muss. POITROAE