1. Melewati argumen

Dan sekarang kesenangan dimulai. Anda mungkin sudah tahu dari metode seperti System.out.println()itu kita bisa meneruskan argumen ke metode. Begitu kita berada di dalam metode, kita menyebutnya sebagai parameter. Faktanya, parameter sangat meningkatkan manfaat yang kita peroleh dari membuat dan menggunakan metode.

Bagaimana kita mendeklarasikan metode dengan parameter? Ini sebenarnya cukup sederhana:

public static void name(parameters)
{
  method body
}

Di mana name nama unik dari metode tersebut dan method body mewakili perintah yang membentuk metode tersebut. Dan parameters merupakan placeholder untuk parameter metode, dipisahkan dengan koma. Mari jelaskan template ini lebih detail:

public static void name(Type1 name1, Type2 name2, Type3 name3)
{
  method body
}

Contoh:

Kode Penjelasan
public static void print(String str)
{
}
Metode ini printdideklarasikan dengan parameter:
String str
public static void print(String str, int count)
{
}
Metode ini printdideklarasikan dengan dua parameter:
String str
int count
public static void write(int x, int y)
{
}
Metode ini writedideklarasikan dengan dua parameter:
int x
int y

Jika kita tidak ingin metode memiliki parameter, maka kita biarkan tanda kurungnya kosong.

Parameter adalah variabel khusus dalam suatu metode. Dengan bantuan mereka, Anda dapat meneruskan berbagai nilai ke metode saat dipanggil.

Sebagai contoh, mari kita menulis metode yang menampilkan string teks beberapa kali.

Anda sudah tahu cara menulis kode untuk menampilkan string di layar beberapa kali. Tapi string mana yang harus Anda cetak? Dan berapa kali? Untuk itulah kami membutuhkan parameter.

Kode yang melakukan ini akan terlihat seperti ini:

Kode Penjelasan
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.println(text);
   }

   public static void main(String[] args)
   {
     printLines("Hi", 10);
     printLines("Bye", 20);
   }
}


Kami mendeklarasikan printLinesmetode dengan parameter berikut:
String text, int count
Metode menampilkan text countwaktu String





Kami memanggil printLinesmetode dengan berbagai parameter

Setiap kali sebuah metode dipanggil, parameternya diberi nilai yang diteruskan, dan baru setelah itu kita mulai menjalankan perintah di dalam metode tersebut.


2. Argumen

Saya ingin lebih menarik perhatian Anda untuk memanggil metode dengan parameter.

Nilai yang diteruskan ke metode biasanya disebut argumen saat diteruskan ke metode.

Mari kita lihat contoh lain:

Kode Penjelasan
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.println(text);
   }

   public static void main(String[] args)
   {
     printLines("Hi", 10);
     printLines("Bye", 20);
   }
}


Kami mendeklarasikan printLinesmetode dengan parameter berikut:
String text, int count
Metode menampilkan text countwaktu String




Kami memanggil printLinesmetode dengan argumen berikut:
text = "Hi"; count = 10;
text = "Bye"; count = 20;

Saat printLines metode dipanggil untuk pertama kali, parameternya diberi nilai berikut:
String text = "Hi", int count = 10.

Ketika printLinesmetode dipanggil untuk kedua kalinya, parameternya diberi nilai yang berbeda:
String text = "Bye", int count = 20.

Parameter tidak lebih dan tidak kurang dari variabel yang diberi nilai tertentu saat metode dipanggil. Nilai "Hi", "Bye", 10, dan 20itu sendiri disebut argumen."


3. Nama variabel yang bertentangan saat memanggil metode

Variabel dapat digunakan sebagai argumen metode. Ini sederhana dan dapat dimengerti, tetapi berpotensi menimbulkan beberapa kesulitan. Mari kita kembali ke contoh yang sama, tapi kali ini kita akan memindahkan argumen ke dalam variabel terpisah:

Kode Penjelasan
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.print(text);
   }

   public static void main(String[] args)
   {
     String str = "Hi";
     int n = 10;
     printLines(str, n);
   }
}


Kami mendeklarasikan printLinesmetode dengan parameter berikut:
String text, int count
Metode menampilkan text countwaktu String







Kami memanggil printLinesmetode dengan argumen berikut:
text = str;
count = n;

Sejauh ini, sangat bagus: kami memiliki strvariabel. Nilainya diberikan ke textparameter saat metode dipanggil. Kami memiliki nvariabel. Nilainya diberikan ke countparameter saat metode dipanggil." Sejauh ini, semuanya jelas.

Sekarang mari kita ganti nama variabel kita dalam mainmetode ini:

Kode Penjelasan
class Solution
{
   public static void printLines(String text, int count)
   {
     for (int i = 0; i < count; i++)
       System.out.print(text);
   }

   public static void main(String[] args)
   {
     String text = "Hi";
     int count = 10;
     printLines(text, count);
   }
}


Kami mendeklarasikan printLinesmetode dengan parameter berikut:
String text, int count
Metode menampilkan text countwaktu String







Kami memanggil printLinesmetode dengan argumen berikut:
text = text;
count = count;

Perhatikan dua hal

Pertama: kami memiliki variabel dengan nama yang sama dalam metode yang berbeda. Ini adalah variabel yang berbeda (kami sengaja menggambarkannya menggunakan warna berbeda). Semuanya bekerja sama seperti pada contoh sebelumnya, di mana variabel dalam mainmetode diberi nama strdan n.

