Le fortran est l'un des langages informatiques pionniers. S'il peut paraître archaïque par rapport à nombre de langages modernes, il reste encore très utilisé dans l'industrie et en recherche (souvent sous la version fortran 90) de par l'existence de nombreux "gros" codes et bibliothèques éprouvés depuis de (très) nombreuses années.
"Y en a un qui bouge au fond de la classe !"
Le code que je vous propose ici montre comment implémenter un argument optionnel dans une procédure Fortran 90. Si ce genre de fonctionnalité est très simple à coder dans un langage moderne, il nécessite un certain effort ici.
"Dis donc Machin ! Le tableau c'est devant, pas par la fenêtre !"
"Dis donc Machin ! Le tableau c'est devant, pas par la fenêtre !"
Le code :
SUBROUTINE reprimande(mot1, mot2opt)
IMPLICIT NONE
CHARACTER(LEN = 8), INTENT(in) :: mot1
CHARACTER(LEN = 8), INTENT(in), OPTIONAL :: mot2opt
CHARACTER(LEN = 8) :: mot2
IF (PRESENT(mot2opt)) THEN
mot2 = mot2opt
ELSE
mot2 = "Machin !"
END IF
PRINT*, mot1//" "//mot2
END SUBROUTINE reprimande
PROGRAM instit
IMPLICIT NONE
INTEGER :: i
CHARACTER(LEN = 8) :: a, b
INTERFACE
SUBROUTINE reprimande(mot1, mot2opt)
CHARACTER(LEN = 8), INTENT(in) :: mot1
CHARACTER(LEN = 8), INTENT(in), OPTIONAL :: mot2opt
CHARACTER(LEN = 8) :: mot2
END SUBROUTINE reprimande
END INTERFACE
DO i = 1, 3
a = "Dis donc !"
b= "Toi !"
CALL reprimande(a,b )
a = "KESTUFAY "
CALL reprimande(a)
END DO
END PROGRAM instit
Discussion :
Plusieurs éléments du code (toujours aussi inutile soit dit en passant...) sont indispensables pour avoir effectivement un argument facultatif :
- L'option OPTIONAL dans la déclaration de la variable d'entrée mot2opt.
- La présence d'une seconde variable mot2.
- La structure de contrôle testant la présence de l'argument avec PRESENT.
- Enfin, une interface pour la procédure en question dans le programme principal.
Il est clair que ça ne donne pas envie de rendre des arguments facultatifs vu la quantité de lignes pour une fonctionnalité aussi "basique". Mais ça peut servir occasionnellement.
Pour info, en Ruby c'est plutôt simple :
def reprimander (qui, comment = "")
puts "#{qui}, je te reprimande #{comment}"
end
reprimander "Maxime"
reprimander "Kevin", "SEVEREMENT !"
1 commentaires:
la vache, ton blog a déjà pas mal bougé, je suis impressionné, si,si, même si je n'y pompe rien....
Huuuuuge!!!
Enregistrer un commentaire