Inhaltsverzeichnis

Lazy-Parameter

Folgende Funktion

void func( bool write, int what )
{
  if( write )
    printf( "%d\n", what );
}

wird gerufen mit

func( false, doComplexMath(a,b) );

Hier wird eine extrem aufwendige Funktion gerufen, die möglicherweise gar nicht benötigt wird. Zum einen könnte man hier prüfen, dass what gar nicht benötigt wird und den Call wegoptimieren.

Zum anderen könnte man hier einen Funktionspointer übergeben, der ist aber abhängig von der Anzahl der Parameter. Es muss also ein Funktionsobjekt übergeben werden, dass a und b zwischenspeichert (möglicherweise auch lazy!) und ein Funktionsobjekt übergibt (tuple aus (doComplexMath, a, b) ).

Das alles bitte mit

func( write is bool, what is int lazy )
{
  if( write )
    printf( "%d\n", what );
}

Beim Aufruf von what wird das Funktionsobjekt what aufgerufen, also doComplexMath(a,b) ausgeführt und ein int zurückgegeben. Nachteilig kann das sein bei direkten ints:

func( false, 4711 );

Hier kann man nach Size oder Speed kompilieren, wobei für Speed eine Überladung denkbar ist.

Lazy ist const

Ein Parameter, der Lazy in die Funktion kommt ist konstant, wird also nur einmalig ausgewertet. Wird der Parameter lazy var beschrieben, so wird er bei jedem Aufruf neu ausgewertet.

Expressions

Expressions können entweder zur Kompilezeit ausgewertet werden und somit in eine Copy-By-Value-Funktion übertragen werden oder werden ebenfalls in eine Lambda-Funktion gepackt:

func( false, funccall1() && funccall2() );