Menulis.

Biasanya orang menulis karena memang seseorang itu bisa menulis. Bisa dalam artian profesi atau hobi. Lalu apa alasan saya menulis? Karena aku pernah hidup. Apa yang membuat seorang revolusioner di…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




Opcionais em Swift

Neste artigo, vamos explorar e compreender as Opcionais do Swift. Veremos também:

Depois de ler este artigo, você vai conseguir utilizar uma ótima prática para aprimorar a segurança no seu código. Vamos lá?

Quando você está desenvolvendo um código em Swift, é normal esbarrar com as variáveis opcionais em um determinado momento.

Uma variável opcional pode, ou não, conter um valor. Caso não haja um valor, ela será nil, ou seja, nulo (não existe um valor). Se existe um valor, a variável se iguala a esse valor. Veja o exemplo de código abaixo, mas não se preocupe que vamos entender mais pra frente o que tudo isso significa!

Ou então, se atribuirmos um valor para essa opcional:

O uso é bem parecido com variáveis não opcionais, então qual a diferença na prática? Como você pode ver acima, o resultado é a nossa variável “embrulhada” dentro de algo escrito Optional(). Portanto, precisamos fazer uma verificação, justamente para desembrulhar essa opcional.

Mas, como assim desembrulhar? Vamos imaginar que temos uma caixa, que é nossa opcional. Dentro dessa caixa, pode ter um valor, e quando retiramos o valor de dentro da caixa, a variável se iguala a esse valor. Caso não tenha nada dentro da caixa, então ela nos retornará nil (nothing at all, algo nulo, inexistente).

Ok, mas por que eu iria querer utilizar uma opcional no meu código? Muitas vezes, é a própria linguagem que faz o uso de opcionais para tratar questões de segurança. Vamos ver alguns casos!

Veja abaixo um código onde há a declaração de um array com 4 elementos, e queremos obter o primeiro elemento através da propriedade first:

Quando printamos esse código, ele nos retorna uma opcional com o valor dentro em vez de nos retornar o valor literal. No caso, irá retornar Optional(38).

Mas, por que isso acontece? O motivo disso é que o array pode ser vazio inicialmente, então, para evitar que o código quebre, por padrão é utilizado uma opcional. Se o array estiver vazio, não há um primeiro elemento a ser mostrado.

O Swift não sabe exatamente se existe, ou não, um primeiro elemento. Portanto, por questões de segurança, ele nos retorna uma opcional, e é nosso trabalho realizar a verificação dela para averiguar se realmente existe um valor, para então utilizar desse valor sem problemas.

Ok, mas caso o array esteja vazio, o que nos retorna? Nos retorna nil. O nil, como mencionado anteriormente, é a ideia de algo nulo (mas lembre-se que nil não é zero), algo inexistente.

Um outro exemplo é a conversão de uma String para Int. O Swift nos retorna uma opcional, pois nem toda string pode ser convertida para Int. Veja o exemplo abaixo:

Porém, o que acontece se eu tentar converter uma string como “palavra” para int? É impossível, certo?

É por isso que o uso de opcionais é tão importante para a segurança e legibilidade de um código.

Agora que você já sabe o que é uma opcional, provavelmente está se perguntando: “como eu crio uma opcional no meu código”?

Vamos ver a seguir como criar opcionais e verificá-las, para desembrulhá-las da maneira mais segura possível.

Para criar uma variável opcional, precisamos colocar um ponto de interrogação logo depois do tipo da variável, dessa maneira:

Ou então, se atribuirmos um valor para essa opcional:

Variáveis opcionais são muito encontradas em formulários, por exemplo, onde uma informação não é obrigatória, ela é opcional. Ou seja, a informação pode, ou não, conter um valor. Vamos supor que estamos realizando o cadastro de um usuário na nossa aplicação:

Veja que a variável cel é uma opcional, podemos ou não receber essa informação.

Mas e agora, como fazer para desembrulhar de fato uma opcional? Pois não conseguimos usar o valor que está dentro de uma opcional. Observe o erro que é gerado quando tentamos pegar o primeiro caractere de uma string opcional, com o uso da propriedade first:

O erro diz que a variável opcional deve ser desembrulhada para retornarmos o primeiro caractere da string. Isso é uma pura questão de segurança, pois o Swift não sabe se há realmente um valor dentro dessa variável opcional.

Ok, então agora que já descobrimos o que são opcionais e como criar uma, vamos aprender a como lidar com elas e desembrulhá-las da maneira mais segura possível.

Podemos dizer que existem cinco maneiras que são mais utilizadas para desembrulhar uma opcional, e vamos discutir mais sobre elas aqui:

