# 15. Fonctions, méthodes et `clsmethod` ## 15.1 Catégories — V1 REQUIS — FIGÉ ```text 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 : ```text opération infaillible -> retourne directement T opération pouvant produire une erreur récupérable -> retourne Result ou Result ``` Exemples infaillibles : ```text method length() -> uint64 method containsKey(K key) -> bool Object::sameInstance(Object other) -> bool func min(int32 a, int32 b) -> int32 ``` Exemples faillibles : ```text func readFile(String path) -> Result method parse(String input) -> Result ``` ## 15.3 Retour explicite — V1 REQUIS — FIGÉ Pas de retour implicite de dernière expression. ```text 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ë. ---