Carlan+Calazans

{ Às vezes eu sonho com códigos }
fevereiro 18, 2009

Números em Objective-C

Objective-C pode ser considerado um cinto de utilidades baseado no C. Isso significa que todo o poder da linguagem pai está disponível, incluindo as diversas bibliotecas. Em todos os meus testes, quando precisei de tipos numéricos usei os tipos primitivos do C. A pouco tempo descobri que existe um problema nessa abordagem.

Números

4 8 15 16 23 42

Dependendo do uso, acredito que os tipos numéricos do C sejam mais indicados, mas ao desenvolver utilizando algumas classes, como NSArray onde não podemos incluir elementos que não sejam objetos, a coisa começa a complicar. O problema em questão não é a linguagem ou os seus criadores e sim a falta de conhecimento do programador.

Olhando a documentação, depois de uma boa garimpada, é possível encontrar referências que chamam atenção. NSNumber (subclasse de NSValue), NSInteger, NSUInteger. A primeira é a mais utilizada e é uma classe (imutável), o resto são somente sinônimos (typedef) para os tipos numéricos já conhecidos do C. Podemos criar um objeto da classe NSNumber através dos tipos signed (ou unsigned) char, short int, int, long int, float, double e BOOL.

Exemplos:

int i = 123;
float f = 123.45;
char c = 'c';

NSNumber * intObject = [NSNumber numberWithInt:i];
NSNumber * floatObject = [NSNumber numberWithFloat:f];

// isn't useful to me
NSNumber * yesObject = [NSNumber numberWithBool:YES];
NSNumber * noObject = [NSNumber numberWithBool:NO];

NSNumber * doubleObject = [NSNumber numberWithDouble:123.456];

NSNumber * charObject = [NSNumber numberWithChar:c];

NSLog(@"intObject class = %@", [intObject className]);
NSLog(@"floatObject class = %@", [floatObject className]);
NSLog(@"yesObject class = %@", [yesObject className]);
NSLog(@"noObject class = %@", [noObject className]);
NSLog(@"doubleObject class = %@", [doubleObject className]);
NSLog(@"CharObject class = %@", [charObject className]);

// string representation
NSLog(@"\n");
NSLog(@"String value of intObject = %@", [intObject stringValue]);
NSLog(@"String value of floatObject = %@", [floatObject stringValue]);
NSLog(@"String value of yesObject = %@", [yesObject stringValue]);
NSLog(@"String value of noObject = %@", [noObject stringValue]);
NSLog(@"String value of doubleObject = %@", [doubleObject stringValue]);
NSLog(@"String value of CharObject = %@", [charObject stringValue]);

// comparing
// the return will be NSOrderedAscending (greated than), NSOrderedSame (equal to)
// and NSOrderedDescending (less than).
[intObject compare:floatObject];
[floatObject compare:intObject];

7 Comments to “Números em Objective-C”

Leave a Comment



Switch to our desktop site