1.6 KiB
1.6 KiB
15. Fonctions, méthodes et clsmethod
15.1 Catégories — V1 REQUIS — FIGÉ
func fonction libre
method méthode d'instance
clsmethod méthode de classe
operator implémentation d'un contrat opérateur
15.2 Retours directs et Result — V1 REQUIS — FIGÉ
L'ancienne règle « toute fonction/méthode retourne Result » est supprimée.
Règle V1 :
opération infaillible
-> retourne directement T
opération pouvant produire une erreur récupérable
-> retourne Result<T>
ou Result<T,E>
Exemples infaillibles :
method length() -> uint64
method containsKey(K key) -> bool
Object::sameInstance(Object other) -> bool
func min(int32 a, int32 b) -> int32
Exemples faillibles :
func readFile(String path) -> Result<String, IoError>
method parse(String input) -> Result<Value, ParseError>
15.3 Retour explicite — V1 REQUIS — FIGÉ
Pas de retour implicite de dernière expression.
return value;
return Result::Ok(value);
return Result::Ok(Void);
return quitte la fonction/méthode.
15.4 Surcharge — V1 REQUIS — FIGÉ
Surcharge autorisée pour fonctions et méthodes.
La signature ne contient pas le type de retour.
Il ne peut donc pas exister deux overloads distingués uniquement par leur retour.
15.5 Résolution de surcharge — V1 REQUIS — À FINALISER
Les règles exactes de préférence entre exact match, conversions explicites/contextuelles, generics et variadiques doivent être figées.
Objectif : aucune résolution basée sur le type de retour et aucune conversion implicite ambiguë.