Worst Practices

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Antworten
Warf
Beiträge: 1426
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Worst Practices

Beitrag von Warf »

Hey ho,

hier im Forum kommt es immer mal wieder zu Diskussionen über schlechten Programmierstil. Da dachte ich mir das kann man doch mal auf die Spitze treiben und sich mal über die schlimmsten Stile unterhalten.

Lasst uns hier mal besonders beschissenen Code sammeln. Sprache ist komplett egal.

Ich fange mal mit einem wunderschönen C++ Beispiel an, was ich selbst mal für die Uni fabriziert habe:

Code: Alles auswählen

for (size_t i = 0; i < cluster->length; result.points[i++] = {
  (double)cluster->spheres[idxList[i-1]].pos.x,
  (double)cluster->spheres[idxList[i-1]].pos.y,
  (double)cluster->spheres[idxList[i-1]].pos.z
});
 


Es hat fast ne halbe stunde gebraucht bis das andere Gruppenmitglied verstanden hat das die For schleife keinen Body hat und alles im header drin ist. Vor allem das verhalten von i für die Zuweisung mit dem I++ ist schön. Das ich -1 rechnen musste hab ich via trail&error herausgefunden. Alles in allem würde ich das nicht empfehlen und haben wir später auch noch geändert

Und ich finde bei C den Preprozessor ganz lustig, damit kann man sein Programm beliebig verunstalten, hier mal ein kleines Beispiel was ich tatsächlich so benutzt habe

Code: Alles auswählen

#define Minutes *60*SecondDelay
#define Hours *60*60*SecondDelay
#define And +
#define Seconds *SecondDelay
...
switch (PilotState) {
      case 0:
        if (Time > 20 Seconds) {
          RunProgram(0);
          PilotState++;
        }
        break;
      case 1: // Light test
        if (dTime > 2 Minutes And 30 Seconds) {
          RunVerb(35, -1);
          PilotState++;
        }
        break;
      case 2: // Time check
        if (dTime > 2 Minutes And 30 Seconds) {
          RunVerb(16, 65);
          PilotState++;
        }
        break;
      case 3: // ENABLE IMU & Start P00
        if (dTime > 2 Minutes) {
          AddActionToQ(atIMU, IMU_TURN_ON_ACTION, NextActions);
          PilotState++;
        }
        break;

Mathias
Beiträge: 4854
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Worst Practices

Beitrag von Mathias »

Den mit dem "And" finde ich gut. :mrgreen:
Wen man wenigsten noch "Plus" genommen hätte.

Beim Arduino C/C++ wird das "And" schon für den Ersatz von && gebraucht.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Antworten