Raku-Kurs / Grundlagen / Mehr über Funktionen

Achte auf den Abstand

Die Verwendung von Funktionen in Raku ist meist intuitiv und verursacht keine Probleme, aber Sie müssen auf den folgenden Aspekt achten.

TL;DR

Fügen Sie keinen Abstand zwischen dem Namen der Funktion und den Klammern mit ihren Argumenten hinzu. Verwenden Sie jedoch einen Abstand nach for und if.

Lange Geschichte

Nehmen wir eine einfache Funktion:

sub f($x, $y) {
    return $x + $y;
}

Beachten Sie zunächst das Fehlen von Leerzeichen zwischen dem Namen der Funktion und den öffnenden Klammern, die die Parameter enthalten. Einige Codierungsstile in anderen Sprachen erfordern dort möglicherweise ein Leerzeichen. Raku ist damit einverstanden, aber dies ist keine Praxis, der man folgen sollte:

sub f ($x, $y) {
    return $x + $y;
}

Auf der Aufrufseite ist das Fehlen von Leerzeichen wichtig. Wenn Sie die Funktion aufrufen und die Klammern weglassen, ist das Leerzeichen nach dem Namen der Funktion unvermeidlich:

f 5, 6;

Aber wenn Sie Klammern hinzufügen, dürfen Sie kein Leerzeichen davor haben. Dies ist ein korrekter Aufruf:

f(5, 6);

Und dieser Aufruf ist falsch:

f (5, 6);

Solcher Code verursacht eine Ausnahme:

Zu wenige Positionsparameter übergeben; erwartet wurden 2 Argumente, aber es wurde 1 übergeben
  sub f bei t.raku Zeile 1
  in Block <unit> bei t.raku Zeile 5

Raku sieht den Aufruf mit einem Leerzeichen f (5, 6) als Versuch, ein einzelnes Argument (5, 6) an die Funktion zu übergeben. Sie können den Typ dieses Arguments leicht überprüfen, wenn Sie die Funktion so umschreiben, dass sie nur ein Argument akzeptiert:

sub f($param) {
    say $param.WHAT;
}

f (5, 6); # (List)

Das Aufrufen von f (5, 6) bedeutet also, dass wir eine Liste an die Funktion übergeben. Die Liste als eine einzelne Entität.

Wann ein Leerzeichen benötigt wird

In einigen Fällen ist das Leerzeichen erforderlich. Das passiert, wenn Sie Klammern mit einem der Schlüsselwörter wie if oder for oder loop verwenden. Der folgende Code ist falsch:

if(True != False) {
    say 'OK';
}

Die Fehlermeldung erklärt, was falsch ist:

===SORRY!===
Das Wort 'if' wird als Funktionsaufruf 'if()' interpretiert. Bitte verwenden Sie
Leerzeichen anstelle von Klammern.
bei /Users/ash/raku-course/t.raku:1
------> if⏏(True != False) {
Unerwarteter Block in Infix-Position (zwei Terme hintereinander)
bei /Users/ash/raku-course/t.raku:1
------> if(True != False)⏏ {

Im Fall von if sind Klammern überhaupt nicht erforderlich, sodass das Problem nicht auftreten kann, wenn Sie sie nicht verwenden. Aber in einigen Fällen, wie zum Beispiel bei loop, müssen Sie sie haben, und das Leerzeichen wird obligatorisch:

loop(my $c = 0; $c != 10; $c++) { say $c }

In diesem Code passiert dasselbe: loop(...) wird vom Compiler als Funktionsaufruf verstanden. Fügen Sie ein Leerzeichen hinzu, um das Problem zu lösen. Oder besser, schreiben Sie das Fragment mit for um.

Fazit

Das Fazit: Um solche Probleme zu vermeiden, fügen Sie keinen Abstand zwischen dem Namen der Funktion und den Klammern mit den Argumenten der Funktion hinzu und versuchen Sie, Klammern zu vermeiden, wenn dies mit anderen Sprachkonstruktionen wie Kontrollfluss möglich ist.

Kursnavigation

Mehr über Funktionen   |   Mehr über Funktionen / Typisierte Parameter


💪 Or jump directly to the exercise to this section.

Diese Seite wurde automatisch mit ChatGPT 4o übersetzt. Originaler englischer Text.

Übersetzungen dieser Seite: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська