Usar padrão de objeto nulo e não blocos Try/Catch

May 01 2023
O padrão de objeto nulo é um padrão de design usado para lidar com o caso em que um objeto é nulo ou indefinido. A ideia básica por trás do padrão é criar um objeto nulo que tenha a mesma interface do objeto original, mas não faça nada quando seus métodos forem chamados.

O padrão de objeto nulo é um padrão de design usado para lidar com o caso em que um objeto é nulo ou indefinido. A ideia básica por trás do padrão é criar um objeto nulo que tenha a mesma interface do objeto original, mas não faça nada quando seus métodos forem chamados. Isso evita a necessidade de verificar objetos nulos no código e simplifica o design.

Se não conhecermos o padrão de objeto nulo, escreveremos código para lidar com cenários de erro com try/catcho método abaixo:

A saída do código acima é:

An error occurred creating the account: Username is required

O problema do código acima é que: toda vez que usamos create_account, temos que usar try/catchpara capturar exceções. Se tivermos que usar create_accountmuitas vezes em alguns projetos, ficará bastante complexo de lidar.

Como resolver o problema try/catch acima?

É quando o padrão de objeto nulo entra em uso. Vamos expandir o caso acima para um uso mais prático.

Se usarmos try/catchblock para gerar exceções:

Para usar o padrão de objeto nulo:

Após a refatoração acima, simplificamos a calculate_total_balancefunção usando o padrão de objeto nulo class NullAccount. Simplesmente não precisamos tryde blocos para lidar com erros e podemos assumir que Account.from_stringsempre retornará um objeto válido.

Isso permite que o código do cliente trate o objeto nulo como um objeto real, sem ter que verificar Noneou nullvalores o tempo todo. O objeto nulo fornece um comportamento padrão seguro e pode ser usado como um espaço reservado até que um objeto real seja disponibilizado.

Por que Go não possui padrão de objeto nulo?

Em Go, é comum retornar vários valores de uma função, sendo o segundo valor um booleano indicando sucesso ou falha. Esse padrão é chamado de padrão “vírgula-ok” ou “tupla”. Por exemplo, uma função que procura uma chave em um mapa pode retornar o valor e um booleano indicando se a chave foi encontrada ou não. Essa abordagem elimina a necessidade de um padrão de objeto nulo.

nilAlém disso, Go possui um valor embutido , que pode ser usado para representar a ausência ou ausência de um valor. Go incentiva o uso desse nilvalor em vez de introduzir um padrão de objeto nulo, pois simplifica o código e reduz a complexidade.