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

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/catch
o 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/catch
para capturar exceções. Se tivermos que usar create_account
muitas 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/catch
block para gerar exceções:

Para usar o padrão de objeto nulo:

Após a refatoração acima, simplificamos a calculate_total_balance
função usando o padrão de objeto nulo class NullAccount
. Simplesmente não precisamos try
de blocos para lidar com erros e podemos assumir que Account.from_string
sempre 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 None
ou null
valores 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.
nil
Alé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 nil
valor em vez de introduzir um padrão de objeto nulo, pois simplifica o código e reduz a complexidade.