Par rapport à ton exemple, je pense qu'ADA propose également des solutions robustes du point de vu typage (et c'est un peu l'objectif de ce langage...).
Le code
WITHAda.Text_IO;USEAda.Text_IO;PROCEDUREVariantISTYPEPolitiqueThreadCaseIS(NombreFixe,NombreMaximumHardware,PasDeThreading,CasParticulier);TYPEPolitiqueThread(Politique: PolitiqueThreadCase:=PasDeThreading)IS-- valeur par défaut obligatoireRECORDCASEPolitiqueISWHENNombreFixe=>NombreThread:Positive;-- alias pour : Integer RANGE 1..Integer'LastWHENOTHERS=>NULL;ENDCASE;END RECORD;PROCEDURETestPolitique(Pol: INPolitiqueThread)ISBEGINCASE(Pol.Politique)ISWHENNombreFixe=>Put_Line("Nombre fixé à"&Integer'Image(Pol.NombreThread));WHENNombreMaximumHardware=>Put_Line("Fait chauffer la ferme de calcul");WHENPasDeThreading=>Put_Line("Plutôt tranquille");WHENCasParticulier=>Put_Line("Celui-ci je ne l'aime pas");ENDCASE;ENDTestPolitique;MaPolitique:PolitiqueThread;BEGINTestPolitique(MaPolitique);-- Par défaut : PasDeThreadingMaPolitique:=(NombreFixe,8);TestPolitique(MaPolitique);MaPolitique:=(Politique=>NombreMaximumHardware);TestPolitique(MaPolitique);MaPolitique:=(Politique=>CasParticulier);TestPolitique(MaPolitique);MaPolitique:=(NombreFixe,0);-- Warning: "Constraint Error will be raised at Runtime"EXCEPTIONWHENCONSTRAINT_ERROR=>Put_Line("n est trop bizarre...");ENDVariant;
Le résultat
Plutôt tranquille
Nombre fixé à 8
Fait chauffer la ferme de calcul
Celui-ci je ne l'aime pas
n est trop bizarre...
Exceptions
Donc, ça permet de gérer automatiquement le cas d'une valeur négative. Ada permet d'ajouter très simplement des tests au Runtime avec l'option RANGE. Très utile pour les tableaux également. Si l'on souhaite privilégier la performance, il est aussi possible de compiler en désactivant ces tests à l'exécution :
pragmaSuppress(Range_Check);
On a droit également à une exception si on tente d'accéder ou de modifier un champ alors que le discriminant n'est pas le bon :
# Solution à base de types variants en ADA
Posté par gerfaut83 (site web personnel) . En réponse à la dépêche Sortie de GHC 8.0.2 et une petite histoire de typage statique. Évalué à 7.
Par rapport à ton exemple, je pense qu'ADA propose également des solutions robustes du point de vu typage (et c'est un peu l'objectif de ce langage...).
Le code
Le résultat
Exceptions
Donc, ça permet de gérer automatiquement le cas d'une valeur négative. Ada permet d'ajouter très simplement des tests au Runtime avec l'option RANGE. Très utile pour les tableaux également. Si l'on souhaite privilégier la performance, il est aussi possible de compiler en désactivant ces tests à l'exécution :
On a droit également à une exception si on tente d'accéder ou de modifier un champ alors que le discriminant n'est pas le bon :
La solution Ada est comme souvent un peu verbeuse, mais garde une bonne lisibilité.