1) Forçar o desembrulho (Force unwrapping);

2) Optional Binding;

3) Optional Chaining;

4) Guard let;

5) Nil coalescing operator.

Vamos lá?

Essa é, na verdade, a maneira menos recomendada de lidarmos com uma opcional, pois estamos falando para a linguagem que existe, sim, um valor dentro dela.

Para forçar o desembrulho, nós usamos um ponto de exclamação no final da variável, dessa maneira:

É preciso ter muito cuidado quando utilizar essa abordagem, pois pode não existir um valor, ou seja, se for nil, a aplicação irá quebrar, causando um runtime error (erro de execução, que é aquele erro que crasha a nossa aplicação). Em todo caso, é sempre recomendado fazer uma verificação se o valor existe ou não. O caso mais seguro de usar o ! para desembrulhar uma opcional é realizar uma verificação para ver se o valor realmente não é nil, dessa maneira:

Então, essa é a primeira maneira, a de forçar o desembrulho. Vamos para a próxima?

O método optional binding é uma abordagem bem mais segura para desembrulhar uma opcional. Veja o código abaixo:

Primeiramente, nós criamos uma constante name que iguala ao valor de optionalName se essa variável não for nula, ou seja, se ela não for nil.

Observe uma coisa interessante: agora, quando printamos a variável name, ela não retorna mais como Optional(), e sim o seu valor concreto. Isso acontece porque a variável name é um valor não-opcional. É desembrulhado pela verificação if let.

Um ponto importante é que a variável name só pode ser utilizada dentro do escopo da verificação. Se tentarmos utilizar essa variável fora do escopo, causará um erro.

Você também pode usar múltiplas opcionais dentro da mesma verificação, dessa maneira:

Pronto! Vimos como podemos usar opcionais por meio da maneira Optional Binding.

Esse método permite que nosso código rode apenas se nossa opcional possuir de fato um valor. Veja o código abaixo para entender melhor o que é o optional chaining:

Criamos uma variável opcional e atribuímos o seu valor para “Giovanna”. Se tivermos colocado apenas print(name.first), a aplicação causará um erro de compilação que já vimos acima. Portanto, esse operador de interrogação (?) é justamente o optional chaining. Ele só irá pegar o primeiro valor da string (através dessa propriedade first), caso a variável nome não seja nulo (nil). Caso contrário, devolve nil.

Porém, veja que, na verdade, o Swift nos retorna o valor dentro de uma Optional(). Por esse motivo, é muito comum combinarmos optional chaining com optional binding. Veja o código abaixo:

Lembrando que chaining vem de encadeamento, então é a ideia de encadear as propriedades para fazer a verificação.

Agora que você já sabe sobre “forcing unwrap” (forçar o desembrulho), “optional chaining” e “optional binding”, vamos para os dois últimos métodos mais comum: “guard let” e “null coalescing operator”.

Esse método é muito parecido com o optional binding (que é o uso do if let, que vimos acima). Porém, se a opcional for nula, ele faz alguma outra coisa. Veja o código abaixo:

No código acima, caso ambas as variáveis sejam nil, irá sair da função imediatamente utilizando o return, sem ao menos printar os valores. Vamos fazer o teste? Veja abaixo:

Veja que esse método permite utilizar a variável desembrulhada fora do escopo, enquanto isso não é permitido com o uso do if let, como vimos acima. Então, se precisarmos utilizar uma variável em outros lugares, o recomendado é fazer o uso do guard let em vez do if let.

O Nil Coalescing Operator é um operador que consiste no uso de dois pontos de interrogação: ??. Ele aceita uma expressão à esquerda, que é a variável opcional, e uma expressão à direita, que é o valor que tomará lugar caso a variável opcional for nil. Veja o código abaixo para entender melhor como funciona:

Nesse caso, quando printamos a variável optionalName, haverá uma verificação. Se a variável for nil, será mostrado no console a string "Unknown". Caso contrário, será mostrado o seu valor concreto sem o uso do Optional().

Nesse artigo, vimos sobre opcionais, como e porquê utilizá-las, além também de como podemos tratá-las para que nossa aplicação funcione de forma segura e como o esperado, sem quebrar o código.

Até a próxima!

Add a comment

Related posts:

MFCC

MFCC is based on human hearing perceptions which cannot perceive frequencies over 1Khz. In other words, in MFCC is based on the known variation of the human ear’s critical bandwidth with frequency…

A Lost Friend

The voice of a friend

Slack Mobile Messaging App Critique

Slack is a web and mobile app used for direct and group messaging. I had to sign up for the app for a class in which I’m a TA. I wanted to get the mobile version for convenience, but noticed that…