Funksiyalarning to’liq strukturasi quyidagi suratda aks ettirilgan:
Funksiya imzosi (Method Signature) barcha funksiyalarda mavjud qism bo’lib, u funksiya nomi va parametrlar ro’yxatidan iborat bo’ladi.
Kirish modifikatori (Access Specifier) funksiyaga murojaat qilish turini aniqlab beradi, ya’ni undan qanday foydalanish huquqini belgilaydi. Java dasturlash tilida 4 xil turdagi modifikatorlar mavjud:
Public: Dasturning istalgan qismidan ushbu funksiyaga murojaat qilish imkoniyati mavjud.
Private: Funksiyadan faqatgina joriy sinf ichidagina foydalanish mumkinligini bildiradi.
Protected: Ushbu funksiyadan uning sinfi bilan bir xil papkalardagi sinflarda yoki uning sinfidan meros olgan sinflarda foydalanish mumkin.
Default: Agar yuqoridagi modifikatorlardan birortasi yozilmasa, funksiya default bo’ladi va undan faqat joriy papkadagi sinflarda foydalanish mumkin.
Garchi qiymat qaytarmasdan ishlaydigan funksiyalar mavjud bo’lsa ham, ko’pchilik sinflar biror qiymat qaytaradi. Funksiyani qanday tipdagi qiymat qaytarishini oldindan belgilanadi va funksiya nomidan oldin yoziladi, masalan bu sodda ma’lumot turi, murakkab ma’lumot turi, ro’yxat, kolleksiya kabilar bo’lishi mumkin.
Funksiya nomini belgilashda ham ehtiyot bo’lish zarur, u o’sha sinf ichida takrorlanmas nom bo’lishi kerak. Funksiya nomi fe’l ya’ni harakatni ifodalovchi so’z bilan va kichik harf bilan boshlanishi muhim. Shuningdek, funksiya vazifasiga monand nom bo’lishi tavsiya etiladi. Masalan, ekranga xabar chop etadigan funksiya bo’lsa print() deb nomlash zarur. Agar funksiya nomi bittadan ortiq so’zdan iborat bo’lsa ikkinchi so’zdan boshlab har bir so’z nomi katta harf boshlashini kerak. Masalan, sonni tublikka tekshiruvchi funksiya yozsangiz unga sonTubmi() yoki inglizchada isPrime() deb nom berish kerak.
Shuningdek, funksiya parametrlar qabul qiladi va ularni qayta ishlaydi. Masalan, Math.max() funksiyasi ikkita parameter qabul qiladi va ularning kattasini qaytarganidek. Funksiyani yozishda uning qanday parametrlar qabul qilishi funksiya nomidan keyin qavslar ichida parameter tipi nomi bilan vergul bilar ajratilgan holatda yoziladi.
Funksiya tanasida asosiy logika yoziladi va u figurali qavslar bilan ajratiladi.
Keling endi funksiyalarga bir nechta misollar keltiramiz.
public static void kabisaYilimi(int yil){
if(yil % 4 == 0 && yil % 400 != 0)
System.out.println(yil + "-yil kabisa yili hisoblanadi");
else System.out.println(yil + "-yil kabisa yili emas");
}
Yuqoridagi funksiya bitta int tipidagi yil nomli parameter qabul qiladi va uni kabisa yili yoki yo’qligini tekshiradi. Endi shu funksiyaga har xil qiymat berib tekshiramiz.
public static void main(String[] args) {
kabisaYilimi(2005);
kabisaYilimi(1996);
kabisaYilimi(2000);
}
Konsulga quyidagi satrlar chop etiladi.
2005-yil kabisa yili emas
1996-yil kabisa yili hisoblanadi
2000-yil kabisa yili emas
Endi xuddi shu vazifani bajaradigan ammo xabarni String tipida qaytaradigan funksiya yozamiz va boshqa qiymatlar bilan tekshirib ko’ramiz.
protected String kabisaYilimi(int yil) {
if (yil % 4 == 0 && yil % 400 != 0)
return yil + "-yil kabisa yili hisoblanadi";
return yil + "-yil kabisa yili emas";
}
public static void main(String[] args) {
NamunaSinf namunaSinf = new NamunaSinf();
System.out.println(namunaSinf.kabisaYilimi(2016));
System.out.println(namunaSinf.kabisaYilimi(2007));
System.out.println(namunaSinf.kabisaYilimi(2400));
}
Konsul:
2016-yil kabisa yili hisoblanadi
2007-yil kabisa yili emas
2400-yil kabisa yili emas
Quyidagi funksiya long tipidagi sonning raqamlar yig’indisini hisoblaydi va natijani int tipida qaytaradi.
static int raqamlarYigindisi(long son){
int yigindi = 0;
while(son > 0){
yigindi += son % 10;
son /= 10;
}
return yigindi;
}
public static void main(String[] args) {
System.out.println(raqamlarYigindisi(243L)); // 9
System.out.println(raqamlarYigindisi(9873145345345L)); // 61
}