JavaRush /Курстар /All lectures for KK purposes /Java-дағы функция параметрлері

Java-дағы функция параметрлері

All lectures for KK purposes
Деңгей , Сабақ
Қол жетімді

1. Параметрлерді беру

Енді ең қызық жеріне келдік. Сендер, бәлкім, System.out.println() сияқты әдістерден білетін шығарсыңдар, әдістерге параметрлер беруге болады. Бұл, шынымен де, әдістерді құру және қолданудың пайдасын айтарлықтай арттырады.

Ал енді параметрлі әдісті қалай жариялаймыз? Шын мәнінде, бұл өте оңай:

public static void атау(параметрлер)
{
   әдіс коды
}

Мұндағы, атау — бұл әдістің бірегей атауы, ал әдіс коды — оның ішіндегі командалары. Ал параметрлер — бұл әдістің үтір арқылы тізімделген параметрлері. Бұл шаблонды тағы бір аздап талдап көрейік:

public static void атау(тип1 атау1, тип2 атау2, тип3 атау3)
{    әдіс коды
}

Мысалдар:

Код Түсініктеме
public static void print(String str)
{
}
Параметрмен print әдісі жарияланған
String str
public static void print(String str, int count)
{
}
Екі параметрмен print әдісі жарияланған
String str
int count
public static void write(int x, int y)
{
}
Екі параметрмен write әдісі жарияланған
int x
int y

Егер әдіс параметрлерін болдырмағымыз келсе, дөңгелек жақшаларды бос қалдырамыз.

Параметрлер — бұл әдістің арнайы айнымалылары. Олар арқылы әдіске шақыру кезінде әртүрлі мәндер беруге болады.

Мысалы, экранға мәтін жолын бірнеше рет шығаратын әдісті жазайық.

Экранға жолды бірнеше рет шығару кодын қалай жазу керегін білесіңдер. Бірақ нақты қандай жолды шығару керек? Қанша рет? Міне, осы үшін бізге параметрлер қажет болады.

Бұл тапсырманың коды осылай көрінеді:

Код Түсініктеме
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("Сәлем", 10);
     printLines("Қош", 20);
   }
}


Параметрлермен printLines әдісі жарияланды:
String text, int count
Әдіс экранғаcount рет text жолын шығарады





Әдісті әртүрлі параметрлермен шақырамыз

Әдіс шақырылған сайын оның параметр-айнымалыларына берілген мәндер беріледі, содан кейін әдістің командалары орындалуды бастайды.


2. Әдістің аргументтері

Тағы да сіздердің назарларыңызды параметрлермен әдіс шақыруға аударғым келеді.

Дәстүр бойынша әдіске шақыру кезінде берілген мәндер әдістің аргументтері деп аталады.

Тағы да мысалды талдап көрейік:

Код Түсініктеме
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("Сәлем", 10);
     printLines("Қош", 20);
   }
}


Параметрлермен printLines әдісі жарияланды:
String text, int count
Әдіс экранға count рет text жолын шығарады




Әдісті параметрлермен шақырамыз
text = "Сәлем"; count = 10;
text = "Қош"; count = 20;

Әдіс printLines бірінші рет шақырылған кезде, оның параметр-айнымалыларына мына мәндер берілген:
String text = "Сәлем", int count = 10.

Әдіс printLines екінші рет шақырылған кезде, оның параметр-айнымалыларына басқа мәндер берілген:
String text = "Қош", int count = 20.

Әдістің параметрлері — бұл нақты мәндер әдіс шақырылған кезде берілетін айнымалылар. "Сәлем", "Қош", 10 және 20 аргументтері деп аталады.


3. Әдіс шақыру кезінде айнымалы аттарының конфликты

Әдістің аргументтері ретінде айнымалыларды қолдануға болады. Бұл жай және анық, бірақ кейбір қиыншылықтарға әкелуі мүмкін. Сол мысалды тағы да қарастырайық, бірақ аргументтерді жеке айнымалыларға шығарайық:

Код Түсініктеме
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 = "Сәлем";
     int n = 10;
     printLines(str, n);
   }
}


Параметрлермен printLines әдісі жарияланды:
String text, int count
Әдіс экранға count рет text жолын шығарады







Әдісті параметрлермен шақырамыз:
text = str;
count = n;

Әлі де ешқандай қиындық жоқ: бізде str айнымалысы бар, оның мәні әдіс шақыру кезінде берілгенде text айнымалысына беріледі. Бізде n айнымалысы бар, оның мәні әдіс шақыру кезінде берілгенде count айнымалысына беріледі. Әзірге бәрі түсінікті.

Ал енді main әдісінің айнымалыларын өзгертіп көрейік:

Код Түсініктеме
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 = "Сәлем";
     int count = 10;
     printLines(text, count);
   }
}


Параметрлермен printLines әдісі жарияланды:
String text, int count
Әдіс экранға count рет text жолын шығарады







Әдісті параметрлермен шақырамыз:
text = text;
count = count;

