JavaRush /Java Blog /Random-ID /Metode di Jawa

Metode di Jawa

Dipublikasikan di grup Random-ID
Ada satu prinsip menarik yang sudah banyak didengar. Ini disebut "Membagi dan Menaklukkan". Prinsip ini digunakan dalam banyak bidang kehidupan manusia, misalnya dalam politik. Ini menunjukkan pembagian sejumlah besar bagian-bagian heterogen dalam suatu negara, menghasut dan menggunakan permusuhan di antara bagian-bagian ini. Dengan kata lain: menciptakan konflik antar pihak yang berpotensi menimbulkan ancaman terhadap kekuasaan. Tapi kami adalah programmer, jadi kami hanya tertarik pada interpretasi teknis dari prinsip ini. Dan bunyinya seperti ini: “Prinsip “Divide and Conquer” adalah memecah suatu masalah besar menjadi masalah-masalah kecil hingga menjadi masalah yang mendasar. Maka Anda perlu menyelesaikannya secara berurutan dan menggabungkan semuanya menjadi satu sistem yang utuh. Program ini harus menyelesaikan masalah yang diberikan” Artinya, Anda cukup memecah masalah besar menjadi masalah-masalah kecil, yang bukan merupakan masalah yang harus Anda selesaikan. Dan kemudian Anda mengumpulkan solusinya menjadi satu solusi besar. Untuk mengikuti prinsip sederhana dan berguna ini, pemrograman Java menggunakan metode. Metode di Java - 1Misalnya kita membuat robot petinju. Penting bagi kami bahwa dia bergerak dengan baik, melakukan serangan yang akurat, dan juga mengawasi musuh dalam mencari titik lemah. Akan terasa canggung untuk menulis semua ini dalam satu metode utama , bukan? Jika kita menjelaskan semuanya dalam satu metode, maka akan menjadi seperti ini:
метод main() {
// Описание действий шага вперед
подача напряжения в отдельные модули;
поднятие ноги;
перевод в другую точку;
поставить ногу;
перенести вес на другую ногу;
если (противникАтакует()) {
        	// Описание действий уклонения робота.
        	...
} еслиНет {
        	// Описание действий обманного атакующего удара.
        	...
}
// Описание действий шага назад
...
}
Bagaimana jika kita perlu mengambil langkah maju atau mengambil langkah lain dalam program ini? Jelaskan semua tindakannya lagi? Tidak cocok. Ada terlalu banyak baris berulang sehingga mudah hilang. Kita perlu menempatkan deskripsi detail tindakan dalam modul terpisah, yang akan melakukan langkah robot. Dan kita dapat memanggil metode ini dalam satu baris. Sesuatu seperti ini:
метод шагВперед() {
// Описание действий шага вперед
  	подача напряжения в отдельные модули;
  	поднятие ноги;
  	перевод в другую точку;
  	поставить ногу;
  	перенести вес на другую ногу;
}

метод уклонение() {
  	// Действия для уклонения
  	...
}

метод обманныйАтакующийУдар() {
  	// Действия для удара
  	...
}

метод шагНазад() {
  	// Действия для шага назад
  	...
}

метод противникАтакует() {
	// Робот проверяет атакует ли противник
}

метод main() {
	шагВперед();
	если (противникАтакует()) {
        	уклонение();
	} еслиНет {
  	  обманныйАтакующийУдар();
	}
	шагНазад();
}
Sekarang kami telah memisahkan fungsi robot, serta metode main() yang ringkas dan jelas . Metode lainnya juga dapat dibagi menjadi beberapa fungsi, misalnya, deceptiveAttackingStrike dapat dibagi menjadi metode deceptiveMovement , Leg Movement , Attack . Dan mereka, pada gilirannya, ditugaskan ke tugas-tugas yang lebih sederhana untuk pada akhirnya mendapatkan serangkaian tugas dasar. Oke, sekarang mari kita tulis semuanya dengan indah dalam bentuk yang bisa diterima Java.
public static void stepForward() {
  	    // Многострочный code, описывающий
  	    // действия робота для выполнения шага
  	    System.out.println("The robot takes a step forward");
}

public static void evasion() {
  	    // Действия для уклонения
  	    System.out.println("Robot shy of impact");
}

public static void deceptiveAttackBlow() {
  	    // Действия для удара
  	    System.out.println("The robot performs a deceptive strike");
}

public static void stepBack() {
  	    // Действия для шага назад
  	    System.out.println("The robot takes a step backwards");
}

