Python DSL's: Op Maat Gemaakte Oplossingen voor Gespecialiseerde Domeinen
Wanneer we het programma schrijven, merken we dat de problemen die we oplossen tot specifieke gebieden behoren, ook wel domeinen genoemd, zoals:
- Een bankiersysteem moet transacties, rentepercentages beschrijven.
- Een webapplicatie moet routes, templates en responses definiëren.
Door een General Purpose Language (GPL) zoals Python of Java te gebruiken, kunnen we deze problemen oplossen, maar de code wordt te gedetailleerd en repetitief. Daarom zullen we de DSL (Domain Specific Language) gebruiken.
DSL - Domeinspecifieke Taal
De Domain Specific Language is een programmeer- of specificatietaal toegewijd aan een bepaald domein. Het verschilt van de general purpose language (GPL zoals Python, C++ of Java). Ze zijn van twee typen:
- Externe DSL – Het is een volledig nieuwe taal met een eigen syntaxis en compiler
- Interne DSL (Embedded DSL) – Een DSL gebouwd binnen de hosttaal, met behulp van de syntaxis en constructies ervan.
Externe DSL
Voor het werken met databases gebruiken we SQL, in plaats van lussen te schrijven om data handmatig te scannen, schrijven we simpelweg:
SELECT name FROM users WHERE age > 10;
Voor het ontwerpen van webpagina's gebruiken we HTML, in plaats van tekenreeksen en posities handmatig te beheren, declareren we simpelweg:
<h1>Welkom Bij Tutorialspoint</h1>
Interne DSL
In Python is de domeinspecifieke taal gebouwd op de Python-syntaxis. Frameworks zoals Flask of Pandas zijn voorbeelden van DSL-achtige bibliotheken die helpen om problemen duidelijk uit te drukken.
@app.route('/home')
def home():
return "Hallo...!"
Waarom DSL's in Python
Python is de beste keuze voor de DSL omdat:
- De syntaxis is eenvoudig en expressief.
- Het stelt functies en klassen in als bouwstenen te gebruiken.
Bijvoorbeeld, testframeworks zoals pytest of webframeworks zoals Flask zijn DSL-achtig. In plaats van low-level logica te schrijven, laten ze u expressieve commando's schrijven.
Laten we in het voorbeeld duiken om meer te leren over de domeinspecifieke taal.
Voorbeeld 1
Laten we kijken naar het volgende voorbeeld, waar we de taal van de wiskunde gaan abstraheren naar benoemde functies.
def add(x, y):
return x + y
def multiply(x, y):
return x * y
print(add(multiply(1, 3), multiply(2, 4)))
De uitvoer van het bovenstaande programma is:
11
Voorbeeld 2
Overweeg het volgende voorbeeld, waar we de DSL in configuratiebestanden gaan gebruiken.
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", "Welkom").set("port", 1231)
print(result.get("host"))
De uitvoer van het bovenstaande programma is:
Welkom
Voorbeeld 3
In het volgende voorbeeld gaan we de DSL voor het opvragen van data observeren met de SQL-syntaxis binnen 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)
De uitvoer van het bovenstaande programma is:
['Ravi', 'Rahul']
Python
- Python Basis: Syntax & Fundamentals Onder de Knie Krijgen
- Python Functies onder de knie krijgen: Syntaxis, Types en Praktische Voorbeelden
- Python Loops Beheersen: Control Flow & Herhalingstechnieken
- IPython beheersen: Je Python-productiviteit boosten
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
- Python's main-functie begrijpen: Praktische handleiding voor def main()
- Python Namespaces & Variabele Scope: Namen, Bindingen en Scopes begrijpen
- Python's map()-functie beheersen: syntaxis, voorbeelden en best practices
- Samen Python Skills Bouwen: Cohort-gebaseerde Live Cursussen
- Python Metaprogrammeren Beheersen: Geavanceerde Metaklas Technieken
- Webdata Benaderen met Python's urllib: Een Praktische Gids