Memperkecil Ukuran Fungsi
Fungsi seperti berikut tergolong problematik:
from somewhere import Order, get_item
def make_order(data):
if not data["sku"]:
raise Exception("'sku' must be present")
item = get_item(data["sku"])
if not item:
raise Exception("item does not exist")
order = Order(data["sku"], data["amount"])
order.send_invoice()
return order
Fungsi tersebut mencoba melakukan banyak hal sekaligus, yang justru membuatnya menjadi lebih sulit untuk di-test.
Solusi
Kita dapat memecah fungsi tersebut menjadi beberapa fungsi yg lebih kecil:
from somewhere import Order, get_item
def validate_payload(data):
if not data["sku"]:
raise Exception("'sku' must be present")
def check_item_availability(sku):
item = get_item(sku)
if not item:
raise Exception("item does not exist")
def create_order(sku):
order = Order(sku)
order.send_invoice()
return order
def make_order(data):
validate_payload(data)
check_item_availability(data["sku"])
return create_order(data["sku"])
Kesimpulan
Fungsi yang pendek memiliki kelebihan seperti sebagai berikut:
- Logika yang lebih jelas; program akan lebih mudah untuk dipahami.
- Jumlah bug lebih sedikit.
- Lebih mudah untuk di-test.