public static void main(String[] args) {
    	stepForward();
    	if (isEnemyAttacked()) {
        		evasion();
    	} else {
  	    	deceptiveAttackBlow();
    	}
    	stepBack();
}

public static boolean isEnemyAttacked() {
    	// Метод проверяет, атакует ли враг. returns логическое meaning.
    	return true;
}
Saya memahami bahwa kode ini mungkin sedikit tidak jelas bagi Anda sekarang, terutama beberapa kata seperti void , return dan sebagainya. Jangan terburu-buru membuang tomat, saya akan jelaskan semuanya sekarang. Gagasan umum tentang paradigma “Memecah dan Menaklukkan” harus jelas bagi Anda. Metode akan membantu kita dalam hal ini. Struktur umum deklarasi metode adalah sebagai berikut:
модификатор_доступа возвращаемое_meaning Name_метода(принимаемые_параметры) {
   	//Тело метода
}

Pengubah akses

Pengubah akses adalah beberapa kata kunci: public , private , package . Kata-kata ini menunjukkan ruang lingkup metode ini. Saya akan menjelaskannya secara sederhana: dengan kata ini Anda seolah-olah sedang berbagi suguhan lezat dengan orang lain. Yummy adalah metodemu. Jika private , Anda tidak membagikan metode ini dengan kelas lain. Jika package , Anda hanya berbagi dengan kelas-kelas di dalam paket (kelas dikumpulkan ke dalam paket tertentu, Anda akan mempelajarinya nanti). Nah, publik menunjukkan bahwa Anda berbaik hati dan berbagi suguhan (metode) yang lezat dengan seluruh program. Sesuatu seperti ini. Setelah beberapa level Anda akan memahami peran kata-kata ini dengan lebih baik.

Nilai kembalian

Lihat contoh di atas: semua metode ditandai dengan kata kunci void , kecuali satu - isEnemyAttacked , yang mengembalikan nilai boolean . Jika suatu metode ditandai void , metode tersebut mungkin tidak mengembalikan apa pun. Metode ini hanya melakukan serangkaian tindakan dan hanya itu. Sekarang perhatikan cara utamanya . Metode-metode yang mengembalikan kekosongan disebut begitu saja, di dalam isi metode. Namun metode isEnemyAttacked dipanggil dalam tanda kurung pernyataan if . Karena fakta bahwa ia mengembalikan nilai boolean, kita mendapat kesempatan untuk tidak menggunakan variabel perantara, tetapi untuk memasukkannya secara langsung. Pengembalian nilai terjadi menggunakan kata kunci return . Jika suatu metode mengembalikan tipe int , kita dapat memanggil metode tersebut dari ekspresi apa pun:
public static int getNumber() {
 	    return 5;
}

public static void main(String[] args) {
    	int result = 5 + 6 + getNumber();
    	System.out.println(result);
}
Kesimpulan:
16
Metode getNumber mengembalikan nilai int , sehingga kita dapat memanggilnya dari ekspresi. Selain itu, metode ini dapat mengembalikan tipe apa pun, termasuk tipe yang Anda buat sendiri. Jika Anda menentukan tipe pengembalian untuk suatu metode, maka Anda harus mengembalikan sesuatu. Anda tidak dapat menulisnya seperti ini:
public static int findMaxNumber(int a, int b) {
 	if(a>b) {
 	    return a;
 	}
}
Kompiler akan memarahi Anda bahwa ketika kondisi pertama terpenuhi, Anda mengembalikan sesuatu, tetapi ketika kondisi kedua terpenuhi, Anda tidak mengembalikannya.

Melewati parameter

Anda dapat meneruskan parameter ke metode yang digunakan selama operasinya. Contoh paling primitif adalah penjumlahan dua angka. Tapi kami tidak primitif, bukan? Mari kita ambil contoh lain, yang cukup stereotip. Katakanlah kita memiliki metode chef() - masak. Kita dapat meneruskan bahan sup ke metode ini di blok parameter, dan sebagai hasilnya, metode ini mengembalikan sup tersebut kepada kita. Seperti ini:
public static void main(String[] args) {
    	String[] ingredients;
    	// Инициализация массива ингредиентов
    	Soup soup = chef(ingredients);

}

