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

Declaração - NSDictionary

Nos dois últimos textos eu ensinei vocês a trabalhar com coleções ordenadas por índices numéricos, isto é, array. Agora chegou a hora de trabalharmos com uma segunda forma de coleção, os dicionários.

Requisitos

Voodoo People, da banda The Prodigy

Conceitos

Antes de falar sobre dicionários, é importante repassar o conceito principal de array. Podemos definir um array como uma coleção de objetos ordenados por um índice numérico. Isso quer dizer que, para acessar um elemento, usamos o número de seu índice. A proposta de dicionário também é criar coleções, porém a mudança está exatamente na forma de como “indexamos” esses elementos.

Um objeto NSDictionary é por definição uma coleção de objetos ordenados por chaves associativas. Confuso?! Imagine que em vez de usar um número para acessar os elementos, agora nós usamos uma “chave”. Para ficar um pouco mais fácil (principalmente para quem está começando), pense nessa chave como um nome, pelo menos por enquanto.

Em uma comparação direta, em vez de eu acessar “o elemento do índice 2”, nós vamos acessar “o elemento da chave empresa”. De bate-pronto a coisa já parece mais amigável, compreensível e ordenada. Leia novamente esses exemplos de forma de acesso; você perceberá que trocamos o número (de certa forma meio abstrato) por uma “chave” muito mais representativa.

Partindo dessa premissa podemos concluir que, de certa maneira, o trabalho com NSDictionary é mais “estruturado” do que o com array. É importante frisar que não existe certo e errado aqui: cada tipo de coleção possui suas vantagens e melhores aplicações. Mas de certa forma, não dá para negar a melhor compreensão e legibilidade de um código usando dicionário.

Mas chega de falação e vamos à prática para vocês entenderem bem a coisa.

Prática

Vamos começar criando um novo projeto chamado Classe_NSDictionary, com as seguintes definições iniciais:

Declaração - NSDictionary

Mais uma vez ensino para vocês tanto a antiga quanto a moderna forma de declaração de objetos NSDictionary. A declaração clássica (que ainda é facilmente encontrada em livros e tutoriais) utiliza um alloc/init e tem como ordem “objeto”, “chave”. Já a abordagem mais moderna usa o tipo literal, o qual permite, além de uma bela enxugada, (notem que não usamos mais o nil), uma ordenação mais sensata, com “chave” : “objeto”. Essa é inclusive a forma de trabalho com JSON.

Com um objeto declarado, já podemos começar a trabalhar com seu conteúdo.

ObjectForKey

Uma vez que a ordenação de elemento é por chave, essa é a forma de resgate dos objetos. O método objectForKey nos retorna o que está guardado na chave especificada. É inevitável uma comparação com a abordagem de array, na qual teríamos algo como um [pessoa2 objectAtIndex:0]. Acho que todos concordam que é muito mais compreensível a busca por chave do que por número de índice, certo?!

Em um ponto, o trabalho com dicionário é idêntico ao de array: resgate da quantidade de elementos na coleção.

Count

A propriedade count retorna a quantidade de pares “chaves-valor”. Atenção ao conceito de par, pois o sistema identifica como um registro quando encontra uma chave + valor.

Por fim, posso citar nesse início de estudo os métodos que retornam tanto só as chaves quanto só os objetos de um dicionário.

Keys values

O método allKeys retorna um NSArray com todas as chaves encontradas no objeto NSDictionary. Já o método allValues também retorna um NSArray, só que com todos os valores encontrados no NSDicionary. Dependendo da situação, eles podem ajudar a acessar valores gerais.

Apesar de existir uma série de outros métodos, a proposta de estudo inicial e direcionamento é essa. Na sequência, interessados podem pesquisar e testar outros métodos de NSDictionary, inclusive mesclando códigos com o que já aprendemos.

Mantendo a tradição, deixo o link para o tópico oficial de debates e estudos no fórum da Quaddro Treinamentos. E confira aqui todos os artigos que já publicamos no MacMagazine.

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

Posts relacionados

Comentários