Manipulação de mapas em Dart

Na linguagem de programação Dart, que é a mais indicada para fazer aplicativos móveis utilizando o Flutter, há a possibilidade de trabalhar com coleções, sejam elas mapas ou listas. Ambas auxiliam quando há a necessidade de manipulação de JSON para APIs e, manipular os mesmos para operações que possam ser realizadas. 

Em linguagens de programação como Java ou C#, as listas equivalem aos vetores (arrays) e, os mapas equivalem às matrizes, que são vetores bidimensionais, com linha e coluna. Dessa forma, no presente artigo, serão abordados alguns métodos utilizados para manipulação de mapas. Para listas, há um artigo sobre como manipular as mesmas, que pode ser acessado pelo seguinte link.

Dessa maneira, como um mapa é similar a uma matriz, ou seja, é bidimensional, haverá duas categorias de dados que devem ser declarados ao declarar um mapa. As categorias da linguagem Dart são:

· Int — para valores inteiros;

· Boolean — para valores binários ou verdadeiro e falso;

· String — para letras e palavras em geral;

· Doublefloat — para valores decimais;

· Dynamic — tipo que aceita qualquer categoria de dado anterior.

Para uma declaração de um mapa, a sintaxe deve ser a seguinte:
Map <tipo1, tipo2> nome_mapa Map ().
Nele, sempre haverá um par chave-valor com os dados que serão utilizados, como, por exemplo, um id e o nome de uma pessoa.

Assim, no exemplo abaixo, foi declarado um mapa com nome “usuario” e, atribuído alguns valores ao mesmo. No console, irão aparecer os nomes declarados para cada posição do mapa, bem como a sua chave, que no caso, são os valores numéricos de cada posição que cada nome representa no mapa.

Figura 1: Exemplo de declaração de um mapa. Fonte: Autoria própria.
Figura 01: Exemplo de declaração de um mapa. Fonte: Autoria própria.

No console:

Figura 2: Resultado no console do que foi declarado na Figura 1. Fonte: Autoria própria.
Figura 02: Resultado no console do que foi declarado na Figura 1. Fonte: Autoria própria.

Dessa forma, no console, há a opção de aparecer somente as chaves (keys) ou somente os valores do mapa (values). No exemplo abaixo, deve ser utilizado o nome do mapa (no caso, usuario) com um ponto (.) e, em seguida, o que deverá ser utilizado:

Figura 3: Valores (values) sendo exibidos no console. Fonte: Autoria própria.
Figura 03: Valores (values) sendo exibidos no console. Fonte: Autoria própria.
Figura 4: Chaves (keys) sendo exibidos no console. Fonte: Autoria própria.
Figura 04: Chaves (keys) sendo exibidos no console. Fonte: Autoria própria.

ADIÇÃO DE ITENS AO MAPA

Para a adição de um item ao mapa, deve se utilizar a função putIfAbsent, ou seja, irá inserir somente se a chave ou o valor não existirem no mapa. Assim, para a inserção, será necessário informar qual o valor da chave será inserido e, qual o valor que essa chave irá conter (no exemplo abaixo, foi inserida a key 4 com o value Rodrigo).

Figura 5: Adição de itens no mapa. Fonte: Autoria própria.
Figura 05: Adição de itens ao mapa. Fonte: Autoria própria.

ATUALIZAÇÃO/MUDAR UM ITEM

Dessa forma, caso seja necessário trocar um valor do mapa, é necessário utilizar a função update, assim como em bancos de dados, sendo preciso informar qual chave que deverá ser atualizada, bem como o valor novo que a mesma irá ter. De acordo com o exemplo abaixo, o nome Gabriel foi trocado para Fernando:

Figura 6: Atualização de itens no mapa. Fonte: Autoria própria.
Figura 06: Atualização de itens no mapa. Fonte: Autoria própria.

VERIFICAÇÃO DE UM VALOR NO MAPA

Para a verificação se um value realmente existe no mapa declarado, a função containsValue é utilizada para esse fim, e retornará true, caso exista o valor no mapa ou retornará false, caso o valor não exista, conforme o exemplo abaixo:

Figura 7: Verificação se os valores existem no mapa. Fonte: Autoria própria.
Figura 07: Verificação se os valores existem no mapa. Fonte: Autoria própria.

Joaquim não existe no mapa, por isso, seu retorno é igual a falso.

VERIFICAÇÃO DE UMA CHAVE NO MAPA

Da mesma forma, para a verificação se uma chave realmente existe no mapa declarado, a função containsKey é utilizada para esse fim, e retornará true, caso exista a chave no mapa ou retornará false, caso a mesma não exista, conforme o exemplo abaixo:

Figura 8: Verificação se as chaves existem no mapa. Fonte: Autoria própria.
Figura 08: Verificação se as chaves existem no mapa. Fonte: Autoria própria.

A chave 4 não existe no mapa, por isso, seu retorno é igual a falso.

VERIFICAÇÃO SE O MAPA ESTÁ VAZIO OU NÃO

Para essa verificação ser feita, é necessário utilizar as funções isEmpty ou isNotEmpty. Assim, caso o mapa estiver vazio, retornará verdadeiro (true) e se o mesmo estiver com itens, retornará falso. Como o exemplo que está sendo utilizado possui dados inseridos nele, o mapa não está vazio, de acordo com o exemplo abaixo:

Figura 9: Verificação se o mapa está vazio ou não. Fonte: Autoria própria.
Figura 09: Verificação se o mapa está vazio ou não. Fonte: Autoria própria.

REMOÇÃO DE UM ITEM:
Para remoção de um item no mapa, similar às listas, é necessário utilizar o método remove, para tal ação e, indicar o valor que será removido. Para isso, no exemplo, a posição 2, que representa o João, será removida:

Figura 10: Utilizando a função remove para remover um item do mapa. Fonte: Autoria própria.
Figura 10: Utilizando a função remove para remover um item do mapa. Fonte: Autoria própria.
Figura 11: Resultado, após remover um item, no console. Fonte: Autoria própria.
Figura 11: Resultado, após remover um item, no console. Fonte: Autoria própria.

VERIFICANDO QUANTOS ITENS O MAPA POSSUI

No Dart, para essa checagem, assim como várias outras linguagens de programação, basta utilizar a função length, com o nome do mapa, para verificar a quantidade de itens que o mesmo possui:

Figura 12: Verificação da quantidade de itens que o mapa possui. Fonte: Autoria própria.
Figura 12: Verificação da quantidade de itens que o mapa possui. Fonte: Autoria própria.

LIMPANDO OS ITENS DO MAPA

Para limpar todos os itens do mapa, é necessário utilizar a função clear, que limpará todos os itens que o mapa possui, como mostra o exemplo abaixo:

Figura 13: Limpando os itens do mapa. Fonte: Autoria própria.
Figura 13: Limpando os itens do mapa. Fonte: Autoria própria.

Conforme mostrado no console da Figura 13, não há nenhum item no mapa, após a utilização da função.

Destarte, esses são só alguns dos vários métodos para manipulação de mapas na linguagem Dart. Contudo, os que foram apresentados são os que a maioria dos programadores utilizará em algum momento do desenvolvimento de seu aplicativo, quando estiver utilizando, em paralelo, o framework Flutter, para mexer com o JSON que será retornado das APIs.