====== return ======
===== Konzept =====
[[de:dev:concept:Function]]
===== Stand =====
nicht implementiert
===== Ursprung =====
siehe [[de:dev:ext:return]].
===== Scope =====
Innerhalb einer [[de:dev:scope:Function]]
===== Rückgabe =====
return gibt neutral zurück, um das folgende Konstrukt zu ermöglichen:
x = bla() || return false;
===== Beschreibung =====
Sofern allen zu initialisierenden Rückgabeparametern ein Wert zugewiesen wurde, darf die Funktion verlassen werden. Wurde nicht allen Rückgabe-Parametern ein Wert zu gewiesen, so können die fehlenden Werte noch mit der return-Anweisung beschrieben werden. Wird nur ein Wert zurückgegeben, so kann return wie in C nur mit einem Wert aufgerufen werden.
return darf nur ohne Zuweisungen stehen, wenn alle Rückgabeparameter, die initialisiert werden müssen entweder im [[scope:function|Functionscope]] an dieser Stelle initialisiert sind oder es keinen RÜckgabewert gibt.
==== Beispiele ====
code( Window * result=null ) MyOpenWin :=
{
  /* TODO: Implement */
  return;
}
code( Window * result ) MyOpenWin :=
{
  /* TODO: Implement */
  return null;
}
code MyOpenWin :=
{
  /* TODO: Implement */
  return;
}
===== siehe auch =====
[[assert]], [[if]], [[else]], [[fail]]
===== Ideen =====
==== geschachtelte Returns =====
return arbeitet grundsätzlich wie [[break]] für [[scope:loop|Schleifenscopes]]. Wenn man Funktionen innerhalb von Funktionen anlegen kann, so wäre es interessant ein Return auf die höher definierte Funktion ausüben zu können.
code( int ) main :=
{
  code( int; int a ) func :=
  {
    if( main::a + a == 10 )
      return from main ExitSuccess;
    
    return a + 1;
  }
  
  int a = 0;
  
  while( a : func( a ));
  
  print "Dies wird niemals aufgerufen\n";
}
Anmerkung: Der Beispielcode ist genau das, was man damit nicht machen sollte. Es sollte eine Möglichkeit sein, weitere Fragen in main() zu vermeiden und nicht die Schleife zu steuern.