Concept
Le concept de fonction viens de la notation mathĂ©matique “f(x)” : pour reprĂ©senter le resultat d’une modification d’une valeur abstraite “x” par une sĂ©riĂ© d’opĂ©ration (mutiliplication , addition ect … ) . Mais on peut aussi penser aux fonctions comme Ă des “verbes” dans un language. Certain verbes n’ont pas d’objets comme “dormir” et certain supposent un objet comme “manger qq”.
On peut aussi voir les fonction comme des “tuyaux” dans lesquelles passent les valeurs du programme afin d’ĂȘtre transformĂ©es. Elles ont comme input les “arguments” et comme output une valeur de retour “return”.
L’utilisation des fonctions n’est pas obligatoires pour qu’un programme fonctionne mais elles amĂ©liorent grandement son organisation et sa lisibilitĂ©.
Déclaration
La dĂ©finition d’un verbe dans un dictionnaire est trĂšs proche d’un code de dĂ©claration de fonction.
DĂ©clarer une fonction signifie dĂ©crire son comportement. C’est son “plan d’action” sous forme de code . Le code contenu entre les balises {} sera exĂ©cutĂ© au moment de son “appel”.
function sayhello() {
MessageLog.trace("hello")
}Appel
Pour appeller une fonction et executer son code il suffit d’Ă©crire son nom suivi de parenthĂšses ()
function sayhello() {
MessageLog.trace("hello")
}
sayhello()
sayhello()
sayhello()
// affiche
// hello
// hello
// hello Fonctions avec argument
Les fonctions avec argument ont pour but de “faire quelque chose” avec une variable. Au moment de la dĂ©claration on ne connais pas la valeur de la variable qui va ĂȘtre transmise alors on utilise une abstraction. Quelque chose qui peut varier mais dont le contenu est globalement prĂ©visible comme “aliment” ou “fruit” si on veut parler d’une fonction “manger” par exemple.
Comme dans une dĂ©finition de dictionnaire oĂč l’on prĂ©cise qu’un verbe attends une certains catĂ©gorie de mots aprĂšs lui : parler_Ă (quelqu’un)
Plus simplement : lorsque l’on dĂ©fini un argument on dĂ©fini les “input” de la fonction un peu comme les inports d’un groupe dans la nodeview
function say(_word) {
MessageLog.trace(_word)
}
say("bonjour")
// affiche :
// bonjour
function manger(_aliment) {
MessageLog.trace(" je mange "+_aliment)
}
manger("une pomme")
// affiche :
// je mange une pomme
function stand_up_introduction(_word,_city) {
MessageLog.trace("HEY ")
MessageLog.trace(_word)
MessageLog.trace(_city)
MessageLog.trace("!")
}
stand_up_introduction("bonjour","toulouse")
// affiche :
// HEY
// bonjour
// toulouse
// !
Fonctions avec valeur de retour
Les fonctions avec valeur de retour vont pouvoir donner une valeur lorsqu’elle sont appelĂ©es : Dans cet example la fonction se comporte comme une valeur qu’on transmet Ă la variable “test”
function myfunc() {
return "ma_valeur_de_retour"
}
var test = myfunc()
MessageLog.trace(test)
// affiche ma_valeur_de_retourdans la dĂ©claration on dĂ©cide de la valeur que transmettra la fonction avec le mots clef “return” . C’est l’output de la fonction. Comme dans un groupe dans la nodeview c’est son port out, Ă la diffĂ©rence qu’une fonction ne peut avoir qu’un seul output.
On peut biensur “retourner” une variable dĂ©clarĂ©e dans la fonction
function myfunc() {
var msg= "bonjour"
return msg
}
var test = myfunc()
MessageLog.trace(test)
// affiche bonjourAvec les concepts d’argument et de return on peut maintenant Ă©crire des petites fonctions mathĂ©matiques simples :
function additionner(_A,_B) {
var somme = _A + _B
return somme
}
var resultat = additionner(2,2)
MessageLog.trace(resultat)
// affiche 4Fonctions Imbriquées
On peut tout à fait appeler une fonction dans une déclaration de fonction
function ajouter_flammes(_mots){
return "đ„"+_mots+"đ„"
}
function dire_un_bonjour_en_feu_a(_prenom){
var phrase = " bonjour "+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
var test= dire_un_bonjour_en_feu_a("le chat")
MessageLog.trace(resultat)
// affiche đ„ bonjour le chat ! đ„
on peut Ă©galement dĂ©clarer et appeler une fonction dans une fonction. Lorsque l’on veut dĂ©composer le code d’une fonction complexe par exemple.
On peut écrire le code ci dessus comme ce ci :
// fonction principale
function dire_un_bonjour_en_feu_a(_prenom){
// sous fonction
function ajouter_flammes(_mots){
return "đ„"+_mots+"đ„"
}
var phrase = " bonjour "+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
var test= dire_un_bonjour_en_feu_a("le chat")
MessageLog.trace(resultat)
// affiche đ„ bonjour le chat ! đ„
Le resultat est le meme. En revanche les autres fonctions n’auront plus acccĂšs Ă “ajouter flammes” car elle est dĂ©clarĂ© Ă l’interieur de “dir_un_bonjour_en_feu_a”
Ce code ne fonctionnera pas :
// fonction principale
function dire_un_bonjour_en_feu_a(_prenom){
// sous fonction
function ajouter_flammes(_mots){
return "đ„"+_mots+"đ„"
}
var phrase = " bonjour "+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
// fonction principale
function dire_un_aurevoir_en_feu_a(_prenom){
var phrase = " aurevoir"+_prenom+" ! "
// CETTE FONCTION N'EST PAS VISIBLE D'ICI !
phrase = ajouter_flammes(_phrase)
return phrase
}
var test= dire_un_aurevoir_en_feu_a("le chat")
MessageLog.trace(resultat)
// affiche une erreur
Pour que “aurevoir” et “bonjour” fonctionnent il faudra replacer “ajouter_flammes” Ă l’exterieur
function ajouter_flammes(_mots){
return "đ„"+_mots+"đ„"
}
function dire_un_bonjour_en_feu_a(_prenom){
var phrase = " bonjour "+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
function dire_un_aurevoir_en_feu_a(_prenom){
var phrase = " aurevoir"+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
var test= dire_un_aurevoir_en_feu_a("le chat")
MessageLog.trace(resultat)
// affiche đ„ aurevoir le chat ! đ„
On pourrait encore décomposer nos fonction ainsi :
function ajouter_char_des_deux_cotes(_mots,_char){
return _char+_mots+_char
}
function ajouter_flammes(_mots){
return ajouter_char_des_deux_cotes(_mots,"đ„")
}
function dire_un_bonjour_en_feu_a(_prenom){
var phrase = " bonjour "+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
function dire_un_aurevoir_en_feu_a(_prenom){
var phrase = " aurevoir"+_prenom+" ! "
phrase = ajouter_flammes(_phrase)
return phrase
}
var test= dire_un_aurevoir_en_feu_a("le chat")
MessageLog.trace(resultat)
// affiche đ„ aurevoir le chat ! đ„



































