Le Tue, 12 Mar 2013 21:12:56 +0100, Olivier <
prog...@free.fr> a écrit:
> Bonjour,
>
>
>
> Je bute sur le message d'erreur suivant : "expected a discrete type"
>
> Je passe une chaîne de caractères à une fonction qui doit la comparer à
> d'autres.
>
> FUNCTION VerifJour (s_Mois : IN String; s_Jour : in integer) RETURN
> Boolean IS
>
> bDateOk : boolean := false;
>
> BEGIN
>
> CASE s_Mois IS <- Erreur sur s_Mois : "expected a discrete type"
Ludovic a déjà répondu, j’ajoute seulement pour compléter et comprendre :
si Ada attend un type discret, c’est parce que Ada attend une couverture
exhaustive des cas, et c’est là justement l’intérêt de la construction
`case` en Ada.
Exemple:
type T is (A, B, C, D);
X : T = …;
-- suite
case X is
when A => …;
when C => …;
when D => …;
end case;
Dans un tel cas, Ada va râler et se plaindre qu’on a oublier le cas où `X`
est `B`, c’est ça l’intérêt (sauf si on utilise le cas `when others =>`,
que personnellement je n’aime pas à cause de la faille potentielle qu’il
présente).
La construction `case`, si elle s’appliquait aux types non‑discret,
pourrait s’appliquer à un ensemble potentiellement énorme (pas infini en
pratique, mais énorme) de valeur différentes, qu’il se serait plus
possible de prévoir ou de restreindre de manière déterministe.
Imagine la même construction `case` que ci‑dessus, mais avec `X` du type
`String`. Il est in‑envisageable que Ada puisse garantir la couverture de
tous les cas possibles avec un type `String`.
Voilà dans le principe, la raison pour laquelle Ada requière un type
discret… en fait, l’intention et de requérir un type dont l’ensemble des
valeur possible soit déterministe et prévisible, d’une manière raisonnable
(notes que cela exclus donc les type à flottant aussi des types possibles
pour une construction `case`).
Quand tu ne peux pas utiliser `case`, tu peux utiliser `if/elsif/else/end
if`.
P.S. C’est bizarre, je reçois toujours les messages de la version FR avec
plusieurs jours de retard :-/
--
“Syntactic sugar causes cancer of the semi-colons.” [1]
“Structured Programming supports the law of the excluded muddle.” [1]
[1]: Epigrams on Programming — Alan J. — P. Yale University