DSL de Python:soluciones personalizadas para dominios especializados
Cuando escribimos el programa, encontramos que los problemas que resolvemos pertenecen a áreas específicas, también llamadas dominios, como por ejemplo:
- Un sistema bancario necesita describir las transacciones y las tasas de interés.
- Una aplicación web necesita definir las rutas, plantillas y respuestas.
Al utilizar el lenguaje de propósito general (GPL) como Python o Java, podemos resolver estos problemas, pero el código se vuelve demasiado detallado y repetitivo. Por lo tanto, utilizaremos DSL (lenguaje específico de dominio).
DSL:lenguaje específico del dominio
El lenguaje específico de dominio es un lenguaje de programación o especificación dedicado a un dominio en particular. Es diferente del lenguaje de propósito general (GPL como Python, C++ o Java). Son de dos tipos:
- DSL externo:es un lenguaje completamente nuevo con su propia sintaxis y compilador
- DSL interno (DSL integrado):un DSL creado dentro del lenguaje anfitrión, utilizando su sintaxis y construcciones.
DSL externo
Para trabajar con las bases de datos, usamos SQL, en lugar de escribir bucles para escanear datos manualmente, simplemente escribimos:
SELECT name FROM users WHERE age > 10;
Para diseñar las páginas web, utilizamos HTML. En lugar de gestionar las cadenas de texto y las posiciones manualmente, simplemente declaramos:
<h1>Welcome To Tutorialspoint</h1>
DSL interno
En Python, el lenguaje específico del dominio se construye sobre la sintaxis de Python. Marcos como flask o Pandas son ejemplos de bibliotecas similares a DSL que ayudan a expresar los problemas con claridad.
@app.route('/home')
def home():
return "Hello...!"
Por qué DSL en Python
Python es la mejor opción para DSL porque:
- Su sintaxis es simple y expresiva.
- Permite que las funciones y clases se utilicen como bloques de construcción.
Por ejemplo, los marcos de prueba como pytest o los marcos web como Flask son similares a DSL. En lugar de escribir la lógica de bajo nivel, dejaron escribir los comandos expresivos.
Profundicemos en el ejemplo para aprender más sobre el idioma específico del dominio.
Ejemplo 1
Miremos el siguiente ejemplo, donde vamos a abstraer el lenguaje matemático en las funciones nombradas.
def add(x, y): return x + y def multiply(x, y): return x * y print(add(multiply(1, 3), multiply(2, 4)))
El siguiente es el resultado del programa anterior:
11
Ejemplo 2
Considere el siguiente ejemplo, donde vamos a utilizar DSL en los archivos de configuración.
class demo:
def __init__(self):
self.settings = {}
def set(self, key, value):
self.settings[key] = value
return self
def get(self, key):
return self.settings.get(key)
result = demo()
result.set("host", "Welcome").set("port", 1231)
print(result.get("host"))
El resultado del programa anterior es -
Welcome
Ejemplo 3
En el siguiente ejemplo, vamos a observar el DSL para consultar datos usando la sintaxis SQL dentro de Python.
class demo:
def __init__(x, dataset):
x.dataset = dataset
def where(x, condition):
x.dataset = [item for item in x.dataset if condition(item)]
return x
def select(x, selector):
return [selector(item) for item in x.dataset]
users = [
{"name": "Ram", "age": 10},
{"name": "Ravi", "age": 24},
{"name": "Rahul", "age": 19},
]
result = demo(users).where(lambda u: u["age"] > 18).select(lambda u: u["name"])
print(result)
El siguiente es el resultado del programa anterior:
['Ravi', 'Rahul']
python
- Python CALENDARIO Tutorial con ejemplo
- Python mientras bucle
- Clase de datos de Python:una mejor manera de almacenar datos
- Python vs C++:¿Cuál es la diferencia?
- Python - Operadores básicos
- El Zen de Python (pep-20 easter egg)
- Hello World:crea tu primer programa en Python
- Usando IPython
- Manejo de excepciones de Python Uso de la instrucción try, except y finalmente
- Python time.sleep():agregue retraso a su código (ejemplo)
- Instalación de PIP en Windows:una guía completa paso a paso