Strukturierte Rückgabewerte

Manchmal ist es nötig, dass eine Funktion mehrere Informationen in einem Objekt zurückgibt. Folgende Methoden dienen zum Zurückgeben von strukturierten Werten:

Gruppen

Folgendes Beispiel gibt die Informationen eines Users mittels einer lokalen Gruppe zurück. Die Unterobjekte einer Gruppe stellen die Informationen dar, die durch Namen angesprochen werden können.

Beispiel:

user info(){
  'Gruppe erstellen:
  def user{
    name = "Josef"
    age  = 16
  }
  'Gruppe zurückgeben:
  return user
}

out user info       'Gibt alle Informationen aus
user info{out name} 'Gibt nur den Namen "Josef" aus

Klassen

Natürlich könnte man eine Klasse definieren, die mehrere Instanz-Objekte besitzt, um von einer Funktion mehrere Informationen zu erhalten. Doch dies kann ein wenig Übersichtlich werden. Daher gibt es noch die Möglichkeit, eine Klasse lokal in einer Funktion zu definieren, damit die Klasse nur innerhalb der Funktion bekannt ist.

Ein weiterer Vorteil ist, dass klassifizierte Objekte auch Klassenmethoden besitzen, wodurch z.B. der Rückgabewert durch Operationen verändert werden kann.

Bei dieser Methode soll jedoch beachtet werden, dass alle Variablen in der jeweiligen Funktion, die eine lokale Klasse nutzen, vor der Klasse definiert werden, da sonst die Klasse gelöscht wird, bevor überhaupt dessen alle Objekte gelöscht wurden!

Beispiel:

def get vector(x1.f, y1.f, x2.f, y2.f){
  def vector{
    _new(){
      this def x.f, y.f
    }
    _def(){
      this pop x, y
    }
    _form(){
      return "(#(x)|#(y))"
    }
  }
  return vector(x2 - x1, y2 - y1)
}

out get vector(1, 2, 5, 3) '= (4, 1)

Top | Home | Index