public static Soup chef(String[] ingredients) {
    	Soup soup = new Soup();
    	// Процесс варки супа
    	return soup;
}
(Misalnya kita memiliki kelas Soup yang telah dibuat sebelumnya ) Dalam metode utama, kita membuat serangkaian bahan dan kemudian “memberikannya kepada koki” (meneruskan ke metode koki ). “Si juru masak membuat sup” dan kemudian mengembalikannya kepada kita sebagai objek kelas Soup . Semuanya sangat sederhana. Anda dapat meneruskan parameter apa pun, tipe primitif, objek, array, dan sebagainya ke metode ini.

Melewati parameter berdasarkan referensi dan nilai

Dalam bahasa pemrograman Java, parameter apa pun diteruskan ke suatu metode berdasarkan nilainya. Namun, mekanisme ini berbeda untuk tipe primitif dan objek. Jika Anda memasukkan tipe primitif apa pun ke dalam suatu metode dan mengubahnya, itu tidak akan mengubah metode utama. Anda cukup memberikan salinan nilainya, dan variabel asli dipertahankan. Contoh paling sederhana:
public static void main(String[] args) {
    	int x = 1;
    	System.out.println(x);
    	getNumber(x);
    	System.out.println(x);

	}

	public static void getNumber(int i) {
    	i = i + 100;
	}
Kesimpulan:
sebelas
Namun, dalam kasus objek, perubahan mempengaruhi objek aslinya:
public class Program
{
	public static void main(String[] args) {
    	WiseMan wiseMan = new WiseMan();
    	wiseMan.setIq(300);
    	System.out.println(wiseMan);
    	changeObject(wiseMan);
    	System.out.println(wiseMan);

	}

	public static void changeObject(WiseMan m) {
    	m.setIq(100);
	}
}

public class WiseMan {
	int iq;

	public void setIq(int iq) {
    	this.iq = iq;
	}

	public int getIq() {
    	return iq;
	}

	public String toString() {
    	return "Our wise man has an IQ "+iq;
	}
}
Kesimpulan:
Orang bijak kita punya IR 300 Orang bijak kita punya IR 100
Kami memiliki kelas WiseMan yang memiliki properti iq . Dan dua metode yang mengontrol nilai bidang ini. Dalam metode utama kita membuat objek wiseMan , atur nilai iq menjadi 300 . Kemudian kita meneruskan sage kita dengan iq 300 ke metode changeObject . Namun dalam metode ini dia menjadi bodoh. Kita atur nilai iq menjadi 100. Kemudian pada metode utama kita mencetak objeknya. Anda dapat melihat bahwa dalam metode changeObject kita memanipulasi sage lain di variabel m . Namun, kami memodifikasi objek asli kami. Faktanya adalah bahwa objek wiseMan dalam metode utama dan objek m dalam metode changeObject adalah orang bijak yang sama, dan referensi ke objek tersebut disalin ke dalam metode sebagai parameter. Ingatlah hal ini saat Anda mengedit objek dalam metode individual.

Terakhir, beberapa kata tentang pengubah statis

Secara umum, beberapa kata tidak cukup di sini, tetapi saya akan mencoba. Metode reguler yang tidak ditandai dengan pengubah ini termasuk dalam objek kelas. Dan metode statis adalah milik kelas itu sendiri. Metode reguler dapat digunakan pada objek individual. Lihatlah kelas WiseMan dari contoh di atas. Setiap orang bijak akan memiliki metode getIq dan setIq masing-masing , karena tingkat IQ setiap orang berbeda-beda. Jika kita menambahkan metode statis generateAWisePhrase ke kelas ini , maka kita dapat memanggil metode tersebut tanpa objek:
WiseMan.generateAWisePhrase();
Secara umum informasi tersebut cukup untuk saat ini, karena beberapa kuliah dapat ditulis tentang statis . Ikuti beberapa aturan saat menulis metode untuk menjaga ketertiban dalam kode Anda:
  • Berikan nama yang bermakna pada metode Anda sehingga jelas apa fungsinya.
  • Cobalah untuk tidak menulis metode yang terlalu panjang. Panjang optimalnya adalah 8-15 baris.
  • Jumlah parameter metode tidak boleh melebihi 4-5.
  • Jika Anda memiliki fungsi serupa dua kali dalam kode Anda, pikirkan: mungkin ada baiknya menggeneralisasikannya dan memasukkannya ke dalam metode terpisah?
Teknik-teknik ini akan membantu Anda meningkatkan kinerja program Anda dan, yang paling penting, membuat kode Anda lebih mudah dibaca.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION