Implementación del Patrón Singleton para Booleanos y Nulos

Clase 43 de 58Curso de Creación de Lenguajes de Programación: Intérpretes

Resumen

¿Cómo implementar el patrón Singleton en booleanos y nulos?

En el desarrollo de software, mantener la coherencia y optimizar el uso de recursos es esencial. Una manera de lograr esto es aplicando patrones de diseño como el patrón Singleton. Al evaluar booleanos y nulos en un programa, es vital que estos objetos sean únicos. Pero, ¿cómo se garantiza que solo existan instancias únicas de estos valores a lo largo del uso del software? Descubramos más sobre esto.

¿Qué es el patrón Singleton y por qué se utiliza?

El patrón Singleton es un patrón de diseño que asegura que una clase solo tenga una instancia y proporciona un punto de acceso global a esa instancia.

  • Objetivo: Prevenir la creación de múltiples objetos ocupando innecesariamente memoria.
  • Ventajas:
    • Control del acceso concurrente en entornos multihilo.
    • Consistencia en la representación de datos o estados.
    • Integración simplificada en sistemas existentes.

¿Cómo afecta el Singleton la evaluación de booleanos y nulos?

Al evaluar expresiones dentro de un lenguaje de programación, especialmente booleanos, usamos instancias fijas para representar true, false y null.

En Python, se utiliza el patrón Singleton de la siguiente manera:

true = Boolean(True)   # Instancia única de verdadero
false = Boolean(False) # Instancia única de falso
null = Null()          # Instancia única de nulo

Al mantener una sola instancia de cada uno, evitamos discrepancias en el comportamiento del programa.

¿Cómo se implementa en el código?

Durante el proceso de evaluación, recurrimos a unas constantes para garantizar el uso del mismo objeto en cada evaluación. A continuación, se demuestra cómo ajustamos el evaluador para utilizar estas constantes:

  1. Importar objetos necesarios:
from your_module import Boolean, Null
  1. Definir constantes globales:

    • true: instancia de Boolean con valor True.
    • false: instancia de Boolean con valor False.
    • null: instancia de Null.
  2. Implementar la función ToBooleanObject:

    Esta función determina qué instancia retornar basada en el valor booleano:

def ToBooleanObject(value):
    if value:
        return true
    return false

¿Cómo se prueba la evaluación de booleanos?

El siguiente paso es asegurarse de que nuestras modificaciones funcionan correctamente aplicando una serie de tests:

  1. Diseñar tests que comprueben la consistencia: aseguran que siempre se devuelven las mismas instancias de booleanos para cada valor esperado.
  2. Realizar ajustes en la función evaluate: integrar el manejo adecuado de booleanos.

El uso de estos tests garantiza que nuestro evaluador funcione como esperado y mantenga la coherencia en el uso de recursos.

¿Qué sucede en el loop REPL?

El REPL (Read, Evaluate, Print, Loop) se ajusta para evaluar en lugar de simplemente imprimir. Esto permite ver los resultados en formato legible ante cada entrada de datos.

result = evaluate(program)
if result is not None:
    print(inspect(result))

Motivación y próximos pasos

A medida que progresamos en la implementación de evaluadores y expresión de statements, tenemos bases sólidas para proyectar nuevos aspectos como la evaluación de prefijos. Este es solo el comienzo, y nos dirigimos a descubrir la parte más divertida del diseño de lenguajes de programación. ¡Sigue explorando, quédate curioso y prepárate para el siguiente capítulo!