1. Параметрлерді беру
Енді ең қызық жеріне келдік. Сендер, бәлкім, System.out.println()
сияқты әдістерден білетін шығарсыңдар, әдістерге параметрлер беруге болады. Бұл, шынымен де, әдістерді құру және қолданудың пайдасын айтарлықтай арттырады.
Ал енді параметрлі әдісті қалай жариялаймыз? Шын мәнінде, бұл өте оңай:
public static void атау(параметрлер)
{
әдіс коды
}
Мұндағы, атау
— бұл әдістің бірегей атауы, ал әдіс коды
— оның ішіндегі командалары. Ал параметрлер
— бұл әдістің үтір арқылы тізімделген параметрлері. Бұл шаблонды тағы бір аздап талдап көрейік:
public static void атау(тип1 атау1, тип2 атау2, тип3 атау3)
{ әдіс коды
}
Мысалдар:
Код | Түсініктеме |
---|---|
|
Параметрмен print әдісі жарияланғанString str |
|
Екі параметрмен print әдісі жарияланғанString str int count |
|
Екі параметрмен write әдісі жарияланғанint x int y |
Егер әдіс параметрлерін болдырмағымыз келсе, дөңгелек жақшаларды бос қалдырамыз.
Параметрлер — бұл әдістің арнайы айнымалылары. Олар арқылы әдіске шақыру кезінде әртүрлі мәндер беруге болады.
Мысалы, экранға мәтін жолын бірнеше рет шығаратын әдісті жазайық.
Экранға жолды бірнеше рет шығару кодын қалай жазу керегін білесіңдер. Бірақ нақты қандай жолды шығару керек? Қанша рет? Міне, осы үшін бізге параметрлер қажет болады.
Бұл тапсырманың коды осылай көрінеді:
Код | Түсініктеме |
---|---|
|
Параметрлермен printLines әдісі жарияланды:String text , int count Әдіс экранға count рет text жолын шығарадыӘдісті әртүрлі параметрлермен шақырамыз |
Әдіс шақырылған сайын оның параметр-айнымалыларына берілген мәндер беріледі, содан кейін әдістің командалары орындалуды бастайды.
2. Әдістің аргументтері
Тағы да сіздердің назарларыңызды параметрлермен әдіс шақыруға аударғым келеді.
Дәстүр бойынша әдіске шақыру кезінде берілген мәндер әдістің аргументтері деп аталады.
Тағы да мысалды талдап көрейік:
Код | Түсініктеме |
---|---|
|
Параметрлермен 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. Әдіс шақыру кезінде айнымалы аттарының конфликты
Әдістің аргументтері ретінде айнымалыларды қолдануға болады. Бұл жай және анық, бірақ кейбір қиыншылықтарға әкелуі мүмкін. Сол мысалды тағы да қарастырайық, бірақ аргументтерді жеке айнымалыларға шығарайық:
Код | Түсініктеме |
---|---|
|
Параметрлермен printLines әдісі жарияланды:String text , int count Әдіс экранға count рет text жолын шығарадыӘдісті параметрлермен шақырамыз: text = str; count = n; |
Әлі де ешқандай қиындық жоқ: бізде str
айнымалысы бар, оның мәні әдіс шақыру кезінде берілгенде text
айнымалысына беріледі. Бізде n
айнымалысы бар, оның мәні әдіс шақыру кезінде берілгенде count
айнымалысына беріледі. Әзірге бәрі түсінікті.
Ал енді main
әдісінің айнымалыларын өзгертіп көрейік:
Код | Түсініктеме |
---|---|
|
Параметрлермен printLines әдісі жарияланды:String text , int count Әдіс экранға count рет text жолын шығарадыӘдісті параметрлермен шақырамыз: text = text; count = count; |
Екі нәрсеге назар аударыңыз
Біріншіден, бізде әртүрлі әдістерде бірдей атаулары бар айнымалылар бар. Бұл әртүрлі айнымалылар (біз оларды арнайы әртүрлі түстермен белгіледік). Мұның бәрі main
әдісіндегі айнымалыларды str
және n
атаған алдындағы мысалдағыдай жұмыс істейді.
Екіншіден, әдіс шақыру кезінде ешқандай сиқыр болмайды. Параметр-айнымалыларға тек қана аргументтердің мәндері беріледі. Бұл нақты сандар, мәтіндер, айнымалылар немесе өрнектер болсын. Барлығы бірдей болады.
Әдістің аты мен параметр түрлері әдістің қолтаңбасы деп аталады. Мысал: sum(int, int)
Әрбір класс ерекше қолтаңбалары бар әдістерге ие болуы керек.
4. Әдіске сілтемелерді беру
Алдыңғы дәрістен бәрін түсіндіңдер деп үміттенемін, себебі қазір біз әдіске аргументтерді беру тақырыбына тағы да тереңірек тоқталамыз.
Бірақ, кейбір айнымалылар Java-да нақты мәндерді сақтамай, олардың мекенжайын (сілтемесін) сақтайды. Мысалы, бұл айнымалылар-жолдар немесе айнымалылар-массивтер.
Айнымалы-массивке басқа айнымалы-массивті тағайындағанда не болады? Дұрыс. Екі айнымалы жадыдағы бірдей контейнерді көрсететін болады:
Егер осы айнымалылардың біреуі әдістің параметр-айнымалысы болса не болады?
Код | Түсініктеме |
---|---|
|
Метод printArraySum берілген массивтің сандарын қосып, оны экранға шығарады. |
Дәл солай болады: параметр-айнымалы data
айнымалысы months
сияқты контейнерді көрсететін болады. Әдісті шақыру кезінде тек қана data = months
тағайындалады.
Сол бір контейнерді көрсететіндіктен, әдіс printArraySum
тек қана массивтің мәндерін оқып қана қоймай, оларды өзгерте алады!
Мысалы, біз массивті бірдей мәндермен толтыратын өзіміздің әдісімізді жаза аламыз. Ол осылай көрінуі мүмкін:
Код | Түсініктеме |
---|---|
|
Әдіс fill берілген екі өлшемді массивтің барлық ұяшықтарын value мәнімен толтырады.Екі өлшемді массивті құрамыз. Массивтің барлық ұяшықтарын 8 мәнімен толтырамыз. |
5. Бірдей атаулары бар әдістер
Енді қайтадан әдістердің атауларына ораламыз.
Java стандарттары барлық әдістердің ішінде бір класта бірегей атаулары бар болуын талап етеді. Яғни, бір класста екі бірдей әдіс жариялау мүмкін емес.
Бірақ әдістердің бірдейлігі тек атауға ғана емес, параметрлердің типтеріне де байланысты! Параметр-айнымалылардың атаулары ескерілмейді. Мысалдар:
Код | Түсініктеме |
---|---|
|
Бұл үш әдіс әртүрлі болып саналады. Оларды бір класта жариялауға болады. |
|
Бұл бес әдіс әртүрлі болып саналады. Оларды бір класта жариялауға болады. |
|
Бұл екі әдіс бірдей болып саналады (оларды бір класта жариялауға болмайды). |
Неге кейбір әдістер бірдей болып саналады, ал басқалары әртүрлі? Неге параметр-айнымалылардың атаулары әдістің бірегейлігін анықтауда ескерілмейді?
Неліктен бірегейлік қажет? Бұл компилятор сіздің бағдарламаңызды компиляциялаған кезде дәл сіз шақырған функция/әдісті нақты білуі керек.
Мысалы, сіз System.out.println("Сәлем")
жазасыз. Компилятор оны түсінеді және String
параметрі бар println()
әдісін шақырғаныңызды біледі.
Ал егер System.out.println(1.0)
жазсаңыз, компилятор мұнда double
параметрі бар println()
әдісін шақырады деп түсінеді.
Компилятор әдіс шақыру кезінде аргументтердің және параметрлердің типтерінің сәйкес келуін қадағалайды, бірақ аргументтің атауына назар аудармайды. Java-да параметр-айнымалылардың атаулары компиляторға әдісті анықтауға ешқандай көмек бермейді. Сондықтан олар әдістің бірегейлігін анықтауда ескерілмейді.
Әдістің аты мен параметрлерінің типтері әдістің қолтаңбасы деп аталады. Мысалы: sum(int, int)
Әрбір класста ерекше қолтаңбаларға ие әдістер болуы керек.
GO TO FULL VERSION