"Hai Amigo! Saya harap Anda menikmati menyelesaikan tugas menggunakan metode Anda sendiri, dan Anda menyadari betapa nyamannya membuat metode. Sekarang mari kita bicara tentang topik yang paling menarik dari semuanya."

"Kamu membuatku tertarik, Diego... Topik baru?"

"Setiap topik adalah baru untukmu, robot mudaku! Dan yang satu ini tidak terkecuali. Meskipun sekali lagi ini tentang metode. Kamu mungkin sudah menyadari dari metode seperti itu kita bisa System.out.println()meneruskan argumen ke metode. Setelah kita berada di dalam metode , kami menyebutnya sebagai parameter."

"Parameter adalah apa yang kita tulis di dalam tanda kurung?"

"Ya, tepat. Dan, faktanya, parameter sangat meningkatkan manfaat yang kita peroleh dari membuat dan menggunakan metode."

"Saya mengerti apa yang Anda katakan tentang menggunakannya, dan ternyata saya sudah melakukannya. Bagaimana kita mendeklarasikan metode dengan parameter?"

"Sebenarnya cukup sederhana:

public static void name(parameters)
{
  method body
}

"Di mana namenama unik metode dan method bodymewakili perintah yang menyusun metode. Dan parametersmerupakan tempat untuk parameter metode, dipisahkan dengan koma."

"Hmm... sepertinya aku mengerti... Atau mungkin tidak..."

"Biarkan saya memberi Anda beberapa detail lebih lanjut tentang template ini sehingga Anda yakin bahwa Anda mengerti bahwa Anda mengerti:

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

Berikut beberapa contohnya:

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

"Ah... Sekarang sudah jelas. Dan jika kita tidak ingin metode memiliki parameter, maka kita biarkan tanda kurungnya kosong."

"Tepat sekali. Pada dasarnya, parameter adalah variabel khusus dalam suatu metode. Dengan bantuannya, Anda dapat meneruskan berbagai nilai ke metode saat dipanggil. Dan jika Anda tidak perlu meneruskan nilai, biarkan tanda kurung kosong.

"Misalnya, mari kita tulis metode yang menampilkan baris teks tertentu beberapa kali. Adakah pemikiran tentang cara melakukan ini?"

"Yah... Sepertinya aku sangat paham cara menulis kode untuk menampilkan string di layar beberapa kali..."

"Bagaimana Anda menentukan string yang akan ditampilkan? Dan bagaimana Anda menentukan jumlah baris yang ditampilkan? Dapatkah Anda menebaknya?"

"Semuanya mulai menjadi jelas... Mungkin dengan bantuan parameter metode?"

"Tepat. Parameter string untuk baris teks, dan parameter numerik untuk jumlah baris yang ditampilkan. 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 suatu metode dipanggil, parameternya diberi nilai yang diteruskan, dan baru setelah itu kita mulai menjalankan perintah di dalam metode tersebut.

Argumen

"Saya ingin Anda memberikan perhatian khusus untuk memanggil metode yang memiliki parameter. Nilai yang diteruskan ke metode biasanya disebut argumen saat diteruskan ke metode.

Mari kita lihat lagi contoh kita:

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 printLinesmetode 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 ketika sebuah metode dipanggil. Nilai "Hi", "Bye", 10, dan 20itu sendiri disebut argumen."

"Saya akan mencoba mengingat perbedaannya dan tidak mengacaukan konsep-konsep ini."

Nama variabel yang bertentangan saat memanggil metode

"Saat Anda memanggil metode, Anda bisa menggunakan variabel sebagai argumen.

"Yah, itu masuk akal!"

"Itu masuk akal, tetapi berpotensi menimbulkan beberapa kesulitan. Mari kita kembali ke contoh kita sekali lagi, 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";
     String 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;

"Hmm... Saya tidak melihat adanya kesulitan. Kami memiliki variabel str. Nilainya diberikan ke textparameter saat metode dipanggil. Kami memiliki variabel n. Nilainya diberikan ke countparameter saat metode dipanggil." "Sejauh ini, semuanya jelas."