Kedua: Tidak ada yang ajaib terjadi ketika metode ini dipanggil. Parameter hanya diberi nilai argumen. Terlepas dari apakah itu angka, string, variabel, atau ekspresi.

Setelah kami mengganti nama variabel dalam metode utama, tidak ada yang berubah. Mereka adalah variabel yang berbeda dalam metode yang berbeda sebelumnya, dan karenanya tetap ada. Tidak ada hubungan ajaib antara text dan text variabel.



4. Melewati referensi ke metode

Saya harap Anda memahami semuanya dari pelajaran sebelumnya, karena sekarang kita akan meninjau kembali argumen yang diteruskan ke metode, hanya saja kita akan menyelami lebih dalam.

Seperti yang telah Anda ketahui, beberapa variabel Java tidak menyimpan nilai itu sendiri, melainkan referensi, yaitu alamat blok memori tempat nilai berada. Ini adalah cara kerja variabel string dan variabel array.

Ketika Anda menetapkan variabel array lain ke variabel array, apa yang terjadi? Itu benar. Kedua variabel mulai merujuk ke ruang yang sama di memori:

Melewati referensi ke metode

Dan apa yang terjadi jika salah satu dari variabel ini adalah parameter metode?

Kode Penjelasan
class Solution
{
   public static void printArraySum(int[] data)
   {
     int sum = 0;
     for (int i = 0; i < data.length; i++)
       sum = sum + data[i];
     System.out.println(sum);
   }

   public static void main(String[] args)
   {
     int[] months = {31, 28, 31, 30, 31, 30, 31, 31, 30};
     printArraySum(months);
   }
}


Metode ini printArraySummenghitung jumlah angka dalam larik yang diteruskan dan menampilkannya di layar

Hal yang persis sama terjadi: data parameter akan berisi referensi ke area memori yang sama dengan variabel months. Saat metode dipanggil, tugas sederhana terjadi: .data = months

Dan karena kedua variabel merujuk ke area memori yang sama yang menyimpan bilangan bulat, maka printArraySum metode tersebut tidak hanya dapat membaca nilai dari array, tetapi juga mengubahnya!

Sebagai contoh, kita dapat menulis metode kita sendiri yang mengisi array dua dimensi dengan nilai yang sama. Begini tampilannya:

Kode Penjelasan
class Solution
{
   public static void fill(int[][] data, int value)
   {
     for (int i = 0; i < data.length; i++)
     {
       for (int j = 0; j < data[i].length; j++)
         data[i][j] = value;
     }
  }

   public static void main(String[] args)
   {
     int[][] months = {{31, 28}, {31, 30, 31}, {30, 31, 31}};
     fill (months, 8);
   }
}


Metode ini fill mengulangi setiap sel dalam larik dua dimensi yang diteruskan dan menetapkannya value.








Kami membuat array dua dimensi.
Kami mengisi seluruh array dengan nomor 8.


5. Metode dengan nama yang sama

Sekarang mari kembali ke nama metode sekali lagi.

Standar Java mengharuskan semua metode di kelas yang sama memiliki nama yang unik. Dengan kata lain, tidak mungkin mendeklarasikan dua metode dengan nama yang sama di kelas yang sama.

Ketika metode dibandingkan untuk kesamaan, tidak hanya nama yang diperhitungkan, tetapi juga jenis parameternya ! Perhatikan bahwa nama parameter tidak diperhitungkan . Contoh:

Kode Penjelasan
void fill(int[] data, int value) {
}
void fill(int[][] data, int value) {
}
void fill(int[][][] data, int value)  {
}
Ketiga metode ini merupakan metode yang berbeda . Mereka dapat dideklarasikan di kelas yang sama.
void print(String str) {
}
void print(String str, String str2) {
}
void print(int val) {
}
void print(double val) {
}
void print() {
}
Masing-masing dari kelima metode ini dianggap berbeda . Mereka dapat dideklarasikan di kelas yang sama.
void sum(int x, int y) {
}
void sum(int data, int value) {
}
Kedua metode ini dianggap sama , artinya tidak dapat dideklarasikan dalam kelas yang sama.

Mengapa beberapa metode dianggap sama , sementara yang lain berbeda ? Dan mengapa nama parameter tidak diperhitungkan saat menentukan keunikan suatu metode?

Mengapa keunikan diperlukan sama sekali? Masalahnya adalah ketika kompiler mengkompilasi sebuah program, ia harus tahu persis metode mana yang ingin Anda panggil di tempat tertentu.

Misalnya, jika Anda menulis , kompilernya pintar dan akan dengan mudah menyimpulkan bahwa Anda bermaksud memanggil metode di sini dengan parameter.System.out.println("Hi")println()String

Tetapi jika Anda menulis , kompiler akan melihat panggilan ke metode dengan parameter.System.out.println(1.0)println()double

Saat sebuah metode dipanggil, compiler memastikan bahwa tipe argumen cocok dengan tipe parameter. Itu tidak memperhatikan nama argumen. Di Java, nama parameter tidak membantu kompiler menentukan metode mana yang akan dipanggil. Dan itulah mengapa mereka tidak diperhitungkan saat menentukan keunikan suatu metode.

Nama metode dan jenis parameternya disebut tanda tangan metode . Misalnya,sum(int, int)

Setiap kelas harus memiliki metode dengan tanda unik daripada metode dengan nama unik.