Functions wie Functions aufrufen – über einen kleinen Umweg kein Problem

Eine der Grundideen bei der Planung und Umsetzung der PowerShell war damals, dass sie ein möglichst breites „Publikum“ ansprechen soll, und dass niemand gezwungen werden sollte vertraute Gewohnheiten und Schreibweisen beim Scripten aufgeben zu müssen.

Eine der dieser Gewohnheiten ist die bei anderen Skript- und Programmiersprachen übliche Form der Function-Definition und des Aufrufs einer Function. Demnach folgen auf den Befehl, der die Function definiert, die Parameter in runden Klammern:

Beim Aufruf der Function werden die Argumente ebenfalls in runden Klammern gesetzt:

Auch in PowerShell können Functions auf diese Weise definiert und aufgerufen werden, wenngleich dies eher eine Ausnahme ist. Die einzige Einschränkung besteht darin, dass eine Übergabe mehrerer per Komma getrennter Werte wie üblich die Übergabe eines Arrays bedeutet. Werden daher mehrere Werte übergeben, müssen diese als Array angesprochen werden.

Das folgende Beispiel ist nicht nur etwas umfangreicher, es behandelt auch einen Bereich, der im IT-Alltag eher selten vorkommt: Es geht um die Berechnung der Determinante von Vektoren mit zwei Komponenten und anderen Dingen, die etwas mit „analytischer Geometrie“ (aber eher auf dem Niveau des 11. Schuljahres) zu tun haben.

Im ersten Schritt werden lediglich zwei Klassen für Vektoren mit zwei und mit drei Komponenten definiert.

Die Klassendefinition wäre nicht erforderlich und setzt zudem PowerShell ab Version 5.0 voraus, aber mit den Klassendefinitionen wird das Beispiel insgesamt etwas besser nachvollziehbar.

Im nächsten Schritt kommen zwei Function-Definitionen zum Einsatz, über die Vektoren definiert werden:

Dass auf den param-Befehl verzichtet wird ist keine Voraussetzung, um die Function wie bei Programmiersprachen üblich aufrufen zu können. Wichtig ist lediglich, dass die Function einen Array-Parameter besitzt, dem alle Argumente übergeben werden.

Der Aufruf der Function v2 sieht wie folgt aus:

und

Mit den zweiten Vektoren wird im nächsten Schritt mit der Function det2 die Determinante der 2×2-Matrize ausgerechnet, die durch die beiden Vektoren gebildet wird. Auch diese Function wird so definiert, dass sie mit runden Klammern aufgerufen werden muss.

<# .Synopsis Determinante eines Vektors mit 2 Komponenten #>

function det2
{
param([Vektor2[]]$v)
return ($v[0].x * $v[1].y – $v[0].y * $v[1].x)
}

Beim Aufruf der Function det ist ein kleiner Umweg erforderlich: Der Rückgabewert muss einer Variablen zugewiesen werden. Ansonsten funktioniert die Multiplikation mit 0.5 oder einer anderen Zahl nicht. Warum das so ist, muss ich noch herausfinden (ich bin sicher, dass Friedrich die Antwort kennt;)

Fazit: Wer Functions bei PowerShell so verwenden möchte wie bei VBScript, JavaScript und den meisten Programmiersprachen kann dies tun. Eine Einschränkung besteht darin, dass wenn die Argumente per Komma getrennt übergeben werden soll, ein Array-Parameter benötigt wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.