[linux-l] Re: Händler für Linux-Notebooks

Steffen Dettmer steffen at dett.de
Fr Feb 10 10:11:49 CET 2006


* Rocco Rutte wrote on Thu, Feb 09, 2006 at 07:46 +0100:
> * Steffen Dettmer <steffen at dett.de>:
> 
> >Nochmal langsam, Volker, Rocco: ihr schreibt 100 Zeichen, weil das
> >Terminal "eh so breit" ist? 
> 
> Ich für meinen Teil: jein. Ich schreibe 100+ Zeichen, weil der Code für 
> mich lesbarer wird.
> 
> Kleines Beispiel. Statt
> 
>   int foo (void* ptr) {
>     if (!ptr)
>       return 0;
>     if (!irgendwas)
>       return 0;
>     ...
>   }
> 
> schreibe ich mittlerweile
> 
>   int foo (void* ptr) {
>     if (!ptr) return 0;
>     if (!irgendwas) return 0;
>     ...
>   }

mmm... Würd in meiner Firma beides nicht durchs Code Review kommen, aber
da spielen immer Geschmack und Gewohnheit eine Rolle.

>     if (!ptr) return 0;

ist IMHO ganz schlecht, weil man es nicht erweitern kann, ohne die
"Struktur" zu ändern. Schriebe man

     if (!ptr) {
        return 0;
     }

Könnte man z.B. ein log und ein assert vor dem Return einfügen (das
return ist hier sowieso nicht ideal, aber gerade zur Parameterprüfung OK
ist; für !irgendwas aber schon eher falsch...). Dann sieht man im
Zeilenbasieren CVS log / annotate noch, das die Bedingung und das return
schon "alt" sind, vielleicht ein Test-Tag haben und daher möglicherweise
korrekt sind :)

Ich würde schreiben

struct fooArg;

int
foo(struct fooArg *bar)
{
   int err = 0;
   myBool somethingDone = myFalse;

   /* Parameter checking */
   if (bar == NULL) {
      assert(bar != NULL); 
      reportError("foo(NULL)");
      err = NULL_POINTER;
   }

   /* check if irgendwas succeeded, because then we don't need to
    * do it again */
   if (err == 0) {
      if (!irgendwas) {
         somethingDone = myTrue; 
      } 
   }

   /* If something was done, we inform the bar owner about the new cold
    * beer and that on bar something will be skipped.
    * If something was not done yet, we prepare it to ensure that we can
    * skip it next time. */
   if (err == 0) {
      if (somethingDone) {
         assert(bar->toDo == ToDoEmpty)
         err = skipSomething(bar);
      } else {
         err = prepareSomething(bar);
      }
   }

   /* .... */
}

jetzt fehlen nur noch Moduleprefixe, aber vielleicht ist ja alles
statisch, dann wäre es bei uns erlaubt (aber nicht erwünscht wg.
Refaktorisierungen)

> Damit habe ich deutlich weniger rauschen, 

Menschen leben von Rauschen... :-) 

Es gibt Optimierung nach Ausführungsgeschwindigkeit und Codegrösse -
aber nicht nach Quelltextgrösse oder Zeilenzahl... Source-Code muss für
Lesbarkeit optimiert werden -- jetzt kann man sich natürlich herrlich
streiten, wann er lesbarer ist :)

> und kriege in der Höhe mehr drauf, während ich die Breite nutze (die
> eh schon da ist). Und da können schonmal Zeilen 100+ entstehen.

Und wie druckst Du das? Wird doch dann auch schnell schwierig, oder?

Na, wird wohl Geschmackssache sein.

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l