Accéder au contenu principal

Fonction et procédure

FONCTION ET PROCÉDURE

Les fonctions et procédures sont des sous-programmes qui exécutent des tâches en particuliers. Ils permettent de rendre le programme plus lisible et de pouvoir les réutiliser sans devoir réécrire la portion de code. La différence entre les procédures et fonctions est que la fonction retourne une valeur. Ils peuvent avoir un, plusieurs ou aucun paramètre. Un paramètre est une valeur que l'on passe à une procédure ou fonction pour qu'elle puisse effectuer des traitements avec cette valeur.

Lorsqu'on a créé notre fonction ou procédure, on peut l'appeler dans notre programme. Ils nécessitent d'être déclarés avant la partie implémentation

Fonction

function <nom de la fonction>(<liste de paramètre>):<type de résultat>;

function CalculerTaxe(PrixSousFinal:real):real;
begin
  result := PrixSousFinal * 0.07 + PrixSousFinal;
end;

On utilise le mot result lorsqu'on veut retourner une valeur dans
une    fonction. Le nom de la fonction était anciennement utilisé
pour retourner    la valeur, on utilise moins cette technique, mais il est
toujours possible de    l'utiliser. 

Code source disponible ici.

Procédure

procedure <nom de la procédure>(<liste de paramètre>);

procedure AfficherErreur(Message_Erreur:string); 
begin 
   messagedlg(Message_Erreur,mtInformation,[mbOk], 0);
end;

Lorsqu'on a aucune valeur à retourner ou qu'on a plus d'une valeur à retourner, on peut utiliser les procédures.

Code source disponible ici

Paramètre

Il existe plusieurs types de paramètre, voici les trois plus utilisés.

Paramètre par valeur

La fonction ou procédure reçoit une copie de la valeur passée en paramètre. La valeur originale ne sera jamais modifiée. Le programme que je vous ai fait inverse deux nombres. Lorsque la procédure est terminée, les deux nombres sont les mêmes qu'avant l'inversion. Les passages par valeur sont souvent utilisés lorsqu'on ne doit pas modifier le contenu des variables ou que l'on doit afficher des variables. Ce type de paramètre requit plus de ressources système et est plus lent.

procedure ChangerValeur(premier,deuxieme:integer);
var
  temp:integer;
begin
  temp:=premier;
  premier:=deuxieme;
  deuxieme:=temp;
end;

La fonction accède à une copie locale des variables passées en paramètre.

Code source disponible ici.

Paramètre par adresse

La fonction ou procédure utilise l'adresse de la variable que le compilateur lui transmet. Lorsqu'on utilise l'adresse de la variable, on accède directement à son contenu. La valeur originale sera donc modifiée. On ajoute le mot «var» devant les paramètres afin d'avoir des paramètres par adresses.

procedure ChangerValeur(var premier,deuxieme:integer);
var
  temp: integer;
begin
  temp:=premier;<
  premier:=deuxieme;
  deuxieme:=temp;
end;

La fonction accède au contenu des emplacements mémoire où sont stockées les variables. C'est beaucoup plus rapide que le passage de paramètre par valeur.

Code source disponible ici.

Paramètre constant

Un paramètre constant ne peut pas être modifié dans la fonction ou procédure. La valeur du paramètre ne pourra changer, c'est comme une constante.

procedure AfficherErreur(const Message_Erreur:string);
begin
  messagedlg(Message_Erreur,mtInformation,[mbOk], 0);
end;

Surchage de méthode (Overloading)

Il peut arriver qu'on doit utiliser la même fonction mais les paramètres ne sont pas du même type. La surchage de méthode comble cette lacune depuis Delphi 4.
Imaginons que nous devons calculer la taxe sur un prix donné. Le prix peut donc être un entier ou un réel. Nous pourrons créer une fonction avec un nom différent pour chaque type de données, mais avec la surchage de méthode, on peut utiliser le même nom de fonction pour chaque type de donnée et même changer le nombre de paramètre. Le compilateur se charge d'appeler la fonction adéquate au paramètre qu'on lui a fourni.

Pour effectuer une surchage de méthode, on doit ajouter le mot overload après la déclaration de la fonction.

