JavaRush /Kurslar /All lectures for UZ purposes /Java-da funksiya parametrlari

Java-da funksiya parametrlari

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Parametrlarni uzatish

Mana endi eng qiziq qism boshlandi. Siz allaqachon System.out.println() kabi metodlarga parametrlarni uzatishni bilasiz, metodlarga parametrlardan foydalanish orqali ulardan foydalanishni juda foydali qiladi.

Qanday qilib parametrli metodni e'lon qilamiz? Aslida bu juda oddiy:

public static void nomi(parametrlar)
{
   metod kodi
}

Bu yerda nomi — metodning noyob nomi, va metod kodi — metodni tashkil etuvchi buyruqlar. parametrlar — metodning parametrlari, vergul bilan ajratilgan. Keling, bu shablonni batafsilroq ko'rib chiqamiz:

public static void nomi(tip1 nomi1, tip2 nomi2, tip3 nomi3)
{    metod kodi
}

Misollar:

Kod Izoh
public static void print(String str)
{
}
print metodi e'lon qilinadi
String str parametri bilan
public static void print(String str, int count)
{
}
print metodi e'lon qilinadi ikki parametrlar bilan
String str
int count
public static void write(int x, int y)
{
}
write metodi e'lon qilinadi ikki parametrlar bilan
int x
int y

Agar metodda parametrlar bo'lishini xohlamasak, shunchaki qavslarni bo'sh qoldiramiz.

Parametrlar — bu metodning maxsus o'zgaruvchilari. Ular yordamida metodni chaqirishda turli qiymatlar uzatilishi mumkin.

Keling, masalan, ekranga berilgan matn qatorini ma'lum bir marta chiqaradigan metod yozamiz.

Matnni ekranga bir necha marta chiqarish kodini yozishni allaqachon bilasiz. Ammo qaysi matnni chiqarish kerak? Va necha marta? Shu uchun bizga parametrlar kerak bo'ladi.

Mana, bu masala kodingiz qanday ko'rinishda bo'ladi:

Kod Izoh
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("Salom", 10);
     printLines("Xayr", 20);
   }
}


Metod printLines quyidagi parametrlari bilan e'lon qilindi:
String text, int count
Metod count marta ekranga text qatorini chiqaradi





Metodni chaqirish printLines turli parametrlari bilan

Har safar metod chaqirilganda uning o'zgaruvchi-parametrlariga uzatilgan qiymatlar tayinlanadi va shundan so'nggina metod ichidagi buyruqlar bajarila boshlaydi.


2. Metod argumentlari

Yana bir oz e'tiboringizni parametrli metodning chaqirilishiga qaratmoqchiman.

Metodga uzatilgan qiymatlar uning chaqirilishida metodning argumentlari deb ataladi.

Keling, yana bir bor misolni ko'rib chiqaylik:

Kod Izoh
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("Salom", 10);
     printLines("Xayr", 20);
   }
}


Metod printLines quyidagi parametrlari bilan e'lon qilindi:
String text, int count
Metod count marta ekranga text qatorini chiqaradi




Metodni chaqirish printLines quyidagi parametrlari bilan:
text = "Salom"; count = 10;
text = "Xayr"; count = 20;

Metod printLines birinchi marta chaqirilganda, uning o'zgaruvchi-parametrlari quyidagi qiymatlarni oldi:
String text = "Salom", int count = 10.

Metod printLines ikkinchi marta chaqirilganda, uning o'zgaruvchi-parametrlari boshqa qiymatlarni oldi:
String text = "Xayr", int count = 20.

Metod parametrlari — bu metod chaqirilganda ma'lum qiymatlar tayinlanadigan o'zgaruvchilar. O'zlari esa "Salom", "Xayr", 10 va 20 metodning argumentlari deb ataladi.


3. Metod chaqirilishida o'zgaruvchilar nomining qarama-qarshiligi

Metod argumentlari sifatida o'zgaruvchilardan foydalanish mumkin. Bu oddiy va tushunarli, lekin ba'zi murakkabliklarni keltirishi mumkin. Xuddi shu misolni ko'rib chiqamiz, lekin argumentlarni alohida o'zgaruvchilarga ajratamiz:

Kod Izoh
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 = "Salom";
     int n = 10;
     printLines(str, n);
   }
}


Metod printLines quyidagi parametrlari bilan e'lon qilindi:
String text, int count
Metod count marta ekranga text qatorini chiqaradi







Metodni chaqirish printLines quyidagi parametrlari bilan:
text = str;
count = n;

Hech qanday qiyinchilik yo'q: bizda str o'zgaruvchisi bor, uning qiymati metod chaqirilganda text o'zgaruvchisiga tayinlanadi. Bizda n o'zgaruvchisi bor, uning qiymati metod chaqirilganda count o'zgaruvchisiga tayinlanadi. Endi esa qaysi qiyinchilik borligini ko'rib chiqaylik, agar main metodda o'zgaruvchilarni qayta nomlasak:

Kod Izoh
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 = "Salom";
     int count = 10;
     printLines(text, count);
   }
}


Metod printLines quyidagi parametrlari bilan e'lon qilindi:
String text, int count
Metod count marta ekranga text qatorini chiqaradi







Metodni chaqirish printLines quyidagi parametrlari bilan:
text = text;
count = count;

Ikki narsaga diqqat qiling

Birinchi: bizda har xil metodlarda bir xil nomli o'zgaruvchilar bor. Bu har xil o'zgaruvchilar (biz ularni turli ranglarda ajratdik). Barcha narsa avvalgi misoldagi kabi ishlaydi, main metoddagi o'zgaruvchilar str va n nomlari bilan atalgan edi.

