SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
15.11.2024

Lição 39: Optionais: Encadeamento e Operador de Coalescência de Nil

No Swift, optionais são um recurso poderoso que permite representar a ausência de um valor. Eles podem conter um valor ou ser nil, indicando que não há valor. Esta lição abordará duas funcionalidades importantes relacionadas a optionais: encadeamento de optionais e o operador de coalescência de nil.

Encadeamento de Optionais

O encadeamento de optionais é uma maneira de chamar propriedades, métodos e subscritos em optionais que podem estar nil no momento. Se o opcional for nil, o encadeamento retorna nil sem causar uma falha em tempo de execução. Isso facilita o trabalho com estruturas de optionais complexas.

Exemplo de Encadeamento de Optionais

Vamos supor que temos uma hierarquia de classes simples:

class Pessoa {
    var residencia: Residencia?
}

class Residencia {
    var numeroDeComodos = 1
}

Neste cenário, uma Pessoa pode ter uma Residencia opcional. Vamos ver como o encadeamento de optionais pode ser usado para acessar a propriedade numeroDeComodos de forma segura.

let joão = Pessoa()

// Acessando numeroDeComodos usando encadeamento de optionais
if let quantidadeDeComodos = joão.residencia?.numeroDeComodos {
    print("A residência de João tem \(quantidadeDeComodos) cômodo(s).")
} else {
    print("A residência de João é nil.")
}

Neste exemplo, como joão.residencia é nil, o encadeamento de optionais retorna nil, e o bloco else é executado.

Agora, vamos atribuir uma instância de Residencia a joão.residencia e tentar novamente:

joão.residencia = Residencia()

if let quantidadeDeComodos = joão.residencia?.numeroDeComodos {
    print("A residência de João tem \(quantidadeDeComodos) cômodo(s).")
} else {
    print("A residência de João é nil.")
}

Agora a saída será:

A residência de João tem 1 cômodo(s).

Usando Encadeamento de Optionais com Métodos

O encadeamento de optionais também pode ser usado com métodos que retornam um valor opcional.

class Carro {
    var modelo: String

    init(modelo: String) {
        self.modelo = modelo
    }

    func obterDescricao() -> String? {
        return "\(modelo) carro"
    }
}

class Pessoa {
    var carro: Carro?
}

let jane = Pessoa()

// Tentando obter a descrição do carro usando encadeamento de optionais
if let descricaoCarro = jane.carro?.obterDescricao() {
    print(descricaoCarro)
} else {
    print("Jane não tem um carro.")
}

Neste caso, como jane.carro é nil, o encadeamento de optionais irá retornar nil de forma segura, sem causar uma falha no programa.

Operador de Coalescência de Nil

O operador de coalescência de nil (??) fornece um valor padrão se um opcional for nil. Este operador ajuda a simplificar o código ao lidar com optionais, permitindo que você forneça um valor de fallback facilmente.

Exemplo do Operador de Coalescência de Nil

Vamos revisitar o exemplo anterior com a classe Pessoa:

let descricaoCarro = jane.carro?.obterDescricao() ?? "Nenhum carro disponível."
print(descricaoCarro) // Saída: Nenhum carro disponível.

Aqui, em vez de verificar se jane.carro é nil, usamos o operador de coalescência de nil para fornecer uma mensagem padrão se obterDescricao() retornar nil.

Usando Coalescência de Nil com Outros Tipos

Você pode usar o operador de coalescência de nil com qualquer tipo opcional. Por exemplo:

var nome: String? = nil
let nomeDeUsuario = nome ?? "Convidado"
print(nomeDeUsuario) // Saída: Convidado

nome = "Alice"
let novoNomeDeUsuario = nome ?? "Convidado"
print(novoNomeDeUsuario) // Saída: Alice

Combinando Encadeamento de Optionais e Coalescência de Nil

Você também pode combinar o encadeamento de optionais e a coalescência de nil para fornecer um código mais robusto. Aqui está um exemplo:

let numeroDeComodos = joão.residencia?.numeroDeComodos ?? 0
print("A residência de João tem \(numeroDeComodos) cômodo(s).") // Saída: A residência de João tem 0 cômodo(s).

Neste exemplo, se joão.residencia for nil, a saída indicará que o número de cômodos é 0, graças ao operador de coalescência de nil.

Conclusão

Nesta lição, cobrimos o encadeamento de optionais e o operador de coalescência de nil no Swift. O encadeamento de optionais ajuda você a acessar propriedades e métodos em optionais de forma segura sem travar seu programa, enquanto o operador de coalescência de nil oferece uma maneira de fornecer valores padrão ao lidar com nil. Compreender esses conceitos permitirá que você escreva um código Swift mais robusto e seguro.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!