Objectif C - Pourquoi les constantes de commencer avec k
Pourquoi ne constantes dans tous les exemples que j'ai vu toujours commencer par k? Et dois-je #définir des constantes dans l'en-tête ou le .m fichier?
Je suis nouveau sur Objective-C, et je ne sais pas C. Est-il un tutoriel quelque part qui explique ces sortes de choses, sans prendre connaissance de C?
- Par ailleurs un excellent tutoriel en Objective-C qui ne présumez pas que vous savez déjà C: Programmation en Objective-C par Stephan G. Kochan, à partir de InformIT.com. informit.com/store/programming-in-objective-c-9780321887283
Vous devez vous connecter pour publier un commentaire.
De départ constantes avec un "k" est un héritage de la pré-Mac OS X jours. En fait, je pense que la pratique peut même venir d' façon retour dans la journée, lorsque le Mac OS a été écrit principalement en Pascal, et le principal langage de développement était Pascal. En C,
#define
'd constantes sont généralement écrites en MAJUSCULES, plutôt que de préfixer avec un "k".Comme pour où
#define
constantes:#define
où vous allez les utiliser. Si vous vous attendez à des gens qui#import
votre code pour utiliser les constantes, les mettre dans le fichier d'en-tête; si les constantes sont uniquement destiné à être utilisé en interne, les mettre dans le.m
fichier.extern NSString * const MY_CONST
dans un .h fichier, puis dans une .m fichier mondialNSString * const MY_CONST = @"My Constant";
-- leextern
mot-clé signifie simplement la constante est définie dans un autre fichier.#define
est en fait un rechercher-remplacer; donc, si vous#define MYCONST @"My Constant"
, puis une chaîne sera affecté partout où vous utilisezMYCONST
. Toutefois, si vous utilisezextern NSString * const MYCONST = @"My Constant";
, la chaîne ne seront attribués une fois, et toutes les utilisations deMYCONST
va point à la même chaîne. Pour d'autres#define
'd types de données (par exemple,#define MYCONST 4.0
), il fait peu de différence.Les recommandations actuelles d'Apple pour nommage des constantes ne comprennent pas le " k " préfixe, mais de nombreuses organisations adoption de cette convention et l'utilisent encore, si vous voyez encore beaucoup.
La question de ce que le "k" signifie répondu dans cette question.
Et si vous avez l'intention pour les fichiers autres que particulier
.m
à utiliser ces constantes, vous devez mettre les constantes dans l'en-tête, puisqu'ils ne peuvent pas importer le.m
fichier.Vous pourriez être intéressé de Cacao Dev Central C tutoriel pour le Cacao, les programmeurs. Il explique beaucoup de concepts de base.
k pour "konvention". Sérieusement, c'est juste de la convention.
Vous pouvez mettre un #define où vous le souhaitez; en-tête, dans le .m au-dessus, dans le .m juste à côté de l'endroit où vous l'utilisez. Il suffit de le mettre avant tout code qui l'utilise.
De "l'introduction à objective-c" de la documentation fourni avec Xcode suite d'outils est en fait assez bonne. Lire il y a quelques temps (je tiens à re-lire une fois tous les 2 à 5 ans).
Cependant, ni lui ni aucun de C livres que je suis conscient de vous répondre à ces questions. Les réponses sorte de devenir évidente par l'expérience.
La
k
préfixe vient d'une époque où de nombreux développeurs aimé à utiliser La notation hongroise dans leur code. Dans la notation hongroise, chaque variable a un préfixe qui indique de quel type il est.pSize
serait un pointeur nommé "taille", alors queiSize
serait un entier nommé "taille". Simplement en regardant le nom, vous savez le type d'une variable. Cela peut être très utile, en l'absence d'Ide modernes qui peuvent vous montrer le type d'une variable quelconque, à tout moment, sinon, on aurait toujours à la recherche de la déclaration de la connaître. Suivant la tendance de l'époque, Apple voulait avoir un préfixe commun pour toutes les constantes.Bon, pourquoi pas
c
puis, commec
pour "constant"? Parce quec
était déjà pris, dans la notation hongroise,c
est "compteur" (cApple
signifie "comte de pommes"). Il y a un problème similaire avec leclass
, étant un mot-clé dans de nombreuses langues, alors comment allez-vous le nom d'une variable qui pointe vers une classe? Vous trouverez des tonnes d'attribution de nom de code de cette variableklass
et donck
a été choisi,k
comme dans "konstant". Dans de nombreuses langues, ce mot ne fait que commencer avec un k, voir ici.Concernant votre deuxième question: Vous ne devez pas utiliser
#define
constante à tous, si vous pouvez l'éviter, comme#define
est sans type.Ce type est TOTO? C'est une sorte de nombre. Mais quel type de numéro? Jusqu'à présent tout type ou pas du tout. Type dépendra de comment et où vous utilisez
FOO
dans votre code.Aussi, si vous avez un ensemble fixe de numéros, utiliser un
enum
comme à l'époque, le compilateur peut vérifier que vous êtes en utilisant une valeur valide et les valeurs de l'enum sont toujours constante.Si vous devez utiliser une définition, il n'a pas d'importance où vous le définissez. L'en-tête des fichiers de vous partager entre plusieurs fichiers de code, donc si vous avez besoin de la définir dans plus d'un endroit, vous l'écrivez dans un fichier d'en-tête et d'inclure ce fichier d'en-tête, partout où cela est nécessaire de définir. Ce que vous écrivez dans un fichier de code n'est visible que dans le fichier de code, sauf pour les non-statique des fonctions et de l'Obj-C classes qui sont à la fois à l'échelle mondiale visible par défaut. Mais à moins qu'une fonction est déclarée dans un fichier d'en-tête et que le fichier d'en-tête est inclus dans un fichier de code où vous souhaitez utiliser cette fonction, le compilateur ne saura pas comment cette fonction ressemble (quels paramètres il attend, quel est le résultat de la valeur qu'elle renvoie), de sorte qu'il ne peut pas vérifier tout cela et doit dépendre de ce que vous appelez correctement (en général, cela va l'amener à créer un message d'avertissement). Obj-C classes ne peuvent pas être utilisés, sauf si vous indiquez le code actuel du fichier à moins que ce nom est le nom d'une classe, mais si vous voulez réellement faire quelque chose avec cette classe (autres que de simplement transmettre autour), le compilateur doit savoir l'interface de la classe, c'est pourquoi les interfaces aller dans les fichiers d'en-tête (si la classe est utilisé uniquement dans le code actuel du fichier, l'écriture de l'interface et la mise en œuvre dans le fichier est légal et fonctionnent aussi).
Je crois que c'est à cause de l'ancien prévalence de la Notation hongroise, alors k a été choisi parce que c était pour les caractère de. ( http://en.wikipedia.org/wiki/Hungarian_notation )
--Alan