Functional programming di Python adalah paradigma pemrograman di mana komputasi diperlakukan sebagai evaluasi fungsi matematika dan menghindari perubahan status (state) serta data mutable. Python mendukung paradigma ini melalui fungsi kelas satu (first-class functions), fungsi anonim (lambda), serta modul bawaan seperti itertools dan functools.
Inti dari teknik ini adalah memisahkan data dari operasi yang mengubahnya, menggunakan fungsi murni (pure functions) yang tidak memiliki efek samping (side effects), serta mengoptimalkan penggunaan ekspresi deklaratif alih-alih pernyataan imperatif.
Komponen Utama Functional Programming di Python
Untuk menerapkan pemrograman fungsional secara efektif di Python, Anda perlu menguasai beberapa konsep fundamental berikut:
| Konsep | Deskripsi | Contoh Implementasi Python |
|---|---|---|
| Pure Functions | Fungsi yang selalu mengembalikan output yang sama untuk input yang sama tanpa efek samping. | def add(a, b): return a + b |
| Immutability | Data yang tidak dapat diubah setelah dibuat (menggunakan tuple, frozenset). | koordinat = (10, 20) |
| Higher-Order Functions | Fungsi yang menerima fungsi lain sebagai argumen atau mengembalikan fungsi. | map(), filter(), reduce() |
| Lambda Expressions | Fungsi anonim baris tunggal untuk operasi sederhana. | lambda x: x * 2 |
Penerapan Praktis: Map, Filter, dan Reduce
Tiga fungsi bawaan paling sering digunakan dalam pemrograman fungsional adalah map(), filter(), dan reduce() (yang terakhir harus diimpor dari modul functools).
from functools import reduce
# Data awal
angka = [1, 2, 3, 4, 5]
# 1. Map: Mengubah setiap elemen dalam iterable
kuadrat = list(map(lambda x: x ** 2, angka))
print(kuadrat) # Output: [1, 4, 9, 16, 25]
# 2. Filter: Menyaring elemen berdasarkan kondisi boolean
genap = list(filter(lambda x: x % 2 == 0, angka))
print(genap) # Output: [2, 4]
# 3. Reduce: Mereduksi iterable menjadi satu nilai akumulatif
total = reduce(lambda x, y: x + y, angka)
print(total) # Output: 15
List Comprehension vs Fungsi Fungsional
Meskipun Python mendukung map dan filter, komunitas Python secara idiomatis lebih menyukai list comprehension atau generator expression karena keterbacaannya yang lebih tinggi.
# Menggunakan Map & Filter
hasil_map = list(map(lambda x: x * 2, filter(lambda x: x > 2, [1, 2, 3, 4])))
# Menggunakan List Comprehension (Lebih Diutamakan di Python)
hasil_lc = [x * 2 for x in [1, 2, 3, 4] if x > 2]
print(hasil_lc) # Output: [6, 8]
Modul Pendukung: Itertools dan Functools
Modul standar Python menyediakan pustaka yang sangat kuat untuk pemrograman fungsional tingkat lanjut:
- itertools: Menyediakan iterator efisien untuk operasi kombinatorial seperti
itertools.chain,itertools.product, danitertools.groupby. - functools: Menyediakan utilitas seperti
functools.partialuntuk menetapkan argumen awal pada fungsi danfunctools.lru_cacheuntuk memoization.
from functools import lru_cache
# Contoh Memoization dengan lru_cache untuk fungsi rekursif
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(50)) # Dieksekusi secara instan berkat cache
Troubleshooting dan Praktik Lapangan
Saat menerapkan fungsional programming di Python, perhatikan batasan teknis berikut:
- Rekursi Dalam: Python memiliki batas rekursi default (biasanya 1000). Gunakan
sys.setrecursionlimit()dengan hati-hati atau ubah iterasi rekursif menjadi iteratif jika menangani data skala besar. - Lazy Evaluation: Manfaatkan generator (menggunakan kata kunci
yield) untuk mencegah penggunaan memori berlebih saat memproses dataset besar.