Quaddro + MacMagazine: programando em Objective-C — classe NSNumber

Declaração - NSNumbers

Continuando nossa série de estudos sobre Objective-C, depois de aprendermos sobre a classe NSString chegou a hora da classe NSNumber e seus métodos de conversões de tipos de dados.

Publicidade

Pré-requisitos

Smooth Criminal, da banda 2CELLOS

Conceitos

Quando começamos os estudos de uma linguagem de programação, além do famoso “OláMundo”, não temos como fugir dos exercícios e testes iniciais com textos e números. Já que no artigo passado eu ensinei um pouco do trabalho com texto, vamos agora mexer com números e alguns recursos da classe NSNumber.

A primeira questão é que, por mais que exista uma classe para trabalhar com números em Objective-C, o núcleo da coisa e principalmente de equações e cálculos ainda são feitos com a boa e velha linguagem C. Isso quer dizer que os tipos int e float seguem firme na programação de aplicativos.

Publicidade

Como a proposta desses artigos é bem prática, vou deixar para explicar boa parte dos novos conceitos durante o exercício prático.

Prática

Vamos criar um novo projeto chamado Classe_NSNumber e começar com as seguintes definições:

Declaração - NSNumbers

O primeiro comentário aqui é quanto à declaração dos objetos. Reparem que não primeira abordagem eu usei um método de criação de um NSNumber a partir de um valor int. Esse método efetua a operação correspondente a um alloc/init tradicional. Essa era a abordagem mais comum para criação de objetos NSNumber até pouco tempo atrás.

Publicidade

Já a segunda abordagem mostra a sintaxe mais recente e infinitamente mais fácil de se criar um objeto NSNumber. Basta inserir um @ antes do número e o sistema já entende que deve tratá-lo como objeto e não tipo primitivo (tipos de C).

Acho importante mostrar as duas versões porque, por mais fácil que seja a segunda forma, quem começar a estudar agora ainda vai encontrar muitos livros, tutoriais e materiais em geral usando a primeira abordagem. Então, pelo sim e pelo não, mostro as duas. 😉

Tendo nossos dois objetos criados, podemos brincar um pouco com eles. Na imagem a seguir eu defino uma expressão simples que utiliza ambas as variáveis para fazer um cálculo:

Problema - Equação

Notem que ao definir a equação temos uma exibição instantânea de erro no Xcode. A questão é que objetos NSNumber não podem ser usados diretamente para cálculos matemáticos. Lembram que eu comentei no começo do artigo que ainda usávamos os tipos primitivos de C?! Pois bem, a hora é essa.

Publicidade

Um NSNumber tem como função armazenar um valor numérico na forma de um elemento orientado a objetos. Um exemplo de uso é com a classe NSArray (tema do próximo artigo), que não suporta números primitivos (int, float) e por isso requer objetos NSNumber.

Para solucionar isso, nós precisamos usar alguns métodos que convertem os valores armazenados para versões primitivas que podem efetuar cálculos. Percebam as mudanças:

Conversões - NSNumbers

No código acima eu usei dois dos métodos mais comuns para essas situações de conversão de objetos NSNumber. Tivemos uma operação para converter para int e outra para converter para float. Para deixar a coisa separada e mais didática, preferi deixar bem explícitas as conversões em novas variáveis. Notem que, com os valores convertidos no NSLog, consegui efetuar os cálculos. Eu poderia ter usado o tipo NSInteger, mas vou deixar para falar dele mais para frente.

No dia-a-dia essa conversão poderia ser feita direto dentro do NSLog ou mesmo na atribuição de um objeto NSNumber para guardar o resultado. Observem:

Conversão - NSLog

É aqui que os iniciantes se confundem e começam a torcer o nariz para a programação — quando temos o resultado de métodos dentro de outros métodos ou funções. Não é nada difícil, mas como o código fica maior e com mais elementos (colchetes, parênteses e afins), se não prestarmos atenção é confusão na certa.

Em linhas gerais, os trabalhos mais comuns com NSNumber são converter valores primitivos para objetos e vice-versa. Apesar de ainda não termos entrado em interface gráfica, um método que será útil em aulas futuras é o que converte números em textos.

StringValue

O método stringValue tem como objetivo converter um objeto NSNumber em uma versão de texto. Às vezes é a forma mais simples e prática para exibir um valor em um UILabel, por exemplo. Já se o intuito for exibir em texto o resultado de um cálculo com valores primitivos, podemos usar o método que eu comentei no último artigo, o stringWithFormat.

Para essa proposta inicial, esses métodos já fornecerão a vocês uns bons testes e estudos. Lembrem-se sempre que uma das melhores formas de aprender uma linguagem de programação é “fuçando”, então testem esses conceitos com tópicos antigos. Tentem criar códigos que mesclem o que já vimos, isso ajuda bastante.

No próximo post vou fazer um apanhado dos últimos artigos, criando códigos mais completos e com diferentes tipos de dados — tudo junto. Por enquanto, abro espaço para dúvidas e debates no tópico oficial, no fórum da Quaddro.

Um abraço e até a próxima!

Posts relacionados