Aller au contenu

Self, self, self...


Invité ddurandet
 Share

Messages recommandés

Invité ddurandet

Quand je programme, je fais généralement beaucoup de fonctions qui retournent des valeurs... je sais pas si c'est bien mais je trouvais jusqu'ici que ca facilitait la relecture et une construction façon algorythme...

 

Le probleme avec l'objective C, c'est que ca rajoute du self partout.

[self maFonction:[self parametrePourMaFonction]];

[self etc...];

Ca ne peut pas se traduire plus simplement ?

Par exemple, pour rajouter une fonction qui manipule une NSString, on ne peut pas ajouter des fonctions directement au type NSString ? Ou alors c'est trop compliqué ?

Pourtant, je suis sur que c'est ca l'idée de l'objectiveC parce que ca semble plus dans l'esprit d'écrire :

monScoreAuScrable = [monNSString valeurScrabble] * 4;

 

plutot que

monScoreAuScrable = [self valeurScrabble:monNSString] *4

 

???

Lien vers le commentaire
Partager sur d’autres sites

Invité chezseb

La réponse est : les catégories !

Le principe est de créer des méthodes disponibles immédiatement pour une classe particulière : ça permet d'étendre les fonctionnalité de la classe. Je te donne un exemple :

Imagine que tu veuilles une méthode qui te retourne les n premiers caractères d'un NSString.

 

Premièrement, tu crées un nouveau fichier de type "Objective-C class" que nous appellerons DebutChaine

 

Fichier : DebutChaine.h

#import <Foundation/Foundation.h>
@interface NSString (DebutChaine)
-(NSString *)debutChaine:(int)n;
@end

 

Fichier : DebutChaine.m

#import DebutChaine.h
@implementation NSString (DebutChaine)
-(NSString *)debutChaine:(int)n {
   NSRange r;
   if ([self length] < n) {
       return self;
   }
   r.location = 0;
   r.length = n;
   return [self substringWithRange:r];
}
@end

 

A partir de maintenant, il suffit d'importer DebutChaine.h dans tes autres fichiers pour que NSString dispose automatiquement de la nouvelle méthode que tu as créée.

 

...
#import DebutString.h
...
NSString *chaine = @"debut d'une chaine";
NSString *debut;
debut = [chaine debutChaine:3];
// debut vaut @"deb"
...

 

En espérant que ça te fasse progresser

Lien vers le commentaire
Partager sur d’autres sites

Invité ddurandet

C'est exactement ce que je désirais.

Merci chezSeb, tu m'es vraiment indispensable et précieux.

 

Je dis pas que j'ai tout compris, mais je vois ers ou ca s'oriente et comment ça fonctionne, c'est déj

Lien vers le commentaire
Partager sur d’autres sites

Invité ddurandet

OK. Ca marche. Voir mon post sur le copier/coller.

Et les catégories, super. Du coup, j'ai fini plus tot que prévu. je vais profiter de ce temps gagné pour nettoyer mon code et repasser d'autres fonctions en catégories.

 

Merci qui ?

toujours lui : chezSeb.

 

Dis, chezSeb, quand t'en a assez des compliments, tu le dis, parceque c'est pas moi qui vais me lasser le premier. :wub:

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
 Share

×
×
  • Créer...