Corso di Raku / Avanzato / Subroutine

Subroutine annidate

Una subroutine puo essere definita all’interno di un’altra subroutine. Una subroutine annidata e una subroutine normale, ma e visibile solo all’interno della subroutine che la contiene.

sub outer {
    sub inner {
        say 'I am the inner subroutine';
    }

    inner;
}

outer;

Il programma stampa:

I am the inner subroutine

Qui inner e dichiarata all’interno di outer, e outer la chiama. Questo funziona perche inner e nello scope di tutto il corpo di outer.

Al di fuori di outer, tuttavia, il nome inner non esiste. Il seguente programma non riesce a compilare:

sub outer {
    sub inner { 42 }
}

inner; # error: Undeclared routine: inner

L’annidamento e utile quando una routine ausiliaria e necessaria solo per una singola subroutine. Tenerla all’interno rende chiaro che si tratta di un dettaglio privato e impedisce che venga chiamata per errore da altre parti del programma.

Pratica

Risolvi 1 quiz sul contenuto di questo argomento.

Esercizi

Questa sezione contiene 3 esercizi. Guarda tutti gli argomenti di questa sezione prima di iniziare gli esercizi.

  1. Un helper privato
  2. Chiusura sull’esterno
  3. Una somma interna

Quiz — Uso di MAIN   |   Un helper privato