Die Situation kennen viele von euch: Ihr implementiert in einer Klasse eine Berechnung. Diese wird in mehrere Funktionen aufgeteilt, damit das übersichtlicher und leichter verständlich wird. Das funktioniert ganz gut, wenn jede Berechnung eine eigene Klasse erhält. Manchmal enthält sie jedoch mehrere davon (was in manchen Fällen durchaus sinnvoll sein kann). Für diesen Fall wurden Local Functions geschaffen.

Mit Hilfe der Local Functions kann ich eine Funktion im Kontext einer anderen Methode erstellen. Damit hat sie eine eindeutige Zugehörigkeit und ist in diesem Kontext leichter zu verstehen. Sinnvoll ist dies jedoch nur dann, wenn diese Function nur für eine aufrufende Stelle benötigt wird.

Bis jetzt kennen wir solche Konstrukte:

public int Calculate(int x, int y, int count)
{
    var sum = 0;
    for (int i = 0; i < count; i++)
    {
        sum += ComplexCalculation(x, y);
    }
    return sum;
}

private int ComplexCalculation(int x, int y)
{
    return x + y;
}

Unter Verwendung einer Local Function sieht das so aus:

public static int LocalCalculation(int x, int y, int count)
{
    var sum = 0;
    for (int i = 0; i < count; i++)
    {
        sum += LocalComplexCalculation(x, y);
    }
    return sum;

    int LocalComplexCalculation(int a, int b)
    {
        return a + b;
    }
}

Es wird sichergestellt, dass die Local Function nur aus der umliegenden Methode aufgerufen werden kann. Eine versehentliche Verwendung aus einem anderen Bereich der Klasse ist nicht möglich. Auf Methoden-Variablen kann aus einer Local Function heraus zugegriffen werden. Auch werden mehrere Local Functions innerhalb eines Kontextes unterstützt.

Eine async-Unterstützung ist gegeben.

Generell stehe ich dieser neuen Funktionalität etwas skeptisch gegenüber. Sie sollte eher vorsichtig eingesetzt werden, da bei wirklich komplexen Vorgängen Methoden schnell übersichtlich werden und somit genau das Gegenteil erreicht wird. Dennoch: Viel Spaß bei der Verwendung.

Veröffentlicht von Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

Beteilige dich an der Unterhaltung

1 Kommentar

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

  1. Hi Norbert,

    stehe dem nicht so “skeptisch” gegenüber, da ich das im Jahre 1981 so in “Pascal” während meines Informatik-Studiums gelernt habe. Damit sollte die Sichtbarkeit verbessert werden. Niklaus Wirth von der ETH Zürich wird sich dabei was gedacht haben.

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen