interet fonction void

interet fonction void - Flash/ActionScript - Programmation

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...

Reply

Marsh Posté le 31-01-2009 à 09:15:01   

Reply

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 !


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

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?

Reply

Marsh Posté le 02-02-2009 à 10:21:28    

Je viens de trouver ça :
http://www.smithmediafusion.com/blog/?p=380


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

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.

Reply

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.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

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 :
  1. function youpi(): Void{
  2.     maVar1="void";
  3. }
  4.  
  5. function youpi2(){
  6.     maVar2="noVoid";
  7. }
  8.  
  9. youpi();
  10. youpi2();
  11. trace(maVar1+" "+maVar2);


et là, le trace me retourne "void noVoid" alors que j'attendais un "undefinned noVoid"
Qu'est ce qui flanche ?

Message cité 1 fois
Message édité par abais le 03-02-2009 à 09:45:41

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

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 :
  1. function youpi(): Void{
  2.      return "void";
  3.    }
  4.    
  5.    function youpi2(){
  6.       return "noVoid";
  7.    }
  8.     trace( youpi()+" "+youpi2());



Message édité par Zedlefou le 03-02-2009 à 10:58:11

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

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é ..)

Reply

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".
Concernant le Void, j'ai voulu tester, j'ai donc fais ce script :

Code :
  1. function youpi(): Void{
  2.     maVar1="void";
  3. }
  4.  
  5. function youpi2(){
  6.     maVar2="noVoid";
  7. }
  8.  
  9. youpi();
  10. youpi2();
  11. trace(maVar1+" "+maVar2);


et là, le trace me retourne "void noVoid" alors que j'attendais un "undefinned noVoid"
Qu'est ce qui flanche ?


 
 
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

Reply

Marsh Posté le 05-02-2009 à 05:34:34   

Reply

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 ^^


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

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
 

Reply

Marsh Posté le 21-07-2009 à 15:37:38    

J'ai rien compris [:delarue5]  
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 ...


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

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 :o


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 22-07-2009 à 17:14:59    

Rien compris [:pingouino]
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 [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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.
 
 
 

Reply

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.


---------------
Blablaté par Harko
Reply

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 !


Message édité par Patt3rson le 28-07-2009 à 09:36:39
Reply

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.


---------------
Blablaté par Harko
Reply

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é ?


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

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


Message édité par Patt3rson le 28-07-2009 à 09:36:58
Reply

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 ?  
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é ?


 
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.


---------------
Blablaté par Harko
Reply

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 :))
 
 
 

Reply

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.


Message édité par bergolf le 28-07-2009 à 11:45:14

---------------
Et le 5475612973041e jour Dieu inventa le microprocesseur...
Reply

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 [:mlc]
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 [:marc]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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...

Message cité 1 fois
Message édité par bergolf le 28-07-2009 à 12:54:00

---------------
Et le 5475612973041e jour Dieu inventa le microprocesseur...
Reply

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 [:mlc]
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 [:marc]


+1  
 

Spoiler :

[:la_mouche]


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 28-07-2009 à 13:53:35    

bergolf a écrit :


Par contre, ta remarque se rapproche à mon sens beaucoup plus d'un exemple flagrant de "verbosité inutile". Mais ce n'est que mon avis...


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.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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.
 

Reply

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.  ;)

Reply

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 :
  1. int add(int x, int y)
  2. {
  3.    return x+y;
  4. }


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 :
  1. void printMessage(char *msg)
  2. {
  3.    printf("%s", msg);
  4. }


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 ?


Message édité par Harkonnen le 28-07-2009 à 14:54:24

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-07-2009 à 03:14:50    

arf :
 

Code :
  1. trace(maVar1+" "+maVar2);


 
ou comment se compliquer,
plus simple et plus propre de faire
 

Code :
  1. trace(maVar1, maVar2);

Message cité 1 fois
Message édité par stealth35 le 29-07-2009 à 03:15:06
Reply

Marsh Posté le 29-07-2009 à 11:02:08    

stealth35 a écrit :

arf :

 
Code :
  1. trace(maVar1+" "+maVar2);
 

ou comment se compliquer,
plus simple et plus propre de faire

 
Code :
  1. trace(maVar1, maVar2);



Merci pour ce post inutile,
trace en AS2, ne prend qu'un seul paramètre,
en AS3, il en prend plusieurs


Message édité par gatsu35 le 29-07-2009 à 11:02:13

---------------
Blablaté par Harko
Reply

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed