Raku-Kurs / Fortgeschritten / Subroutinen

Signaturen

Im Abschnitt „Grundlagen” haben Sie Subroutinen mit positionalen und benannten Parametern definiert und ihnen Standardwerte gegeben. Die Liste der Parameter wird als Signatur bezeichnet. Dieser Abschnitt fügt zwei weitere Möglichkeiten hinzu, die eine Signatur bieten kann: einen Parameter als optional markieren und eine beliebige Anzahl zusätzlicher Argumente sammeln.

Optionale Parameter

Ein Parameter, dem ein Fragezeichen folgt, ist optional: Der Aufrufer kann ihn weglassen. Wenn er weggelassen wird, ist der Parameter undefiniert, sodass Sie mit dem Defined-or-Operator // einen Ersatzwert angeben können:

sub greet($name, $greeting?) {
    my $g = $greeting // 'Hello';
    say "$g, $name!";
}

greet('Anna');           # Hello, Anna!
greet('Anna', 'Hi');     # Hi, Anna!

Wenn greet mit einem Argument aufgerufen wird, ist $greeting undefiniert, sodass // auf 'Hello' zurückfällt.

Slurpy-Parameter

Ein mit * markierter Parameter ist slurpy: Er sammelt alle verbleibenden Argumente ein. Ein Slurpy-Array, geschrieben als *@, sammelt eine beliebige Anzahl positionaler Argumente in einem Array:

sub count-them(*@items) {
    say @items.elems;
}

count-them(1, 2, 3, 4); # 4
count-them('a', 'b');   # 2

Sie können gewöhnliche Parameter mit einem Slurpy-Parameter kombinieren. Die festen Parameter werden zuerst gefüllt, und was übrig bleibt, geht in das Slurpy-Array:

sub titles($name, *@titles) {
    say "$name has {@titles.elems} title(s)";
}

titles('Anna', 'Dr', 'Prof'); # Anna has 2 title(s)

Auf die gleiche Weise sammelt ein Slurpy-Hash, geschrieben als *%, alle zusätzlichen benannten Argumente in einem Hash:

sub register($name, *%options) {
    say "$name: {%options.elems} option(s)";
    say "role is %options<role>";
}

register('Anna', role => 'admin', active => True);

Die beiden benannten Argumente landen als Schlüssel in %options, sodass das Programm ausgibt:

Anna: 2 option(s)
role is admin

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Übungen

Dieser Abschnitt enthält 3 Übungen. Sehen Sie sich alle Themen dieses Abschnitts an, bevor Sie mit den Übungen beginnen.

  1. Alle Argumente summieren
  2. Ein optionaler Exponent
  3. Slurpy benannte Argumente

Kursnavigation

Subroutinen   |   Alle Argumente summieren