Wie breit sollte Quellcode sein?
-
volkart du hast ja end die scheiss variablen namen.
-
was spricht dagegen auch während einer if-anweisung zeilenumbrüche zu machen?
if(field[x+drc[i][0]*distance][y+drc[i][1]*distance] == BISHOP || field[x+drc[i][0]*distance][y+drc[i][1]*distance] == QUEEN) return true;
da seh ich keine möglichkeit es zu verkürzen.
oder nehmen wir:if(!isThreatened(4, 0, whiteMove) && !isThreatened(5, 0, whiteMove) && !isThreatened(6, 0, whiteMove))
gut da könnt ich vielleicht noch eine zusätzliche funktion schreiben
bool checkCastling(bool whiteMove) { return (!isThreatened(4, 0, whiteMove) && !isThreatened(5, 0, whiteMove) && !isThreatened(6, 0, whiteMove)); } //und dann if(checkCastling(whiteMove))
aber ist das denn sinnvoll? ich brauchs nur einmal.
wichtig ist nur das man nicht horizontal scrollen muss. und damit andere die den code lesen auch nicht horizontal scrollen müssen sollte man sich imo an die 80 zeichen halten.
-
Ja, ist auch sinnvoll, wenn du es nur einmal brauchst. Zeilenumbrüche mach ich auch manchmal in nem if. Aber wenns zu wild wird, dann lieber ne Funktion.
da seh ich keine möglichkeit es zu verkürzen.
In diesem Fall sollte man IMHO den Wert von field[x+drc[i][0]*distance][y+drc[i][1]*distance] cachen. Wenn ich das if lese interessiert mich nicht, welches Feld ich da betrachte, sondern mich interessiert, dass hier auf Bishop und Queen getestet wird.
-
if((Value>BestMoveValue)||((Value==BestMoveValue)&&(rand()>RAND_MAX/2))){ BestMove = i; BestMoveValue = Value; } //mal alternativen überlegen for(;;){ if(Value<BestMoveValue) break; if(Value==BestMoveValue)&&(rand()>RAND_MAX/2) break; BestMove = i; BestMoveValue = Value; break; } //nee, sindt nicht ideal aus. inline bool fiftyFifty(){ return rand()%2; } if((Value>BestMoveValue)||((Value==BestMoveValue)&&fiftyFifty())){ BestMove = i; BestMoveValue = Value; } //besser. if(Value+VIEL*fiftyFifty()>bestMoveValue){ BestMove = i; BestMoveValue = Value; } //versteht das noch einer? if(Value+(rand()&1024)>bestMoveValue){ BestMove = i; BestMoveValue = Value; } //langsamer und unverständlicher als die erste version. //langsamer, weil rand() immer aufgerufen wird. //also nochmal eine von oben kopieren inline bool better(int MoveA,int MoveB){ if(MoveA>MoveB) return true; if(MobeA<MoveB) return false; return fiftyFifty(); } if(better(Value,BestMoveValue)){ BestMove = i; BestMoveValue = Value; } //sehe keinenb guten trick. und vermutlich auch keinen, wenn ich die ganze //schleife sehen dürfte.
-
borg schrieb:
was spricht dagegen auch während einer if-anweisung zeilenumbrüche zu machen?
nix.
if(field[x+drc[i][0]*distance][y+drc[i][1]*distance] == BISHOP || field[x+drc[i][0]*distance][y+drc[i][1]*distance] == QUEEN) return true;
da seh ich keine möglichkeit es zu verkürzen.
siehe Optimizer
Piece const& piece=field[x+drc[i][0]*distance][y+drc[i][1]*distance]; if(piece == BISHOP || piece== QUEEN) return true;
aber sind BISHOP und QUEEN enums?
PAWN=1
ROOK=2
HORSE=4
BISHOP=8
QUEEN=ROOK+BISHOP
KING=16
if(piece & BISHOP)
return true;//und dann if(checkCastling(whiteMove))
aber ist das denn sinnvoll? ich brauchs nur einmal.
ist sinnvoll. dann kannste den haupt-code besser lesen.
<edit=kingruedi>Formatierungsfehler gefixt</edit>
-
Es ist schön und gut wenn man einen breiten Monitor hat, der viele Zeichen lesbar darstellen kann, aber oft will man nicht nur eine Datei offen haben. Ebenso ist es beim Vergleichen zweier Dateien via kompare, besser, wenn die beiden Zeilen ganz sichtbar sind.
-
Ich mach immer 80 Zeichen. Das macht den Code idr. leserlicher und außerdem ist mein Editor auf 80 Zeichen eingestellt. Dh. wenn der Code länger wird, wird die Darstellung umgebrochen.
-
Ich breche nach Gefühl um und auch nur wenn ich eine sinnvolle Umbruchstelle ausmachen kann.
-
mehr als 80 zeichen brauch ich nur sehr selten. aber nie >90 oder so. benutzt zZ eclipse, links ist package explorer, debug, rechts ist variables, expressions und outline ( als karteikarten ). dazwischen ist quellcode. bei 1280x1024.
-
volkard schrieb:
//und dann if(checkCastling(whiteMove))
aber ist das denn sinnvoll? ich brauchs nur einmal.
ist sinnvoll. dann kannste den haupt-code besser lesen.
wohin steckt ihr eigentlich solche kleinen Hilfsfunktionen? Als private in die aktuelle Klasse, in einen anonymen Namespace in der aktuellen Datei oder sonstwo?
-
in die klasse nur, wenn auf private member zugegriffen werden muss. ansonsten in den anonymen namespace.