interet fonction void - Flash/ActionScript - Programmation
Marsh Posté le 01-02-2009 à 22:47:58
Void signifie que ta fonction ne renvoie aucune valeur en externe, ça la rend donc sensiblement plus légère à l'exécution...
A confirmer par les experts !
Marsh Posté le 02-02-2009 à 00:09:21
bjr
merci de repondre mais si je met pas ca a chaque fois que je mets un code ca va planter le code alors et pourquoi?
Marsh Posté le 02-02-2009 à 10:21:28
Je viens de trouver ça :
http://www.smithmediafusion.com/blog/?p=380
Marsh Posté le 02-02-2009 à 18:42:04
Ne pas comprendre a quoi sert une function qui ne renvoie pas de valeur, c'est avoir de très sérieuses lacunes en programmation d'une manière générale...
Il faut reprendre (apprendre ?) la base, ce serait déjà un bon début.
Marsh Posté le 03-02-2009 à 04:28:54
C'est du typage. C'est une question d'organisation du bidule pour definir, cette fonction me renvoit un nombre, celle-ci une chaine, celle-ci ne renvoit rien.
En AS3 c'est devenu indispensable et c'est pas plus mal.
Marsh Posté le 03-02-2009 à 08:53:30
Moi j'aimais bien la tolérance d'AS2, nous les graphistes on arrivait à "programmer".
Concernant le Void, j'ai voulu tester, j'ai donc fais ce script :
Code :
|
et là, le trace me retourne "void noVoid" alors que j'attendais un "undefinned noVoid"
Qu'est ce qui flanche ?
Marsh Posté le 03-02-2009 à 10:57:14
Quand ta fonction ne renvoie rien (Void) ca veut pas dire qu'il n'y a rien dedans mais juste qu'il n'y a pas de "return" dedans.
Essaie ca plutot :
Code :
|
Marsh Posté le 04-02-2009 à 11:15:43
bjr
ouais be j'ai l'impression que c'est comme dans le cours de mateo en php (siteduzero) quand on comprend pas un truc tordu tu le mets et tu pose pas de questions (fonctionnement de isset)je vais mettre void a chaque fois comme ca tout est nikel je precise quand meme pour les critiques a 3 balles (ne pas comprendre etc..)
je suis un tuto en anglais donc c'est encore + difficile de suivre ( en francais j'ai pas trouvé ..)
Marsh Posté le 05-02-2009 à 05:34:34
abais a écrit : Moi j'aimais bien la tolérance d'AS2, nous les graphistes on arrivait à "programmer".
|
Ce qui flanche c'est que tu as mis void entre quotes, et donc maVar1 est une string.
Et sinon les déclarations de variable je vois que tu te les mettais dans le cul.
Encore heureux qu'AS3 est arrivé et à posé des verrous partout, avec AS1 et AS2 c'était la porte ouverte au codage de porc
Marsh Posté le 09-02-2009 à 15:39:35
Oui j'ai déclarer comme un porc pour ce test, je profitais de l'as2, et rassure toi, je code plus proprement depuis que AS3 me l'impose (formation autodidacte oblige ), mais là n'est pas la question... D'autant plus que le "void" de maVar1 est un texte mis au pif, et non le typage de la fonction elle même...
Merci Zed, j'ai compris maintenant ^^
Marsh Posté le 21-07-2009 à 14:19:15
Hello,
bon je me permet d'ajouter ma pierre à l'édifice avec une analogie compréhensible par moi même (c'est déjà bien) et qui m'a permis de comprendre à quoi sert la constante void.
Bien admettons que je sois un objet qui fasse partie d'une classe (humain). Si je suis une occurence de la classe 'humain' et que cette dernière à la création soit construite avec la constante 'void' cela veut dire que les valeures de toutes les propriétés des objets dynamiques (moi), taille, couleur, yeux, cheveux, etc ... est définé sur "undefined" et que par conséquent si je veux des yeux bleus je vais par exemple dans la fonction qui code pour les yeux bleus faire appel à un "object" de type bitmap qui contiendra la couleur de mon oeil.
Cela permet en fait de créer une classe/fonction/variable qui ne type pas de paramètres. (String, Number, Int, ...)
Si dans la classe humain (dont je fais partie en qualité d'objet dynamique) on attendait comme type "object" et que je suis une occurence de cette même classe je ne pourrai avoir de type "number" pour définir mon nombre de doigt de pied. (Pour faire super simple)
Voilà j'espère avoir été clair. Je fonctionne avec cette analogie depuis le départ.
Bien sur elle est surement pas parfaite, si vous souhaitez affirmer ou infirmer ne vous géner pas
Courage à vous
Marsh Posté le 21-07-2009 à 15:37:38
J'ai rien compris
Tu as réussi à rendre compliqué un truc simple ...
Void, dans une déclaration de fonction, sert à déterminer le type de ce qui va être renvoyé par "return".
Très souvent, la fonction n'a pas de return/ne renvoie rien. Donc on met Void.
C'est tout ...
Marsh Posté le 22-07-2009 à 17:03:43
C'est marrant le chemin que j'ai fait en 5 mois...
Mais c'est vrai que c'est pas évident à comprendre en autodidacte...
Surtout quand on commence par l'AS, on a pas vraiment la nécessité des retour de fonction... au début
Marsh Posté le 22-07-2009 à 17:14:59
Rien compris
Une fonction renvoie des valeurs de différents types ou ne renvoie rien. Si elle ne renvoie rien, alors on indique "void" comme type de retour. "void" = "vide".
Pourquoi s'embrouiller avec des analogies bizarres
Marsh Posté le 22-07-2009 à 22:15:06
oui .. c'est vrai qu'avec 2 jours de recul ca fait plus sac à embrouilles qu'autres choses. Mes excuses. (je préfère ne pas éditer pour l'instant et vous laisser réagir sur le post)
Pourquoi des analogies : pour rendre accéssible avec des exemples comréhensible des concept parfois abstraits
Ce que je remarque sur ce fofo ("interet fonction void" ) c'est que nombre d'entre vous apportent des exemples de prog concret avec des explications de "programmation" mais que personne ne se met au niveau du créateur du sujet. Ce pourquoi j'ai tenté (avec ma vision) d'apporter une analogie, certes sans succés je vous l'accorde.
Ferai mieux la prochaine fois.
Marsh Posté le 22-07-2009 à 23:39:07
Ben tu fais une analogie avec des objets, des occurences, et tout un tralala qui n'a rien à voir avec le fait qu'une fonction retourne ou pas une valeur d'un certain type.
Marsh Posté le 25-07-2009 à 10:58:21
Bon je refait mon analogie de manière plus compréhensible.
//correction apportée : remplacement du mot "constante" par "type spécial"
//correction de l'utilité de 'Null'
/*Considérons que ce matin je me rend chez le médecin. Sous entendu que je n'y vais pas pour lui lire le journal. J'y vais car je suis malade.
Je n'ai pas besoin de retourner une information à ce stade du projet alors j'écris le type spécial : void{ à la fin de ma déclaration de fonction*/
//"moi" c'est un objet qui me représente (je suis un movieclip par ex.)
function aller_chez_medecin () :void{
moi.gotoAndStop();
}
/*Maintenant la consultation se déroule et le médecin me demande de l'argent (l'enflure !). Bien sur le médecin attend que je lui donne une valeur numérique (Number) correspondant à la somme demandée (a). Alors, quand je déclare ma fonction "payer_doc" je vais écrire 'Number'. */
function payer_doc(a:Number):Number {
return (a);
}
trace(21);
// si le médecin me demande 21 euros je vais lui "retourner" 21 euros.
Il y à surement des fautes de syntaxes mais l'important est de comprendre que la constante 'void' a comme seule retour (return) : "undefined".
Si j'attend une valeur numérique, un texte, ou un type précis quand j'appelle 'return' à ce moment je l'écris à la fin de ma déclaration de fonction. (:Number, :String, etc ...)
Si j'attend "rien" il existe la le type spécial 'null'. Représente l'absence de type
On comprend alors que 'Void' est un type spécial qui s'écris quand on appelle pas 'return' dans les lignes de codes.
J'espère avoir été plus clair et plus pédagogique que précedement !
Marsh Posté le 26-07-2009 à 13:35:20
void n'est pas une constante, c'est un mot clé du langage pour dire qu'une fonction ne retournera RIEN, RIEN DU TOUT
http://fr.wikipedia.org/wiki/Void
ensuite, si tu attends 0, ben c'est 0 que ta fonction devra retourner, pas null.
null n'est pas une constante, c'est un mot clé du langage pour dire "rien", "vide" "keudal", mais pas 0, 0 étant un chiffre ayant une signification, et si ta fonction retourne 0, dans ce cas elle devra retourner un int ou un Number.
Une fonction déclarée avec void, ne devra n'avoir aucun "return" dans son corps.
Marsh Posté le 26-07-2009 à 17:17:54
En restant sur ce sujet.. vu que le "void" n'est pas obligatoire pour dire à une fonction de gober tout en fermant sa gueule (analogie aussi débile qu'impolie, je sais), je suppose qu'elle apporte un gain en terme d'optimisation ?
En AS3, le fait de restraindre l'étendu d'une variable ou d'une fonction (private...), est ce que ça apporte un gain en terme de rapidité ?
Marsh Posté le 28-07-2009 à 09:31:43
Yop correction en effet ce n'est pas une constante (confusion dans mon idée avec autre chose).
J'ai édité le méssage
Pour ceux qui comprenent l'anglais je link l'aide officiel de Adobe pour CS4 :
http://help.adobe.com/en_US/AS3LCR [...] Types.html
Bon courage à tous
Marsh Posté le 28-07-2009 à 10:18:10
abais a écrit : En restant sur ce sujet.. vu que le "void" n'est pas obligatoire pour dire à une fonction de gober tout en fermant sa gueule (analogie aussi débile qu'impolie, je sais), je suppose qu'elle apporte un gain en terme d'optimisation ? |
Quand on programme correctement, on met les types sur les arguments que recevra la fonction et on met son type de retour.
Si cette fonction ne renvoit rien, ben ça sera void et puis c'est tout.
Marsh Posté le 28-07-2009 à 11:04:40
Un peu de philosophie !
Gatsu35 est à la diplomatie ce que Delon est à l'humour : antagonique !
A prendre avec philosophie bien sur )
Marsh Posté le 28-07-2009 à 11:39:20
L'indication
: Void
apporte bien quelque chose, même en dehors d'un raisonnement en terme de performances : elle apporte de la clarté au code en permettant d'identifier ta fonction par sa signature (son nom, ses arguments, son retour). En clair ça permet de retrouver d'un coup d'oeil ce que sont, attendent et font tes fonctions.
Pour parler en terme d'analogies, et en revenir à ce charmant médecin, tu pourrais distinguer rapidement ces deux fonctions :
payer(prix:number):number
et
payer(prix:number):void
L'une des deux impliquant un mode de payement entraînant un rendu de monnaie (celle retournant un number) et l'autre un paiement précis (CB...) qui n'a pas besoin de retour puisque sans rendu de monnaie. Le prix à payer étant dans les deux cas en argument ici.
Marsh Posté le 28-07-2009 à 12:22:45
Mais Grands Dieux, que de verbosité inutile pour un pauvre mot clé signifiant qu'une fonction ne renvoie rien
Qu'est ce que ça sera quand vous passerez au C++ et à ses merveilleux dynamic_cast, auto_ptr et autres joyeusetés de <functional> par exemple
Marsh Posté le 28-07-2009 à 12:47:19
Bah j'ai commencé par java avant de passer au C++
(Et je n'ai jamais fait d'asr, d'où ma réponse exempte de détails techniques relatifs à ce beau monde...)
Toutefois je ne trouve pas cette verbosité si inutile, puisqu'elle aspire à promouvoir la programmation propre et aisément entretenable...
On commence par ne pas mettre ces void là (ou par les mettre juste parce que "ce sera void et puis c'est tout" ), et on finit par ne jamais mettre un seul commentaire dans tout le code, ou des blagues du genre "paramètre entier" qui ne servent à rien à part dire "si si, j'en ai des commentaires!".
D'autre part je n'expliquais pas là ce mot clé, il me semble que ceci a déjà été fait dans les posts précédents ; mais l'intérêt de le voir figurer, qu'il soit imposé ou non. Ceci pour répondre partiellement à la question de abais.
Par contre, ta remarque se rapproche à mon sens beaucoup plus d'un exemple flagrant de "verbosité inutile". Mais ce n'est que mon avis...
Marsh Posté le 28-07-2009 à 13:41:39
Harkonnen a écrit : Mais Grands Dieux, que de verbosité inutile pour un pauvre mot clé signifiant qu'une fonction ne renvoie rien |
+1
Spoiler :
|
Marsh Posté le 28-07-2009 à 13:53:35
bergolf a écrit : |
Ma remarque est tout simplement la remarque de quelqu'un qui est étonné qu'un mot clé aussi simple suscite un topic aussi touffu... Je ne vois pas ce qui est incompréhensible quand on dit que "void" stipule qu'une fonction ne renvoie aucune valeur. Si on ne comprend pas ça, ça veut dire qu'on a pas compris le concept de fonction et là ce sont carrément les bases de la programmation qui sont à revoir.
Ce topic est aussi utile qu'un éventuel topic qui demanderait si le cast du malloc est obligatoire ou non.
Quant à l'éventuel gain de performance apporté par le fait que "void" soit mentionné ou non, je vous invite à désassembler une fonction avec void et une fonction sans void pour vous rendre compte que le source assembleur généré est strictement identique dans les 2 cas.
Marsh Posté le 28-07-2009 à 14:24:33
Peu importe la longueur du fofo ... Pour ma part je me moque que "ça" prenne 362 méssages pour expliquer une fonction d'un language de prog.
L'important c'est de voir que la communauté vit et réagit en partageant idée et astuces.
Voir qu'un modérateur de forum est surpris du nombre de méssages postés pour expliquer un concept qui lui parait être simple de compréhension manque de discernement concernant un publique plus néophyte.
dommage.
Marsh Posté le 28-07-2009 à 14:45:39
Patt3rson a écrit : Pour ma part je me moque que "ça" prenne 362 méssages pour expliquer une fonction d'un language de prog. |
Peut-être pour toi mais pas pour celui qui veut une réponse claire et simple. C'est bien de vouloir expliquer les choses mais parfois il faut mieux être concis et compréhensible. Pour un simple void pas besoin d'en faire 3 tonnes.
Marsh Posté le 28-07-2009 à 14:53:17
Patt3rson > Ce n'est pas le modérateur qui est surpris, mais le simple forumeur. Tu ne te rends pas compte que l'analogie que tu as posté plus haut est tellement complexe et capillotractée qu'elle ne fait que t'embrouiller plus qu'autre chose.
Prends l'exemple d'une bête fonction qui effectue une addition d'entiers et qui renvoie donc le résultat sous forme d'entier (en C)
Code :
|
Là j'ai stipulé le type de retour "int" car la fonction renvoit le résultat de l'addition qui est aussi un entier. Si j'avais indiqué "void", la fonction n'aurait rien renvoyé (et j'aurais pas mis de "return" à la fin), la rendant du coup totalement inutile (à quoi ça sert de créer une fonction qui effectue une addition si je ne renvoie pas le résultat de ladite addition ?)
Maintenant, regarde ce code :
Code :
|
Cette fonction se contente d'afficher sur la console la chaine de caractères qu'on lui envoie en paramètre. Nul besoin ici de renvoyer quoi que ce soit, donc pas de "return", et un "void" pour indiquer que la fonction ne renvoie rien.
Franchement, ou est la difficulté dans ceci ?
Marsh Posté le 29-07-2009 à 03:14:50
arf :
Code :
|
ou comment se compliquer,
plus simple et plus propre de faire
Code :
|
Marsh Posté le 29-07-2009 à 11:02:08
stealth35 a écrit : arf :
ou comment se compliquer,
|
Merci pour ce post inutile,
trace en AS2, ne prend qu'un seul paramètre,
en AS3, il en prend plusieurs
Marsh Posté le 29-07-2009 à 15:58:44
sauf qu'ici on est entrain de parler d'AS3,
je vois aucun intérêt a débattre sur de vielles technologies.
Marsh Posté le 31-01-2009 à 09:15:01
bjr
voila a chaque fois dans le tuto que je suis le mec il met toujours
par ex
function animate (): Void{
}
est ce qu'il faut la mettre a chaque fois qu'on met un code sans se poser de questions
je pige pas l'interet de cette function
merci de m'ecliarer...