2011-10-06 12 views
6

estaba leyendo el código ListAdder muestra, y hay muchas afirma justo después de la variable, o se utiliza en casi todos los métodos, por ejemplo:¿por qué usar 'assert' en un proyecto? (Y por qué usarlo tantas veces)

self.formatter = [[[NSNumberFormatter alloc] init] autorelease]; assert(self.formatter != nil);

o :

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    #pragma unused(tv) 
    #pragma unused(indexPath) 
    UITableViewCell * cell; 

    assert(tv == self.tableView); 
    assert(indexPath != NULL); 
    assert(indexPath.section < kListAdderSectionIndexCount); 
    assert(indexPath.row < ((indexPath.section == kListAdderSectionIndexNumbers) ? [self.numbers count] : 1)); 

Me preguntaba, ¿cuál es el punto de hacer eso?

Gracias

Respuesta

5

Es una implementación de Design by Contract, o DbC.

El objetivo C no tiene soporte nativo para las precondiciones, las condiciones posteriores y las invariantes de DbC, pero especialmente las postcondiciones y las condiciones previas se pueden implementar bastante bien con las macros.

Éstos son algunos otros enfoques para implementar DbC en C Objetivo:

2

El punto de afirmaciones es asegurarse de que los errores aparecen inmediatamente, y en formas fácilmente diagnosticables, en lugar del mal comportamiento tan sutil más adelante. En este caso, el desarrollador de ese código quiere garantizar que se cumplan 4 condiciones después de que se ejecute su código.

2

Las afirmaciones comprueban las suposiciones del programador sobre cómo se invocará el código. Si las suposiciones son incorrectas, la afirmación fallará y emitirá una excepción. Esto hace que el código falle tan pronto como sea posible.

Si esto o no es un punto de debate. Se puede tomar demasiado lejos.

+0

No sé el objetivo C pero en otro idioma s pueden deshabilitarse en el momento compilado para que no ralenticen los sistemas en vivo, pero puede usarlos para la detección de errores durante las pruebas y la puesta en escena. – corsiKa

Cuestiones relacionadas