Pregunta

Todavía soy muy nuevo en la programación y quiero escribir el código más limpio posible.

Esto puede sonar como una pregunta tonta, pero ¿qué orden debo poner mis métodos en? Funcionalmente, por supuesto, no importa, pero la distribución se hace una gran diferencia. Así que decir que tenemos el siguiente código en una clase:

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

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

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

- (NSPersistentStoreCoordinator *)pscMock {
    ...
}

-(void)mockOutXMLStoreForInMemoryStore {
    ...
}

¿Tengo los métodos ordenados en el orden en que se llaman? ¿Qué pasa si un método es llamado desde dos lugares dentro de una clase?

Este fragmento de código es un completo desastre para mí - es muy confuso a tener que saltar tanto como esto sólo para averiguar lo que es un flujo muy simple

.

¿Qué orden de los métodos tendría más sentido?

¿Fue útil?

Solución

Tiene varias opciones para agrupar los métodos:

  • Por funcionalidad (es decir, métodos que se necesitan mutuamente están muy juntas)
  • Por visibilidad (por ejemplo métodos públicos declarados en la interfaz vienen primero)
  • Por nombre (es decir, métodos son sólo ordenadas por su nombre)

En lo personal prefiero métodos de grupo por su funcionalidad, por lo que no es necesario saltar demasiado lejos si rastrear el flujo. Con moderna IDE de la cual hacer el salto para que esto no es un gran problema más sin embargo.

En el ejemplo específico, es posible que desee reducir el número de métodos para mejorar la legibilidad. Si sus métodos son todos muy corto (2-3 líneas) y sólo se les llama desde un solo lugar, usted podría Inline el código y omite algunos métodos.

Otros consejos

He encontrado que esto es más cierto de los métodos que de clases - pero creo que es porque simplemente no estoy haciendo lo suficiente:. Mantenerla lo suficientemente corto, y preguntas como éstas desaparecen

Por lo tanto, para los métodos - no han sido durante mucho tiempo preguntas sobre si para inicializar todas las variables en la parte superior, o inicializarlas cerca de donde se usan (la respuesta está cerca de donde ellos están acostumbrados, fwiw) - pero si a mantener sus métodos lo suficientemente corto, simplemente no importa. Cerca de donde se usan es en la parte superior.

Lo mismo sucede, al menos en teoría, para las clases: a mantenerlos lo suficientemente corto, y la organización interna simplemente no importa (y limitar caso imposible: sólo un método por clase, es automáticamente en el orden que se declara). Si sus clases tienen muchos métodos que se pregunta cómo organizar - pensar en la extracción de algunos métodos que pertenecen juntos en su propia clase. Más pequeño es mejor.

Hay no me parece que sea una respuesta definitiva a esto, a menos que tenga un estándar a seguir para su proyecto / lugar de trabajo. Personalmente, si yo no estoy siguiendo otro estándar, puse el constructor (s) en primer lugar, seguido por el destructor (s). Después de eso, sólo ponerlos en orden alfabético por el nombre del método. Soy un poco de un dinosaurio (he estado programando desde la administración Carter), por lo que adoptó el enfoque alfabético para las funciones antes de haber oído hablar de la programación orientada a objetos y solo llevaba encima cuando empecé a hacer objetos.

Yo siempre pedir mis métodos de esta manera:

primera constructor / destructor, entonces descriptores de acceso, entonces los otros métodos ordenados por importancia.

métodos importantes en primer lugar, por lo que cuando abro un archivo que tengo para desplazarse al más pequeño hasta llegar a los métodos más importantes.

Lo mismo para público / protected / privada:. Pública en primer lugar, por lo que todo lo que se puede utilizar desde otros archivos de forma rápida es visible al abrir el archivo

He tenido este problema también. Yo probé a métodos de grupo basadas en el papel de la clase. Este enfoque no funciona muy bien porque es deja muchas cosas sin dirección. Recientemente he comenzado a usar las siguientes convenciones para Objective-C:

Los métodos son en orden decreciente de tamaño de la audiencia con la excepción de los métodos initialize, init, dealloc, awakeFromNib y de conveniencia (es decir, métodos de la clase que devuelven una instancia auto-lanzado de la clase).

//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

Aún no estoy 100% seguro de cómo ordenar ivars en el archivo de cabecera. Por el momento les estoy ordenando por la responsabilidad de gestión de memoria:

//IBOutlets
//other non-retained objects (eg delegates - these can most likely be labeled IBOutlet too)
//primative data types (no mm responsibilties)
//retained objects
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top