Perkenalan Fungsi, Class dan Object
Dua konsep yang akan dikenalkan pada chapter ini digunakan untuk meningkatkan reusability dari kode Python, yaitu menggunakan kembali bagian dari kode kita agar kita lebih produktif, dan kode kita menjadi lebih mudah untuk dimodifikasi.
Fungsi
Fungsi atau function adalah salah satu teknik untuk membungkus kode sehingga bisa dipakai kembali di tempat lain. Apabila kamu sudah mengerjakan exercise pada course ini, kamu seharusnya sudah cukup familiar dengan pembuatan fungsi main
dan cara pemanggilannya. Karakteristik dari sintaks Python adalah menggunakan kata kunci def
. Berikut adalah sintaks dasar dari fungsi:
def nama_fungsi(parameter_1, parameter_2, ...):
# kode yang ingin dieksekusi
return
Untuk lebih jelasnya, perhatikan contoh berikut:
# Contoh 1.a
def add(a, b):
return a + b
print(add(2, 3)) # output: 5
print(add(5, 10)) # output: 15
Pada Contoh 1.a, kita mendefinisikan fungsi add
dengan dua buah parameter a
dan b
. Lalu baris selanjutnya kita mengembalikan hasil operasi penambahan dengan menggunakan kata kunci return
. Setelah mendefinisikan fungsi add
, kita dapat memanggil fungsi ini berkali-kali seperti pada contoh dengan nilai parameter yang berbeda-beda.
Mendefinisikan parameter pada fungsi dan mengembalikan nilai menggunakan return
itu sifatnya opsional. Kita juga bisa membuat fungsi tanpa parameter dan return seperti pada contoh di bawah ini:
# Contoh 1.b
def print_this_text(text):
print(text)
def print_hello_world():
print('Hello, World~')
print(print_this_text('Hello, World~')) # output: 'Hello, World~'
print(print_hello_world()) # output: 'Hello, World~'
Contoh-contoh yang diberikan sampai saat ini adalah contoh fungsi yang terlalu simpel dan mungkin kurang relevan dengan realita. Tentunya, tidak semua operasi-operasi kecil pada kode kita harus dibuat menjadi fungsi. Yang jelas, apabila kamu menemukan ada bagian dari kode kamu yang mungkin bisa digunakan kembali, kode itulah yang bisa kamu jadikan fungsi.
Sebagai gambaran, salah satu contoh fungsi yang mungkin lebih representatif dapat dilihat pada kode di bawah ini, dimana kode di dalamnya mengolah list
yang cukup kompleks sehingga cukup patut untuk dijadikan fungsi:
def generate_sentences(bucket_of_words):
output = ''
for words in bucket_of_words:
sentence = ''
for word in words:
sentence = sentence + word + ' '
output = output + sentence + '\n'
return output
sentences = generate_sentences(
[
['I', 'like', 'learning', 'new', 'stuffs'],
['However,', 'it', 'is', 'not', 'always', 'easy'],
['I', 'believe', 'if', 'I', 'consistently', 'practice,', 'I', 'can', 'get', 'a', 'valuable', 'skill', 'faster']
]
)
print(sentences)
Scoping pada fungsi
Kode di dalam fungsi dapat mengakses variable yang di definisikan di luar fungsi. Perhatikan contoh di bawah ini:
a = 100
def add(b):
return a + b
print(a) # output: 100
print(add(5)) # output: 105
Operasi penambahan di dalam fungsi add
dapat mengakses nilai pada variable a
yang di definisikan sebelum fungsinya. Sehingga saat pemanggilan fungsi add(5)
, operasi penambahannya dapat menghasilkan output pada contoh.
Apabila kita menulis parameter dengan nama yang sama dengan variable yang telah terdefiniskan, fungsi akan tetap mengambil nilai dari parameter.
a = 100
def add(a, b):
return a + b
print(a) # output: 100
print(add(2, 3)) # output: 5
Class dan Object
Tanpa kamu sadari, sebenarnya kamu sudah sering berinteraksi dengan object
di Python, karena sebenarnya semua entitas pada Python direpresentasikan sebagai object
. Kalau tidak percaya, coba jalankan contoh di bawah ini:
my_values = [5, 3.14, True, [1, 2, 3], {'key': 'value'}]
for value in my_values:
print(type(value))
# output:
# <class 'int'>
# <class 'float'>
# <class 'bool'>
# <class 'list'>
# <class 'dict'>
Sebuah object
adalah hasil inisiasi dari suatu class
yang memiliki attribute dan method. Sedangkan class
bisa diterjemahkan sebagai cetak biru dari object
. Sehingga tidak heran bahwa hasil dari percobaan kita sebelumnya memunculkan output seperti itu.
Contoh sintaks dasar dari class
dari cara menginisiasi object
dapat dilihat pada kode berikut:
class NamaClass:
def __init__(self, parameter_1, parameter_2, ...):
# kode dalam constructor
self.attribute = parameter_1
def nama_method(self, parameter_1, parameter_2, ...):
# kode dalam method
obj = NamaClass(1, 2, ...)
Untuk mendefinisikan sebuah class
, kita menggunakan keyword class
. Di dalam blok kode class
, kita dapat menuliskan fungsi atau dalam konteks ini biasa disebut method. Ciri utama dari method adalah parameter pertamanya merujuk kepada diri sendiri atau self
.
Di bagian paling awal setelah penulisan nama class
, kita menemukan satu fungsi yang memiliki nama unik, yaitu fungsi __init__
. Fungsi ini adalah fungsi constructor
pada class
yang dipanggil saat pertama kali menginisiasi object
. Cara menginisiasi object
mirip dengan melakukan pemanggilan pada fungsi. Parameter yang dimasukkan pada inisiasi object
adalah parameter yang digunakan pada fungsi __init__
.
Kode berikut adalah contoh penggunaan class
untuk merepresentasikan sebuah circle atau lingkaran:
import math
class Circle:
def __init__(self, radius):
self.radius = radius
def calculate_area(self):
return round(math.pi * self.radius ** 2, 2)
circle_4 = Circle(4)
print(circle_4.radius) # output: 4
print(circle_4.calculate_area()) # output: 50.27
circle_5 = Circle(5)
print(circle.radius) # output: 5
print(circle.calculate_area()) # output: 78.54
Pada contoh, class Circle
menerima parameter constructor berupa radius dan di set sebagai attribute. Class Circle
juga memiliki method calculate_area
untuk menghitung luas area lingkaran. Setelah object circle_4
diinisiasi, attribute radius
dan method calculate_area
dapat diakses dari object
circle_4
.