Usar patrón de objeto nulo No intentar/capturar bloques

El patrón de objeto nulo es un patrón de diseño que se usa para manejar el caso cuando un objeto es nulo o indefinido. La idea básica detrás del patrón es crear un objeto nulo que tenga la misma interfaz que el objeto original pero que no haga nada cuando se llame a sus métodos. Esto evita la necesidad de buscar objetos nulos en el código y simplifica el diseño.
Si no conocemos el patrón de objeto nulo, escribiremos un código para tratar los escenarios de error con try/catch
un método como el siguiente:

La salida del código anterior es:
An error occurred creating the account: Username is required
El problema del código anterior es que: cada vez que usamos create_account
, tenemos que usar try/catch
para capturar excepciones. Si tenemos que usar create_account
muchas veces en algunos proyectos, se volverá bastante complejo de manejar.
¿Cómo resolver el problema de prueba / captura anterior?
Aquí es cuando entra en uso el patrón de objeto nulo. Ampliemos el caso anterior a un uso más práctico.
Si usamos try/catch
bloque para generar excepciones:

Para usar un patrón de objeto nulo:

Después de la refactorización anterior, hemos simplificado la calculate_total_balance
función usando un patrón de objeto nulo class NullAccount
. Simplemente no necesitamos try
bloques para lidiar con errores, y podemos asumir que Account.from_string
siempre devolverá un objeto válido.
Esto permite que el código del cliente trate el objeto nulo como un objeto real, sin tener que verificar None
los null
valores todo el tiempo. El objeto nulo proporciona un comportamiento predeterminado seguro y se puede utilizar como marcador de posición hasta que un objeto real esté disponible.
¿Por qué Go no tiene un patrón de objeto nulo?
En Go, es común devolver múltiples valores de una función, siendo el segundo valor un valor booleano que indica éxito o fracaso. Este patrón se llama patrón "coma-ok" o "tupla". Por ejemplo, una función que busca una clave en un mapa puede devolver el valor y un valor booleano que indique si se encontró la clave o no. Este enfoque elimina la necesidad de un patrón de objeto nulo.
Además, Go tiene un valor incorporado nil
, que se puede usar para representar la ausencia o falta de un valor. Go recomienda usar este nil
valor en lugar de introducir un patrón de objeto nulo, ya que simplifica el código y reduce la complejidad.