70 lines
1.6 KiB
Markdown
70 lines
1.6 KiB
Markdown
# 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<T>
|
|
ou Result<T,E>
|
|
```
|
|
|
|
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<String, IoError>
|
|
method parse(String input) -> Result<Value, ParseError>
|
|
```
|
|
|
|
## 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ë.
|
|
|
|
---
|