"Bagus, bagus. Sekarang mari kita ganti nama variabel kita di dalam mainmetode:

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";
     String 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 kita mengganti nama variabel dalam metode utama, tidak ada yang berubah. Mereka adalah variabel yang berbeda dalam metode yang berbeda sebelumnya, jadi tetap ada. Tidak ada hubungan ajaib antara kedua textvariabel."

"Sekarang saya tahu."

Melewati referensi ke metode

"Saya harap Anda sudah mengasimilasi semua yang saya katakan tentang meneruskan argumen ke metode. Saya mengatakan itu, karena sekarang kita akan menyelam lebih dalam ke topik ini. Dengarkan baik-baik."

"Anda sudah tahu bahwa beberapa variabel di 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 pengembang menugaskan variabel array lain ke variabel array, apa yang terjadi?"

"Apakah kemudian mereka menunjuk ke alamat yang sama?"

"Benar. Kedua variabel mulai merujuk ke ruang yang sama di memori:

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

Kode Penjelasan
class Solution
{
   public static void sum(int[] data)
   {
     int total = 0;
     for (int i = 0; i < data.length; i++)
       total = total + data[i];
     System.out.println(total);
   }
   
   public static void main(String[] args)
   {
     int[] months = {31, 28, 31, 30, 31, 30, 31, 31, 30};
     sum(months);
   }
}


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

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

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

"Kurasa aku mengerti, tapi aku butuh lebih banyak contoh!"

"Yah, misalnya, kita bisa 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.

Metode dengan nama yang sama

"Sekarang mari kita kembali ke nama metode sekali lagi."

"Aku tidak bisa membayangkan apa lagi yang bisa dikatakan tentang nama!"

"Yah, standar bahasa Java mengharuskan semua metode di kelas yang sama memiliki nama yang unik.

"Jadi, tidak mungkin mendeklarasikan dua metode dengan nama yang sama di kelas yang sama?"

"Sekarang - perhatikan baik-baik! Metode di kelas memang bisa memiliki nama yang identik! Tetapi dalam hal ini, mereka harus memiliki parameter yang berbeda. Dengan kata lain, metode dibandingkan untuk kesamaan, tidak hanya nama yang diperhitungkan, tetapi juga jenis-jenis parameter ! Perhatikan bahwa saya secara khusus mengatakan jenis. Nama-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."

"Saya benar-benar bingung! Mengapa kita membutuhkan semua ini? Mengapa beberapa metode dianggap sama , sedangkan yang lain berbeda ? Dan mengapa nama parameter tidak diperhitungkan saat menentukan keunikan suatu metode? Mengapa keunikan diperlukan di semua?"

"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. Tetapi jika Anda menulis , kompiler akan melihat panggilan ke metode dengan parameter. Ia tidak tahu apa nama yang diberikan programmer ke parameter saat mendeklarasikan metode."System.out.println("Hi")println()StringSystem.out.println(1.0)println()double

Ahh, sepertinya mulai tembus!

"Ketika sebuah metode dipanggil, kompiler memastikan bahwa jenis argumen cocok dengan jenis parameter. Itu tidak memperhatikan nama argumen. Di Jawa, nama parameter tidak membantu kompiler menentukan metode mana yang akan digunakan. panggilan Programmer membutuhkannya, bukan kompiler.

"Dan kurasa itu sebabnya mereka tidak diperhitungkan saat menentukan keunikan suatu metode?"

"Ya, itu sepenuhnya benar. Nama metode dan jenis parameternya disebut tanda tangan metode . Misalnya, sum (int, int)"

"Jadi setiap kelas harus memiliki metode dengan tanda unik daripada metode dengan nama unik."

"Bagus, Amigo! Kamu meringkas pelajaran ini dengan sempurna. Jika masih ada yang tidak jelas, jangan panik. Topik ini akan menjadi jelas setelah beberapa tugas."