Desole, j’ai pris une petite pause. Je reprends la lecture.
Découpons du code — Les fonctions
Les éléments de base d’une fonction
"clear, push_back, length" : tu ne parles pas de la difference entre fonction libre et membre ?
Si tu utilises comme exemple des fonctions membres, qui ont une syntaxe specifique pour etre appellee,
cela peut porter a confusion. Peut etre limiter aux fonctions libres dans les exemples.
Retour sur une fonction bien connue
pas sur de cette partie. C’est une bonne chose de commencer un chapitre en faisant le lien vers ce qui est deja connu,
pour faciliter l’assimilation. Mais en fait, tu parles plus des autres fonctions et du type de retour que de la fonction
main. A mon avis : plus insister sur les differentes synthaxes deja vue pour appeler des fonctions, puis aborder main
pour introduire comment definir une fonction
Par exemple :
-
principe general d’une fonction : prendre des infos en entree (optionel) -> faire un traitement -> retourner une info (optionel)
-
exemple de fontions deja vu :
std::begin(str)
str.begin();
std.clear();
auto const it = str.begin();
fonction qui prend des infos en entree
str.resize(100);
- un exemple deja vu de creation de fonction
int main (int argc, char* argv[]) {
}
avec 'int' = information (parametre) retourné, 'int argc, char* argv[]' = informations en entree, 'body' = les
instructions qui constitueront le traitement que la fonction realise.
- presenter le plan du chapitre :
- declaration de fonction
- declaration de parametres en entree ou rien (+ comment appeler la fonction en passant des arguments + comment
utiliser les parametres dans le corps)
- retourner quelque chose ou rien (+ comment retourner quelque chose + comment recuperer l’info dans la code
appellant + on n’est pas obligé d’utiliser la valeur retournée)
- note sur les contrats et erreur : dans un chapitre suivant
Déployons la toute puissance des conteneurs
- pas sur de la place de ce chapitre. C’est un chapitre qui ne concerne pas la creation de fonctions, au milieu de 3 chapitres
sur la creation de fonctions (8, 9 et 11). Et le 10 n’a pas besoin d’etre lu specifiquement etre 9 et 11.
Peut etre changer l’ordre :
- 1 a 7 + 10 : programmation structurée
- 8, 9 et 11 : creer ses propres fonctions
Surtout que j’imagine qu’il y a encore des choses a dire sur les fonctions.
Composants d’une fonction
"ceci étant réservé pour le compilateur" : plutot dire qu’il y a des regles speciales si ca commence par underscore
et qu’il est donc plus simple de ne pas faire.
"Par contre, tout le code situé après un return n’est jamais exécuté" : peut etre preciser que le compilateur peut
signaler ce probleme ? "warning: code will never be executed [-Wunreachable-code]" (clang)
"Soit la fonction retourne une valeur" : peut etre preciser que c’est optionel de recuperer cette valeur retourner ?
int foo() { return 123; }
int const i = foo();
foo();
En soi, ce n’est pas tres important, sauf dans un cas particulier : lorsque la fonction informe
si la fonction a echouer ou non. Dans ce cas, c’est autorise par le compilateur de ne pas recuperer
la valeur, mais en pratique, c’est une mauvaise chose. TOUJOURS recuperer ce type de valeur
et les verifier.
"Mais la question est : comment ?" : je me pose beaucoup de question sur ce type de questions rethoriques.
Utile ? Lourd ? Facilite la lecture. Je ne sais pas trop.
"int repetitions { 3 };" : manque de const.
"Maintenant, on veut retourner un booléen, pour indiquer si tout c’est bien passé." : peut etre preciser
que la gestion des erreurs dans les fonctions est une question plus complexe qu’il n’y parait et qu’il y a
un chapitre dedie sur le sujet.
"On peut très bien lui donner en argument" : un petit mot par rapport aux types des arguments ? Si les types ne
correspondent pas exactement, cela peut fonctionner quand meme. (coercision, promotion, cast). Mais trop
complexe pour le moment, donc utiliser exactement le meme type pour les arguements et parametres.
Cas particulier de bool ? (cast to int) Peut etre interdire bool en parametre…
"int pgcd(int a, int b)" : j’aime bien "lhs" et "rhs". Ca fait plus "pro" quand on utilise ca
Prototypes de fonctions
"le compilateur ne va pas apprécier" : peut preciser que le compilateur interprete le code ligne par ligne ?
Quand il lit une ligne, il connait les lignes au dessus, mais pas encore celle en dessous.
Paramètres obligatoires et optionnels
"des arguments dits optionnels" puis "un paramètre optionnel" puis "les paramètres facultatifs" : parametere
ou argument optionel ? Dans la norme, "default argument". Peut utiliser ce terme plutot que "optionel" ?
Quelles sont vos références ?
Polymorphisme ad-hoc
Il existe 2 types de polymorphisme ad-hoc : la coercition (le type de l’argument est converti pour correspondre au
type du parametre) et la surcahrge. Ici, tu parles que de la surcharge. cf https://cpp.developpez.com/faq/cpp/?page=Programmation-objet-en-Cplusplus#Qu-est-ce-que-le-polymorphisme