Funzioni e procedure
Le funzioni incapsulano logica riutilizzabile e restituiscono un valore. All'inizio del file, dichiari le funzioni con la parola chiave function.
Dichiarare una funzione
La forma generale è function nome(parametri): Tipo begin ... return expr; end;. Nota il ; finale dopo la dichiarazione a livello superiore:
function saudar(nome: String): String
begin
return "Olá, " + nome + "!";
end;
begin
WriteLn(saudar("Ana"));
end.Olá, Ana!
Il tipo dopo i : è il tipo del valore restituito. L'istruzione return expr; restituisce quel valore e termina la funzione.
Parametri
I parametri sono separati da virgola. Possono essere tipizzati o non tipizzati:
// parâmetros tipados
function somar(a: Integer, b: Integer): Integer
begin
return a + b;
end;
// parâmetros sem tipo explícito
function juntar(x, y): String
begin
return x + " " + y;
end;
begin
WriteLn(somar(3, 4));
WriteLn(juntar("bom", "dia"));
end.7 bom dia
Tipizza i tuoi parametri
Dichiarare il tipo dei parametri rende chiara l'intenzione e aiuta l'interprete a validare i valori. Preferisci i parametri tipizzati ogni volta che è possibile.
Chiamare le funzioni
Chiama una funzione tramite il suo nome, passando gli argomenti tra parentesi. Se la funzione non ha argomenti, le parentesi sono opzionali:
function agora(): String
begin
return "sempre agora";
end;
begin
WriteLn(agora()); // com parênteses
WriteLn(agora); // sem parênteses — equivalente
end.sempre agora sempre agora
Ricorsione
Una funzione può chiamare sé stessa. L'esempio classico è il fattoriale:
function fatorial(n: Integer): Integer
begin
if n <= 1 then
return 1;
return n * fatorial(n - 1);
end;
begin
WriteLn("5! = ", fatorial(5));
WriteLn("6! = ", fatorial(6));
end.5! = 120 6! = 720
Prevedi sempre un caso base
Ogni funzione ricorsiva necessita di una condizione di arresto (qui, n <= 1). Senza di essa, la ricorsione non termina mai.
E le procedure?
Una procedura è come una funzione, ma non restituisce alcun valore — serve a eseguire effetti (stampare, modificare lo stato). In NeoObjectPascal, le procedure esistono come membri di classi, dichiarate con la parola chiave procedure:
class Logger
public procedure registrar(msg: String)
begin
WriteLn("[LOG] " + msg);
end;
end;
var log: Object;
begin
log := new Logger();
log.registrar("iniciando");
end.[LOG] iniciando
Per approfondire procedure, metodi e visibilità, vedi Classi.
Ora impara a lavorare con le collezioni in Array.