function CalculerTaxe(Prix:integer):double;overload;
function CalculerTaxe(Prix:double):double;overload;

Par la suite on définie autant de fonctions qu'on n a déclaré de fonction. On simplie l'écriture de programme en utilisant la surchage.

Code source disponible ici.

Paramètre par défaut

Imaginer que vous employez une fonction ou procédure la majorité du temps les mêmes paramètres, avec Delphi vous pouvez créer des paramètres par défaut. Si vous employez les valeurs par défaut vous omettez les paramètres sinon vous les inscrivez.
La déclaration se fait comme à l'habitude, les paramètres par défaut doivent par contre être placés à la fin de la liste de paramètre.

procedure ShResize(Hauteur,Largeur:double;Taux : double = 2);

Appel de la fonction avec les paramètres par défaut
ShResize(Shape1.Height,Shape1.Width,Taux);

Appel de la fonction sans les paramètres par défaut
ShResize(Shape1.Height,Shape1.Width);

Commentaires

Posts les plus consultés de ce blog

Toshiba AC100 et Android 4

Toshiba AC100 est un smartbook. Toshiba est la seule grosse entreprise qui a commercialisé un smartbook, malgré que plusieurs autres en aient présenté. Un smartbook est similaire à un netbook (taille) en plus d'avoir des caractéristiques souvent proche à un mobile (GPS, 3g, processeur ARM, autonomie). Le Toshiba AC100 utilisait le système d'exploitation Android en version 2.1. Toshiba a effectué une mise à jour Android 2.2. Il a arrêté la commercialisation et le support de cette machine. L'appareil ayant un bon rapport qualité/prix, la communauté le prit en charge. Il est possible d'installer une version beaucoup plus récente d'Android telle que la 4.1. La rom alternative Cyanogen a été utilisée pour ce portage. Les procédures citées ont été faites sous Linux.  Sous Windows, il faut télécharger une version de nvflash pour ce système. Préparation Télécharger les fichiers: cm_ac100-ota-eng.cm10-beta2.zombah.zip recovery.ac100-cm10_beta2.img via ce...

Spring data jpa et Hibernate’s Warning “firstResult/maxResults specified with collection fetch”

Nous verrons dans cet article comment corrigé le problème  Hibernate’s Warning “firstResult/maxResults specified with collection fetch” qui peut survenir lorsqu'il y a un fetch d'effectuer et qu'il y a du paging. Nous utiliserons spring data jpa. Détail structure Imaginons une relation 1 à plusieurs Lorsqu'on obtient un parent, on désire obtenir aussi sa liste d'enfants. En sql, il y aurait une jointure à effectuer. Il est question d'une recherche avancé où on pourrait recherche par plusieurs critères. Spécification Création d'une spécification pour construire une requête dynamique @Component public class ParentSpecification {     public Specification<Parent> recherche(RechercheParent recherche) {         return (root, cq, cb) -> {             Join<Parent, enfant> enfantJoin;              List<Predicate> rootPredicates = new ArrayList<>();       ...

Migration d’une application Spring Boot 2.2 vers Spring Boot 4.0 : retour d’expérience concret

 En 2019, nous avons développé une application métier basée sur : Java 8 Spring Boot 2.2.7 Gradle 6.6.1 Thymeleaf Bootstrap 4.3.1 Environ 40 000 lignes de code Java Fin 2025, voici un retour d’expérience concret sur la migration vers : Java 25 Spring Boot 4.0.1 Gradle 9.2.1 La partie thymeleaf, n'a pas été touché, il y a quelques warning concernant l'obsolescence de certain commande tel que th:include. Une migration plus rapide que prévu Un point important : en moins de 30 minutes, l’application démarrait sur la nouvelle stack. Évidemment, "ça démarre" ne veut pas dire "tout fonctionne", mais ce premier jalon est très révélateur : la base Spring Boot reste solide les outils de migration sont matures la dette technique était maîtrisée Les changements majeurs rencontrés De javax.* à jakarta.* C’est probablement le changement le plus visible. Tous les imports javax.* doivent être migrés ve...