Fonctions et procédures
Les fonctions encapsulent une logique réutilisable et renvoient une valeur. En tête de fichier, vous déclarez des fonctions avec le mot-clé function.
Déclarer une fonction
La forme générale est function nom(paramètres): Type begin ... return expr; end;. Notez le ; final après la déclaration au niveau supérieur :
function saudar(nome: String): String
begin
return "Olá, " + nome + "!";
end;
begin
WriteLn(saudar("Ana"));
end.Olá, Ana!
Le type situé après les : est le type de la valeur renvoyée. L'instruction return expr; restitue cette valeur et termine la fonction.
Paramètres
Les paramètres sont séparés par une virgule. Ils peuvent être typés ou non typés :
// 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
Typez vos paramètres
Déclarer le type des paramètres rend l'intention claire et aide l'interpréteur à valider les valeurs. Préférez des paramètres typés chaque fois que possible.
Appeler des fonctions
Appelez une fonction par son nom, en passant les arguments entre parenthèses. Si la fonction n'a aucun argument, les parenthèses sont facultatives :
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
Récursivité
Une fonction peut s'appeler elle-même. L'exemple classique est la factorielle :
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
Prévoyez toujours un cas de base
Toute fonction récursive a besoin d'une condition d'arrêt (ici, n <= 1). Sans elle, la récursivité ne se termine jamais.
Et les procédures ?
Une procédure est comme une fonction, mais ne renvoie pas de valeur — elle sert à produire des effets (afficher, modifier l'état). En NeoObjectPascal, les procédures existent en tant que membres de classes, déclarées avec le mot-clé 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
Pour explorer les procédures, les méthodes et la visibilité en profondeur, voir Classes.
Ensuite, apprenez à travailler avec les collections dans Tableaux.