Translate this page

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.