Question

Je suis encore très nouveau à la programmation et je veux écrire le code plus propre possible.

Cela peut sembler une question stupide, mais quel ordre dois-je mettre mes méthodes? Fonctionnellement Bien sûr, il n'a pas d'importance, mais cela fait une layout énorme différence. Donc, dire que nous avons le code suivant dans une classe:

-(void)testCreateProjectWithStartDate {
    [self setUpTestCreateProjectWithStartDate];
    ...
}

-(void)setUpTestCreateProjectWithStartDate {
    testMOC = [self setUpInMemoryStore];
    [self mockOutXMLStoreForInMemoryStore];
}

- (NSManagedObjectContext *)setUpInMemoryStore {
    ...
    NSPersistentStoreCoordinator *coordMock = [self pscMock];
    ...
}

- (NSPersistentStoreCoordinator *)pscMock {
    ...
}

-(void)mockOutXMLStoreForInMemoryStore {
    ...
}

Dois-je les méthodes ordonnées dans l'ordre qu'ils sont appelés? Que faire si une méthode est appelée à partir de deux endroits dans une classe?

Cet extrait de code semble me un désordre complet - il est très déroutant d'avoir à passer à peu près autant que cela juste pour comprendre ce qui est un flux très simple

.

Quel ordre des méthodes serait plus logique?

Était-ce utile?

La solution

Vous avez plusieurs options pour regrouper vos méthodes:

  • Par fonctionnalité (à savoir des procédés qui nécessitent une de l'autre sont rapprochées)
  • Par visibilité (par exemple les méthodes publiques déclarées dans l'interface sont d'abord)
  • Par nom (à savoir les méthodes sont simplement triés par nom)

Personnellement, je préfère les méthodes de groupe par leurs fonctionnalités, donc je ne pas besoin de sauter trop loin si je trace le flux. Avec qui IDE moderne de faire le saut pour vous ce n'est pas un gros problème plus que.

Dans votre exemple précis, vous pouvez réduire le nombre de méthodes pour améliorer la lisibilité. Si vos méthodes sont très courtes (2-3 lignes) et ne s'appelé d'un endroit, vous pouvez en ligne le code et omettez certaines méthodes.

Autres conseils

J'ai trouvé que ce soit plus vrai des méthodes que des classes - mais je pense que c'est parce que je suis tout simplement pas le faire assez. Garder assez court, et des questions comme celles-ci disparaissent

Alors, pour les méthodes - il y a longtemps eu des questions quant à savoir si d'initialiser toutes les variables en haut, ou de les initialiser près d'où ils sont utilisés (la réponse est proche où ils sont utilisés, FWIW) - mais si vous gardez vos méthodes assez court, il n'a pas d'importance. Près de là où ils sont utilisés en haut.

Idem, au moins en théorie, pour les classes: les garder assez courte, et l'organisation interne n'a pas d'importance (limitation et cas impossible: une seule méthode par classe, il est automatiquement dans l'ordre que vous déclarez). Si vos classes ont tant de méthodes que vous vous demandez comment organiser - penser à extraire certaines méthodes qui appartiennent ensemble dans leur propre classe. Plus petit est mieux.

Il y a ne me semble pas être une réponse définitive à cela, sauf si vous avez une norme à suivre pour votre projet / lieu de travail. Personnellement, si je ne vous suis pas une autre norme, je mets le constructeur (s) en premier, suivi par le destructor (s). Après cela, je les ai juste mis dans l'ordre alphabétique par nom de la méthode. Je suis un peu un dinosaure (j'ai été la programmation depuis l'administration Carter), donc j'adopté l'approche alphabétique des fonctions avant jamais entendu parler de la programmation orientée objet et juste portai sur quand je commencé à faire des objets.

Je commande toujours mes méthodes comme ceci:

premier constructeur / destructor, puis accesseurs, puis les autres méthodes classées par ordre d'importance.

méthodes importantes d'abord, quand j'ouvrir un fichier que je dois faire défiler le moins pour obtenir des méthodes les plus importantes.

Idem pour le public / protégé / privé:. Tout d'abord publique, donc tout ce qui peut être utilisé à partir d'autres fichiers est rapidement visible lors de l'ouverture du fichier

J'ai eu ce problème aussi. J'ai essayé des méthodes de groupe basées sur le rôle de la classe. Cette approche ne fonctionne pas vraiment, car il est laisse beaucoup de choses sans adresse. J'ai récemment commencé à utiliser les conventions suivantes pour Objective-C:

Les méthodes sont par ordre décroissant de taille du public à l'exception de initialize, init, dealloc, awakeFromNib et méthodes pratiques (par exemple méthodes de classe, qui renvoient une instance sorti automatiquement de la classe).

//initialze, init, dealloc, awakeFromNib
//convenience methods
//properties
//IBActions
//General public methods
//Delegate methods (eg NSResponder, NSTableview etc)
//Binding and notification call back methods
//private methods

Je suis toujours sûr pas à 100% comment commander ivars dans le fichier d'en-tête. Pour l'instant je les commande par la responsabilité de la gestion de la mémoire:

//IBOutlets
//other non-retained objects (eg delegates - these can most likely be labeled IBOutlet too)
//primative data types (no mm responsibilties)
//retained objects
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top