Question conne
adriker -apple-news.fr-
Membre
Si je veux créer une méthode avec plusieurs paramètres, puis-je le faire de cette façon ?
ex : - (NSString *)apportCalorique:(int)age:(int)activite:(int)sexe;
ex : - (NSString *)apportCalorique:(int)age:(int)activite:(int)sexe;
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
- (NSString *)apportCalorique:(int)age activite:(int)uneActivite sexe:(int)leSexe;
- (NSString*)apportCaloriquePourAge:(int)unAge activite:(int)uneActivite sexe:(int)leSexe;
(j'utiliserai même une version anglaise.. mais ça dépend si t'es à l'aise ou pas avec l'anglais).
Je suis tout à fait d'accord avec toi Eaglelouk, j'avais fait une réponse à la va-vite.
Mais il est clair qu'il faut essayer de donner des noms parlant à ses methodes, variables, etc...
En anglais c'est mieux en général.
Une méthode Objective-C est composée :
- d'un symbole "+" pour les méthodes de classe ou d'un "-" pour les méthodes d'instance (les plus courantes)
- du type de retour entre parenthèses, comme "(NSString*)"
- d'un nom de méthode, par exemple "apportCalorique"
- pour chaque paramètre, un nom optionnel (et pas de nom pour le premier argument où le nom de la méthode sert déjà à ça en fait), suivi de ":", suivi d'un type entre parenthèses, suivi du nom de variable associé au paramètre
Donc pour une méthode sans paramètre par exemple :
[tt] - (NSString*)retourneUneChaine[/tt]
Pour une méthode avec un paramètre :
[tt] - (NSString*)faitUnTrucAvecLeParametre: (NSString*)leParam1[/tt]
Pour une méthode avec deux paramètres :
[tt] - (NSString*)faitUnTrucAvecLeParametre: (NSString*)leParam1 etLeParam:(NSString*)leParam2[/tt]
- En bleu : le nom de ta méthode. Sert aussi souvent de "nom pour le premier argument" en même temps (quand il y en a un). D'où le nommage du genre "...AvecLeParametre:" pour "introduire" le paramètre qui suit
- En vert les variables associées aux paramètres, variables qui recevront les valeurs passées en paramètre lors de l'appel à ta méthode.
- En rouge les noms introduisant les variables. Ces noms sont en théorie optionnels mais je n'ai jamais vu personne les omettre car ils rendent la méthode bien plus lisible
Donc avec ton code tu auras déclaré la méthode "[tt]apportCalorique: : :[/tt]" (remarque les trois ":", chaque ":" introduisant un argument... qui ici n'est introduit par aucun nom justement) mais sans nom pour introduire tes arguments. Ce qui est correct d'après ce qu'autorise la syntaxe d'Objective-C, mais ça veut aussi dire que pour l'appeler, faudra écrire : [tt][self apportCalorique:5 :2 :1][/tt] ce qui est bien moins facile à lire/comprendre que [tt][self apportCaloriquePourAge:5 activite:2 sexe:1][/tt]
Et ce serait encore mieux si au lieu d'entiers (int) tu mettais des enum pour tes arguments "activités" et "sexe" : d'une part ça serait encore plus lisible, mais en plus ça éviterait des éventuelles erreurs lors du codage ou des confusions dans les valeurs, qui seront plus explicites avec un nom qu'un simple entier
J'ai compris ce que tu as en tête, mais en fait cela ne marche pas, et puisqu'une fois n'est pas coutûme, je propose pour mon retour un
[size=12pt]Petit Essai[/size]
#import <Foundation/Foundation.h>
@interface President : NSObject {
}
-(void) faire:(int) avec:(NSString*);
@end
@implementation President
-(void) faire:(int)a avec:(NSString*) s{
// Préciser les modalités
}
@end
#define TACTAC 1
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init];
President * nicolas=[[[President alloc] init] autorelease];
[nicolas faire:TACTAC avec:@Carla];
[pool drain];
return 0;
}
Eh ben ça, ça coince.
Surtout l'autorelease pour Nicolas, j'ai l'impression que cela ne va pas être de la tarte !!! ;D
Si c'est à moi que tu répondais, je pensais à un enum et pas un #define... et adapter donc les arguments en conséquence.
Par contre j'ai fait ton petit essai, je vois pas où ça coince ? A part... qu'il faut mettre des noms aux arguments (derrière le type entre parenthèses, quoi) dans le @interface
Ce qui est normal car si tu le fais pas, rien que pour le premier argument, le "avec" derrière ton "faire:(int)" est pris comme le nom de ta variable pour ton premier argument, du coup ton 2e argument n'a pas de nom... alors qu'avec [tt]faire:(int)a avec:(NSString*)b[/tt] tout passe bien... mais avec [tt]faire:(int)a :(NSString*)b :(NSArray**)c[/tt] aussi (et là les arguments ont une variable associée, mais pas de "nom" pour les introduire)
Allez pour le coup je te payer la bière, comme promis dans les précédents posts, faut bien instaurer la traditionÂ
Je voyais une possible confusion dans le post avec la possibilité (qui est admise en C) de ne pas mettre les arguments dans la déclaration d'une fonction.
void faireAvec(int,NSString*)
Cela apparaà®t dans la question initiale d'Adriker, et au point de vue syntaxique cela ne serait pas impossible, le séparateur ':' en permettant l'analyse au compilateur.
le TACTAC c'est pour le fun ...
Ton invitation à utiliser les énumérations est évidemment excellente.