Ikkinchi: metod chaqirilganda hech qanday sehr bo'lmaydi. O'zgaruvchi-parametrlarga shunchaki argument qiymatlari tayinlanadi. Bu qanday bo'lishidan qat'iy nazar — bu aniq sonlar, qatorlar, o'zgaruvchilar yoki ifodalar bo'lsin.

Main metoddagi o'zgaruvchilarni qayta nomlashdan so'ng hech narsa o'zgarmadi. Bu turli metodlardagi har xil o'zgaruvchilar bo'lib qoldi. text va text o'zgaruvchilari orasida hech qanday sehrli aloqalar yo'q.



4. Metodlarga yo'nalishlarni uzatish

Umid qilamanki, siz avvalgi leksiyadan hamma narsani tushundingiz, chunki endi biz argumentlarni metodlarga uzatishni yana bir bor ko'rib chiqamiz, faqat yanada chuqurroq.

Bilganingizdek, ba'zi o'zgaruvchilar Java-da o'z qiymatlarini emas, balki ushbu qiymatlar joylashgan xotira blokining manzilini (havola) saqlaydi. Masalan, qator o'zgaruvchilari yoki massiv o'zgaruvchilari shunday ishlaydi.

Agar siz massiv o'zgaruvchisiga boshqa massiv o'zgaruvchisini tayinlasangiz, nima bo'ladi? To'g'ri. Ikki o'zgaruvchi xotirada bir xil konteynerga havola qiladi:

Metodlarga yo'nalishlarni uzatish

Agar ushbu o'zgaruvchilardan biri metodning parametr o'zgaruvchisi bo'lsa, nima bo'ladi?

Kod Izoh
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);
   }
}


Metod printArraySum o'tkazilgan massivdagi sonlarning yig'indisini hisoblaydi va uni ekranda chiqaradi

Huddi shunday bo'ladi: data parametr o'zgaruvchisi months o'zgaruvchisi bilan bir xil konteynerga havola qiladi. Metod chaqirilganda shunchaki data = months tayinlash sodir bo'ladi.

Ikki o'zgaruvchi bir xil butun sonlar konteyneriga havola qilishidan, printArraySum metod faqat massivdan qiymatlarni o'qib qolmasdan ularni o'zgartirishni ham qila oladi!

Masalan, biz o'zimizning maxsus metodimizni yozishimiz mumkin, u ikki o'lchamli massivni bir xil qiymatlar bilan to'ldiradi. Mana, bu qanday bo'lishi mumkin edi:

Kod Izoh
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);
   }
}


Metod fill berilgan ikki o'lchamli massivning barcha hujayralarini aylanib chiqadi va ularga value qiymatini tayinlaydi.








Ikki o'lchamli massiv yaratish.
Butun massivni 8 soni bilan to'ldirish.


5. Bir xil nomli metodlar

Endi esa bir marta metodlar nomlariga qaytamiz.

Java standartlari har bir klassdagi barcha metodlar unikal nomlarga ega bo'lishi kerakligini talab qiladi. Ya'ni, bir klassda bir xil metodlarni e'lon qilish mumkin emas.

Lekin metodlarni bir xil deb hisoblaganda faqat nomlar emas, balki parametrlar tiplari hisobga olinadi! Parametr o'zgaruvchilarining nomlari esa hisobga olinmaydi. Misollar:

Kod Izoh
void fill(int[] data, int value) {
}
void fill(int[][] data, int value) {
}
void fill(int[][][] data, int value)  {
}
Ushbu uchta metod har xil deb hisoblanadi. Ularni bir klassda e'lon qilish mumkin.
void print(String str) {
}
void print(String str, String str2) {
}
void print(int val) {
}
void print(double val) {
}
void print() {
}
Bu besh metodning hammasi har xil deb hisoblanadi. Ularni bir klassda e'lon qilish mumkin.
void sum(int x, int y) {
}
void sum(int data, int value) {
}
Bu ikki metod bir xil deb hisoblanadi (ularni bir klassda e'lon qilish mumkin emas).

Nima uchun ba'zi metodlar bir xil deb hisoblanadi, boshqalari esa har xil? Va nega metodni unikal deb aniqlashda parametr o'zgaruvchilarining nomlari hisobga olinmaydi?

Umuman olganda, metodning unikalligi nima uchun kerak? Gap shundaki, kompilator sizning dasturingizni kompilyatsiya qilayotganda, u aniq bilishi kerak, siz qaysi funksiyani/metodni ma'lum joyda chaqirayotganingizni.

Masalan, siz System.out.println("Salom") deb yozasiz. Kompilator aqlli, va u buni tezda tushunadi, bu yerda println() metodi String parametr bilan chaqirilmoqda.

Agar siz System.out.println(1.0) deb yozsangiz, kompilator bu yerda println() metodi double parametr bilan chaqirilmoqda deb tushunadi.

Kompilator metod chaqirilganda argumentlar va parametrlardagi turlarning mos kelishiga e'tibor beradi, ammo argumentning nomiga hech qanday e'tibor bermaydi. Java-da parametr o'zgaruvchilarning nomlari kompilatorning metodni aniqlashiga yordam bermaydi. Shu sababli, u metodni unikalligi aniqlanayotganda hisobga olinmaydi.

Metod nomi va uning parametrlar turlari metodning imzosi deb ataladi. Misol: sum(int, int)

Har bir klassda metodlarning unikal nomlari emas, balki unikal imzolari bo'lishi kerak.


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION