DSL Python:Solusi Khusus untuk Domain Khusus
Saat kami menulis program, kami menemukan bahwa masalah yang kami pecahkan berada pada area tertentu, disebut juga domain, seperti:
- Sistem perbankan perlu menjelaskan transaksi, suku bunga.
- Aplikasi web perlu menentukan rute, templat, dan respons.
Dengan menggunakan General Purpose Language (GPL) seperti Python atau Java, kita dapat mengatasi masalah tersebut, namun kodenya menjadi terlalu detail dan berulang. Oleh karena itu, kami akan menggunakan DSL (Domain Spesifik Language.
DSL - Bahasa Khusus Domain
Bahasa Khusus Domain adalah bahasa pemrograman atau spesifikasi yang didedikasikan untuk domain tertentu. Ini berbeda dari bahasa tujuan umum (GPL seperti Python, C++ atau Java). Mereka terdiri dari dua jenis:
- External DSL- Ini benar-benar bahasa baru dengan sintaksis dan kompilernya sendiri
- DSL Internal (DSL Tertanam) - DSL yang dibangun di dalam bahasa host, menggunakan sintaksis dan konstruksinya.
DSL eksternal
Untuk bekerja dengan database, kami menggunakan SQL, daripada menulis loop untuk memindai data secara manual, kami cukup menulis:
SELECT name FROM users WHERE age > 10;
Untuk mendesain halaman web, kami menggunakan HTML, Daripada mengelola string teks dan posisi secara manual, kami cukup mendeklarasikan:
<h1>Welcome To Tutorialspoint</h1>
DSL internal
Di Python, bahasa khusus domain dibangun di atas sintaksis Python. Kerangka kerja seperti flask atau Pandas adalah contoh perpustakaan mirip DSL yang membantu mengungkapkan masalah dengan jelas.
@app.route('/home')
def home():
return "Hello...!"
Mengapa DSL dengan Python
Python adalah pilihan terbaik untuk DSL karena:
- Sintaksnya sederhana dan ekspresif.
- Ini memungkinkan fungsi dan kelas digunakan sebagai blok penyusun.
Misalnya, kerangka pengujian seperti pytest atau kerangka web seperti Flask mirip dengan DSL. Daripada menulis logika tingkat rendah, mereka membiarkan menulis perintah ekspresif.
Mari selami contohnya, untuk mempelajari lebih lanjut tentang bahasa khusus domain.
Contoh 1
Mari kita lihat contoh berikut, di mana kita akan mengabstraksi bahasa matematika ke dalam fungsi bernama.
def add(x, y):
return x + y
def multiply(x, y):
return x * y
print(add(multiply(1, 3), multiply(2, 4)))
Berikut adalah output dari program di atas -
11
Contoh 2
Perhatikan contoh berikut, di mana kita akan menggunakan DSL di file konfigurasi.
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"))
Output dari program di atas adalah -
Welcome
Contoh 3
Dalam contoh berikut, kita akan mengamati DSL untuk menanyakan data menggunakan sintaks SQL di dalam 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)
Berikut adalah output dari program di atas -
['Ravi', 'Rahul']