Pert2 - Function - Method
Pert2 - Function - Method
Objektif :
Mahasiswa mampu memahami dan menggunakan function pada Golang
Mahasiswa mampu memahami dan menggunakan berbagai function yang
sesuai dengan penerapan pada Golang.
Mahasiswa mampu dan menggunakan method pada Golang.
Pada bagian ini akan membahas tentang fungsi dan method pada Golang yang merupakan
aspek penting dalam pemrograman. Definisi fungsi sendiri adalah sekumpulan blok kode
yang dibungkus dengan nama tertentu. Setiap program pada Golang memiliki setidaknya satu
fungsi, yaitu main ( ). Penerapan fungsi yang tepat akan menjadikan kode lebih modular dan
juga dry (kependekan dari don't repeat yourself), karena tak perlu menuliskan banyak proses
berkali-kali, cukup sekali saja dan tinggal panggil jika dibutuhkan. Fungsi juga dikenal
sebagai method, sub-routine, atau procedure.
2.1 Penerapan Fungsi
Definisi fungsi dalam bahasa pemrograman Go terdiri dari function
header dan function body. Berikut ini semua bagian dari suatu fungsi:
Func − memulai deklarasi fungsi.
Function Name − nama sebenarnya dari fungsi tersebut. Nama fungsi dan daftar
parameter.
Parameters − Parameter seperti tempat penampung. Saat suatu fungsi dipanggil, untuk
meneruskan nilai ke parameter. Nilai ini disebut sebagai parameter atau argumen aktual.
Daftar parameter mengacu pada jenis, urutan, dan jumlah parameter fungsi. Parameter
bersifat opsional; artinya, suatu fungsi mungkin tidak mengandung parameter.
Return Type − Suatu fungsi dapat mengembalikan daftar nilai. Return_types adalah
daftar tipe data nilai yang dikembalikan fungsi. Beberapa fungsi melakukan operasi yang
diinginkan tanpa mengembalikan nilai. Dalam hal ini, return_type adalah yang tidak
diperlukan.
1
GOLANG FOR INTERMEDIATE
0
Function Body − Ini berisi kumpulan pernyataan yang menentukan apa fungsi tidak.
Berikut adalah bentuk umum definisi fungsi dalam bahasa pemrograman Golang:
func function_name( [parameter list] ) [return_types]
{
body of the function
}
1
GOLANG FOR INTERMEDIATE
1
randomValue = randomWithRange( 2, 10)
fmt. Println( "random number: ", randomValue)
randomValue = randomWithRange( 2, 10)
fmt. Println( "random number: ", randomValue)
}
func randomWithRange( min, max int) int {
var value = rand. Int( ) % ( max - min + 1) + min
return value
}
Di dalam fungsi randomWithRange terdapat proses generate angka acak, yang angka
tersebut kemudian digunakan sebagai nilai kembalian.
Cara menentukan tipe data nilai balik fungsi adalah dengan menuliskan tipe data yang
diinginkan setelah kurung parameter. Bisa dilihat pada kode di atas, bahwa int merupakan
tipe data nilai balik fungsi randomWithRange.
func randomWithRange( min, max int) int
Pada kode diatas juga terdapat fungsi rand. Seed() dimana fungsi ini diperlukan untuk
memastikan bahwa angka random yang akan di-generate benar - benar acak. Untuk itu dapat
digunakan angka apa saja sebagai nilai parameter fungsi ini (umumnya diisi time. Now( ) .
Unix( ) ).
1
GOLANG FOR INTERMEDIATE
2
Golang mengadopsi konsep variadic function atau pembuatan fungsi dengan
parameter sejenis yang tak terbatas. Maksud tak terbatas disini adalah jumlah parameter yang
disisipkan ketika pemanggilan fungsi bisa berapa saja. Parameter variadic memiliki sifat yang
mirip dengan slice. Nilai parameter-parameter yang disisipkan memiliki tipe data yang sama,
dan akan ditampung oleh sebuah variabel saja. Cara pengaksesan tiap datanya juga sama,
dengan menggunakan indeks.
Deklarasi parameter variadic sama dengan cara deklarasi variabel biasa, pembedanya
pada parameter jenis ini ditambahkan tanda 3 titik ( . . . ) setelah penulisan variabel (sebelum
tipe data). Nantinya semua nilai yang disisipkan sebagai parameter akan ditampung oleh
variabel tersebut.
Berikut merupakan contoh penerapannya:
package main
import "fmt"
func main( ) {
var avg = calculate( 2, 4, 3, 5, 4, 3, 3, 5, 5, 3)
var msg = fmt.Sprintf("Rata-rata: %.2f", avg)
fmt.Println( msg)
}
func calculate( numbers ...int) float64 {
var total int = 0
for _, number := range numbers {
total += number
}
var avg = float64( total) / float64( len( numbers) )
return avg
}
Nilai tiap parameter bisa diakses seperti cara pengaksesan tiap elemen slice. Pada contoh di
atas metode yang dipilih adalah for - range .
for _, number := range numbers
Fungsi fmt.Sprintf()
1
GOLANG FOR INTERMEDIATE
3
Fungsi fmt.Sprintf( ) pada dasarnya sama dengan fmt.Printf( ), hanya saja fungsi ini
tidak menampilkan nilai, melainkan mengembalikan nilainya dalam bentuk string.
Pada kasus di atas, nilai hasil fmt. Sprintf( ) ditampung oleh variabel msg . Selain
fmt.Sprintf( ) , ada juga fmt.Sprint( ) dan fmt.Sprintln( ) .
Fungsi float64()
Sebelumnya sudah dibahas bahwa float64 merupakan tipe data. Tipe data jika ditulis
sebagai fungsi (penandanya ada tanda kurungnya) berguna untuk casting. Casting
sendiri adalah teknik untuk konversi tipe sebuah data ke tipe lain. Pada contoh di atas,
variabel total yang tipenya adalah int, dikonversi menjadi float64, begitu juga len(
numbers) yang menghasilkan int dikonversi ke float64 . Variabel avg perlu dijadikan
float64 karena penghitungan rata-rata lebih sering menghasilkan nilai desimal.
Operasi bilangan (perkalian, pembagian, dan lainnya) pada Golang hanya bisa
dilakukan jika tipe datanya sejenis. Maka dari itulah perlu adanya casting ke tipe
float64 pada tiap operand.
Fungsi Variadic Menggunakan Data Slice
Slice bisa digunakan sebagai parameter variadic. Caranya cukup mudah, yaitu dengan
menambahkan tanda 3 titik setelah nama variabel ketika memasukannya ke
parameter.
Contohnya bisa dilihat pada kode berikut.
var avg = calculate( 2, 4, 3, 5, 4, 3, 3, 5, 5, 3)
var msg = fmt.Sprintf("Rata-rata: %.2f", avg)
fmt.Println( msg)
Pada kode di atas, variabel numbers yang merupakan slice int, disisipkan ke fungsi
calculate( ) sebagai parameter variadic (bisa dilihat tanda 3 titik setelah penulisan
variabel). Teknik ini sangat berguna ketika sebuah data slice ingin difungsikan
sebagai
parameter variadic.
Perhatikan juga kode berikut ini. Intinya adalah sama, hanya caranya yang berbeda.
var numbers = [] int{2, 4, 3, 5, 4, 3, 3, 5, 5, 3}
var avg = calculate( numbers. . . )
// atau
1
GOLANG FOR INTERMEDIATE
4
Pada deklarasi parameter fungsi variadic, tanda 3 titik ( . . . ) dituliskan sebelum tipe
data parameter. Sedangkan pada pemanggilan fungsi dengan menyisipkan parameter
array, tanda tersebut dituliskan dibelakang variabelnya.
Pada kode di atas bagiamana cara closure dibuat dan dipanggil. Sedikit berbeda memang
dibanding pembuatan fungsi biasa. Fungsi ditulis tanpa nama, lalu ditampung dalam variable.
var getMinMax = func( n [] int) ( int, int) {
// . . .
}
1
GOLANG FOR INTERMEDIATE
5
Cara pemanggilannya, dengan menuliskan nama variabel tersebut sebagai fungsi (seperti
pemanggilan fungsi biasa).
var min, max = getMinMax( numbers)
import "fmt"
import "strings"
Ada cukup banyak hal yang terjadi didalam tiap pemanggilan fungsi filter( ) di atas.
Berikut merupakan penjelasannya.
1
GOLANG FOR INTERMEDIATE
6
1. Data array (yang didapat dari parameter pertama) akan di-looping
2. Di tiap perulangannya, closure callback dipanggil, dengan disisipkan data tiap elemen
perulangan sebagai parameter
3. Closure callback berisikan kondisi filtering, dengan hasil bertipe bool yang
kemudian dijadikan nilai balik dikembalikan.
4. Di dalam fungsi filter( ) sendiri, ada proses seleksi kondisi (yang nilainya didapat
dari hasil eksekusi closure callback ). Ketika kondisinya bernilai true , maka data
elemen yang sedang diulang dinyatakan lolos proses filtering.
5. Data yang lolos ditampung variabel result . Variabel tersebut dijadikan sebagai nilai
balik fungsi filter( )
import "fmt"
import "strings"
}
func ( s student) sayHello( ) {
fmt.Println( "halo", s.name)
}
func ( s student) getNameAt( i int) string {
return strings. Split( s.name, " ") [i- 1]
}
1
GOLANG FOR INTERMEDIATE
7
Cara deklarasi method sama seperti fungsi, hanya saja perlu ditambahkan deklarasi variable
objek diantara keyword func dan nama fungsi. Struct yang digunakan akan menjadi pemilik
method. func ( s student) sayHello( ) maksudnya adalah fungsi sayHello dideklarasikan
sebagai method milik struct student . Pada contoh di atas struct student memiliki dua buah
method, yaitu sayHello( ) dan getNameAt( ) .
Contoh pemanfaatan method diatas bisa dilihat pada kode berikut:
func main( ) {
var s1 = student{"Budi Putra", 17}
s1. sayHello( )
var name = s1.getNameAt( 2)
fmt. Println("nama panggilan : ", name)
}
Cara mengakses method sama seperti pengaksesan properti berupa variabel. Tinggal panggil
saja methodnya.
s1.sayHello( )
var name = s1.getNameAt( 2)
Method memiliki sifat yang sama persis dengan fungsi biasa. Seperti bisa berparameter,
memiliki nilai balik, dan lainnya. Dari segi sintaks, pembedanya hanya ketika pengaksesan
dan deklarasi. Bisa dilihat di kode berikut, sekilas perbandingan penulisan fungsi dan
method.
func sayHello( ) {
func (s student) sayHello( ) {
func main( ) {
var s1 = student{"Budi Putra", 17}
s1.sayHello( )
1
GOLANG FOR INTERMEDIATE
8
}
Method pointer tetap bisa diakses lewat variabel objek biasa (bukan pointer) dengan cara
yang nya masih sama. Contoh:
// pengaksesan method dari variabel objek biasa
var s1 = student{"Budi Putra", 17}
s1. sayHello( )
// pengaksesan method dari variabel objek pointer
var s2 = &student{"Ari Langit", 21}
s2.sayHello( )
1
GOLANG FOR INTERMEDIATE
9