Domanda

Sono ancora molto nuovo per la programmazione e voglio scrivere il codice più pulito possibile.

Questo può sembrare una domanda stupida, ma quale ordine devo mettere i miei metodi? Funzionalmente, naturalmente, non ha importanza, ma il layout fa una differenza enorme. Quindi dire che abbiamo il seguente codice in una classe:

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

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

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

- (NSPersistentStoreCoordinator *)pscMock {
    ...
}

-(void)mockOutXMLStoreForInMemoryStore {
    ...
}

Ho il metodi ordinato nell'ordine in cui essi sono chiamati? Cosa succede se un metodo viene chiamato da due posti all'interno di una classe?

Questo frammento di codice sembra un pasticcio completo per me - è molto confusa per avere a saltare più o meno quanto questo solo per capire che cosa è molto semplice flusso

.

Quale ordine di metodi avrebbe più senso?

È stato utile?

Soluzione

Si dispone di più opzioni per raggruppare i metodi:

  • Per funzionalità (cioè metodi che necessita l'altro sono vicini tra loro)
  • Per visibilità (ad esempio metodi pubblici dichiarati nell'interfaccia vengono prima)
  • Per nome (vale a dire i metodi sono solo allineati secondo il loro nome)

Personalmente preferisco i metodi di gruppo per la loro funzionalità, quindi non hanno bisogno di saltare troppo lontano se traccio il flusso. Con i moderni IDE di cui fare il salto per voi questo non è un grosso problema più però.

Nel tuo esempio specifico, è possibile ridurre il numero di metodi per migliorare la leggibilità. Se i metodi sono tutti molto brevi (2-3 righe) e solo ottenere chiamato da un luogo, si potrebbe INLINE il codice e omette alcuni metodi.

Altri suggerimenti

Ho trovato questo per essere più vero di metodi diversi di classi - ma credo che sia perché sto solo non aver fatto abbastanza:. Tenerlo abbastanza breve, e domande come queste scompaiono

Quindi, per i metodi - ci sono stati a lungo interrogativi sul fatto che per inizializzare tutte le variabili in alto, o per inizializzare loro vicino a dove sono utilizzati (la risposta è vicino a dove sono utilizzati, FWIW) - ma se a mantenere i metodi abbastanza breve, semplicemente non ha importanza. Vicino a dove sono utilizzati è in alto.

Lo stesso vale, almeno in teoria, per le classi: tenerli abbastanza breve, e l'organizzazione interna semplicemente non importa (limitanti e caso impossibile: solo un metodo per classe: è automaticamente in qualsiasi ordine si dichiara). Se le vostre classi hanno così tanti metodi che vi state chiedendo come organizzare - pensare a estrarre alcuni metodi che appartengono insieme nella loro classe. Più piccolo è meglio.

Non c'è non sembra a me essere una risposta definitiva a questo, a meno che non si dispone di uno standard da seguire per il vostro progetto / posto di lavoro. Personalmente, se non sto seguendo un altro standard, ho messo il costruttore (s) per primo, seguito dal distruttore (s). Dopo di che, ho appena messo in ordine alfabetico per nome del metodo. Sono un po 'di un dinosauro (Sono stato di programmazione in quanto l'amministrazione Carter), quindi ho adottato l'approccio alfabetica per le funzioni prima che io abbia mai sentito parlare di programmazione orientata agli oggetti e poco portato sopra quando ho iniziato a fare degli oggetti.

Ho sempre ordinare i miei metodi in questo modo:

primo costruttore / distruttore, poi di accesso, poi gli altri metodi ordinati per importanza.

Metodi importanti prima, in modo che quando apro un file devo scorrere il minimo per raggiungere i metodi più importanti.

Lo stesso vale per pubblico / protetto / privato:. Pubblico prima, in modo tutto ciò che può essere utilizzato da altri file è subito visibile quando si apre il file

Ho avuto anche questo problema. Ho provato a metodi di gruppo in base al ruolo della classe. Questo approccio non funziona davvero, perché è lascia un sacco di cose senza indirizzo. Recentemente ho iniziato ad usare le seguenti convenzioni per Objective-C:

I metodi sono in ordine decrescente di numero di spettatori, con l'eccezione di initialize, init, dealloc, awakeFromNib e convenienza metodi (vale a dire metodi di classe che restituiscono un'istanza di auto-liberato della 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

Sono ancora sicuro al 100% come ordinare ivars nel file di intestazione. Per il momento io li sto per ordinare da responsabilità la gestione della memoria:

//IBOutlets
//other non-retained objects (eg delegates - these can most likely be labeled IBOutlet too)
//primative data types (no mm responsibilties)
//retained objects
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top