Navigasi buku
Parameter

Sebagai analogi, kita ambil contoh AC -- yaitu alat yang mengatur suhu ruangan pada temperatur konstan. AC memiliki parameter, yaitu tombol remote yang digunakan untuk memasukkan suhu yang diinginkan. AC akan selalu melakukan tugas yang sama, yaitu mengatur suhu ruangan. Akan tetapi, tugas persis yang dilakukan tergantung suhu yang diterima dari remote control.
Kita ambil contoh pada kelas KonsolInput pada bagian terdahulu.
public static double ambilDouble(String pertanyaan) { String strbilangan = null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); double bilangan; System.out.print(pertanyaan); try { strbilangan = br.readLine(); } catch (IOException ioe) { System.out.println("Kesalahan IO, program berhenti"); System.exit(1); } bilangan = Double.parseDouble(strbilangan); return bilangan; }
a = ambilDouble("hallo");
. Ketika komputer menjalankan perintah ini, komputer akan memasukkan "hallo" ke dalam parameter "pertanyaan", kemudian subrutin ambilDouble menjalankan semua perintah di dalamnya.Jika parameter yang diberikan berupa variabel, misalnya variabel
str
berisi "kabar", kemudian subrutin ambilDouble panggil dengan perintah ambilDouble(str)
, maka isi dari str akan dikopi ke dalam parameter "pertanyaan" terlebih dahulu sebelum seluruh perintah dalam subrutin ambilDouble dilaksanakan.Perlu dicatat bahwa istilah "parameter" digunakan dalam dua konsep berbeda tetapi berkaitan. Yang pertama adalah "parameter" digunakan untuk mendefinisikan suatu subrutin. Parameter yang digunakan pada definisi suatu subrutin disebut parameter formal. "Parameter" yang digunakan untuk memanggil suatu subrutin disebut parameter aktual. Ketika suatu subrutin dipanggil, parameter aktual akan dievaluasi, dan hasilnya akan dimasukkan ke dalam parameter formal.
Parameter formal berbentuk seperti pengenal atau nama, dan bersifat seperti halnya variabel dan memiliki tipe -- misalnya int, double, atau String. Parameter aktual bersifat seperti nilai atau angka, jadi bisa berbentuk ekspresi atau perintah apapun yang menghasilkan nilai atau angka. Sewaktu kita memanggil subrutin, kita harus memberi parameter aktual untuk setiap parameter formal yang didefinisikan.
Misalnya, lihat contoh berikut.
static void lakukanSesuatu(int N, double d, boolean b) { ... // perintah lainnya di sini }
lakukanSesuatu(1, Math.random() * 3, x == 3);
{ int N; double d; boolean b; N = 1; d = Math.random() * 3; b = (x == 3); ... // perintah lainnya di sini }
Java agak sedikit berbeda karena memungkinkan dua atau lebih subrutin yang berbeda dalam kelas yang sama memiliki tanda subrutin yang berbeda. (Mirip seperti bahasa C++) Subrutin yang seperti ini disebut subrutin yang dibebanlebihkan (overloaded). Misalnya,
void taruh(String s) { ... } void taruh(int i) { ... } void taruh(double d) { ... } void taruh(boolean b) { ... }

Catatan : Overload tidak berlaku pada tipe keluaran subrutin. Dua atau lebih subrutin dengan nama sama dalam suatu kelas tetapi memiliki tipe keluaran yang berbeda tidak diperbolehkan dalam Java. Misalnya, kalau kita coba definisikan 2 fungsi seperti berikut, maka Java akan memberi pernyataan kesalahan sintaks.
int ambil(String s) { ... } boolean ambil(String s) { ... } double ambil(String s) { ... }
Variabel lokal tidak memiliki hubungan dengan dunia luar sama sekali. Parameter digunakan untuk berhubungan dengan dunia luar sebagai alat untuk menerima nilai atau angka dari dunia luar. Perubahan nilai pada variabel lokal dan parameter tidak mempengaruhi variabel itu sendiri karena sifatnya terisolasi.
Hal yang sama sekali berbeda akan terjadi apabila suatu subrutin menggunakan variabel yang didefinisikan di luar subrutin itu. Variabel tersebut hidup secara terpisah dari subrutin, dan bisa diakses oleh apapun di luar subrutin itu. Variabel ini disebut variabel global. Variabel ini terlihat oleh semua subrutin dalam kelas tersebut. Perubahan yang terjadi di sini dapat mempengaruhi cara kerja subrutin lain yang menggunakan variabel tersebut.
Hal ini kita lihat pada contoh sebelumnya tentang subrutin dan variabel statik untuk menghitung statistik komputerMenang, userMenang, dan seri.
Tidak ada yang salah dalam menggunakan variabel global, akan tetapi kita harus terus ingat bahwa variabel global itu harus sebagai bagian dari antar muka subrutin kita dengan keseluruhan dunia luar. Cara ini sebetulnya jalan belakang yang tidak terdokumentasi seperti pada definisi subrutin, yang apabila aturan-aturannya tidak dipenuhi secara disiplin mungkin akan menyebabkan bug atau kesalahan lain di luar kontrol kita.
Paling tidak ada satu alasan untuk menggunakan variabel global, yaitu apabila kelas secara keseluruhan dianggap sebagai kotak hitam, akan lebih masuk akal apabila subrutin bisa mengintip sedikit keluar dan saling menukar informasi jika cara ini jauh lebih mudah diimplementasikan dan dilihat dari dunia luar.

Tidak ada komentar:
Posting Komentar