Екі нәрсеге назар аударыңыз

Біріншіден, бізде әртүрлі әдістерде бірдей атаулары бар айнымалылар бар. Бұл әртүрлі айнымалылар (біз оларды арнайы әртүрлі түстермен белгіледік). Мұның бәрі main әдісіндегі айнымалыларды str және n атаған алдындағы мысалдағыдай жұмыс істейді.

Екіншіден, әдіс шақыру кезінде ешқандай сиқыр болмайды. Параметр-айнымалыларға тек қана аргументтердің мәндері беріледі. Бұл нақты сандар, мәтіндер, айнымалылар немесе өрнектер болсын. Барлығы бірдей болады.

Әдістің аты мен параметр түрлері әдістің қолтаңбасы деп аталады. Мысал: sum(int, int)

Әрбір класс ерекше қолтаңбалары бар әдістерге ие болуы керек.



4. Әдіске сілтемелерді беру

Алдыңғы дәрістен бәрін түсіндіңдер деп үміттенемін, себебі қазір біз әдіске аргументтерді беру тақырыбына тағы да тереңірек тоқталамыз.

Бірақ, кейбір айнымалылар Java-да нақты мәндерді сақтамай, олардың мекенжайын (сілтемесін) сақтайды. Мысалы, бұл айнымалылар-жолдар немесе айнымалылар-массивтер.

Айнымалы-массивке басқа айнымалы-массивті тағайындағанда не болады? Дұрыс. Екі айнымалы жадыдағы бірдей контейнерді көрсететін болады:

Әдіске сілтемелерді беру

Егер осы айнымалылардың біреуі әдістің параметр-айнымалысы болса не болады?

Код Түсініктеме
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);
   }
}


Метод printArraySum берілген массивтің сандарын қосып, оны экранға шығарады.

Дәл солай болады: параметр-айнымалы data айнымалысы months сияқты контейнерді көрсететін болады. Әдісті шақыру кезінде тек қана data = months тағайындалады.

Сол бір контейнерді көрсететіндіктен, әдіс printArraySum тек қана массивтің мәндерін оқып қана қоймай, оларды өзгерте алады!

Мысалы, біз массивті бірдей мәндермен толтыратын өзіміздің әдісімізді жаза аламыз. Ол осылай көрінуі мүмкін:

Код Түсініктеме
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);
   }
}


Әдіс fill берілген екі өлшемді массивтің барлық ұяшықтарын value мәнімен толтырады.








Екі өлшемді массивті құрамыз.
Массивтің барлық ұяшықтарын 8 мәнімен толтырамыз.


5. Бірдей атаулары бар әдістер

Енді қайтадан әдістердің атауларына ораламыз.

Java стандарттары барлық әдістердің ішінде бір класта бірегей атаулары бар болуын талап етеді. Яғни, бір класста екі бірдей әдіс жариялау мүмкін емес.

Бірақ әдістердің бірдейлігі тек атауға ғана емес, параметрлердің типтеріне де байланысты! Параметр-айнымалылардың атаулары ескерілмейді. Мысалдар:

Код Түсініктеме
void fill(int[] data, int value) {
}
void fill(int[][] data, int value) {
}
void fill(int[][][] data, int value)  {
}
Бұл үш әдіс әртүрлі болып саналады. Оларды бір класта жариялауға болады.
void print(String str) {
}
void print(String str, String str2) {
}
void print(int val) {
}
void print(double val) {
}
void print() {
}
Бұл бес әдіс әртүрлі болып саналады. Оларды бір класта жариялауға болады.
void sum(int x, int y) {
}
void sum(int data, int value) {
}
Бұл екі әдіс бірдей болып саналады (оларды бір класта жариялауға болмайды).

Неге кейбір әдістер бірдей болып саналады, ал басқалары әртүрлі? Неге параметр-айнымалылардың атаулары әдістің бірегейлігін анықтауда ескерілмейді?

Неліктен бірегейлік қажет? Бұл компилятор сіздің бағдарламаңызды компиляциялаған кезде дәл сіз шақырған функция/әдісті нақты білуі керек.

Мысалы, сіз System.out.println("Сәлем") жазасыз. Компилятор оны түсінеді және String параметрі бар println() әдісін шақырғаныңызды біледі.

Ал егер System.out.println(1.0) жазсаңыз, компилятор мұнда double параметрі бар println() әдісін шақырады деп түсінеді.

Компилятор әдіс шақыру кезінде аргументтердің және параметрлердің типтерінің сәйкес келуін қадағалайды, бірақ аргументтің атауына назар аудармайды. Java-да параметр-айнымалылардың атаулары компиляторға әдісті анықтауға ешқандай көмек бермейді. Сондықтан олар әдістің бірегейлігін анықтауда ескерілмейді.

Әдістің аты мен параметрлерінің типтері әдістің қолтаңбасы деп аталады. Мысалы: sum(int, int)

Әрбір класста ерекше қолтаңбаларға ие әдістер болуы керек.


Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION