JavaRush /Java блогы /Random-KK /Java тіліндегі әдістер

Java тіліндегі әдістер

Топта жарияланған
Көпшілік естіген бір қызық қағида бар. Ол «Бөліп ал және жең» деп аталады. Бұл принцип адам өмірінің көптеген салаларында, мысалы, саясатта қолданылады. Ол мемлекеттегі біртекті емес бөліктердің көптеп бөлінуін білдіреді, осы бөліктер арасында дұшпандық туғызады және пайдаланады. Басқаша айтқанда: билікке қауіп төндіретін адамдар арасында қақтығыс туғызу. Бірақ біз бағдарламашылармыз, сондықтан бізді тек осы принципті техникалық түсіндіру ғана қызықтырады. Және ол былай болады: ««Бөл және жең» принципі - үлкен мәселені қарапайым болғанша кішігіріміне бөлу. Содан кейін оларды дәйекті түрде шешіп, бәрін бір тұтас жүйеге біріктіру керек. Бұл бағдарлама берілген мәселені шешуі керек» Яғни, сіз жай ғана үлкен мәселені кішігірімге бөлесіз, бұл сізге шешуге міндет емес. Содан кейін сіз шешімді бір үлкенге жинайсыз. Осы қарапайым және пайдалы принципті ұстану үшін Java бағдарламалау әдістерін пайдаланады. Java тіліндегі әдістер – 1Мысалы, робот боксшы жасап жатырмыз. Біз үшін оның жақсы қозғалуы, дәл соққылар жасауы, сондай-ақ әлсіз жерлерді іздеуде жауды бақылап отыруы маңызды. Мұның бәрін бір негізгі әдіспен жазу ыңғайсыз болар еді , солай емес пе? Егер біз бәрін бір әдіспен сипаттайтын болсақ, ол келесідей болады:
метод main() {
// Описание действий шага вперед
подача напряжения в отдельные модули;
поднятие ноги;
перевод в другую точку;
поставить ногу;
перенести вес на другую ногу;
если (противникАтакует()) {
        	// Описание действий уклонения робота.
        	...
} еслиНет {
        	// Описание действий обманного атакующего удара.
        	...
}
// Описание действий шага назад
...
}
Алға қадам жасау немесе бағдарламаның басқа жерін тебу қажет болса ше? Барлық әрекеттерді қайта сипаттаңыз ба? Келмейді. Оңай адасып кететін қайталанатын жолдар тым көп. Әрекеттің егжей-тегжейлерінің сипаттамасын робот қадамын орындайтын бөлек модульге орналастыруымыз керек. Және әдісті бір жолда шақыра аламыз. Солай:
метод шагВперед() {
// Описание действий шага вперед
  	подача напряжения в отдельные модули;
  	поднятие ноги;
  	перевод в другую точку;
  	поставить ногу;
  	перенести вес на другую ногу;
}

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

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

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

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

метод main() {
	шагВперед();
	если (противникАтакует()) {
        	уклонение();
	} еслиНет {
  	  обманныйАтакующийУдар();
	}
	шагНазад();
}
Енді біз роботтың функционалдығын, сондай-ақ ықшам және түсінікті main() әдісін бөлдік . Қалған әдістерді де кез келген функционалдылыққа бөлуге болады, мысалы, алдамшы Шабуыл соққысын алдау әдістеріне бөлуге болады Қозғалыс , Аяқ қозғалысы , шабуыл . Және олар, өз кезегінде, қарапайым тапсырмалар жиынтығын алу үшін қарапайым тапсырмаларға тағайындалады. Жарайды, енді барлығын 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;
}
Бұл code қазір сізге түсініксіз болуы мүмкін екенін түсінемін, әсіресе void , return және т.б. сияқты кейбір сөздер. Қызанақ тастауға асықпаңыз, мен қазір бәрін түсіндіремін. «Бөліп ал және билей бер» парадигмасының жалпы идеясы сізге түсінікті болуы керек. Бұл бізге әдістер көмектеседі. Әдіс мәлімдемелерінің жалпы құрылымы келесідей:
модификатор_доступа возвращаемое_meaning Name_метода(принимаемые_параметры) {
   	//Тело метода
}

Қол жеткізу модификаторы

Қол жеткізу модификаторы бірнеше түйінді сөздер: public , private , package . Бұл сөздер әдістің ауқымын көрсетеді. Мен мұны қарапайым түсіндіремін: бұл сөзбен сіз басқалармен дәмді тағамды бөлісетін сияқтысыз. Дәмді - сіздің әдісіңіз. Егер ол private болса , әдісті басқа сыныптармен бөліспейсіз. Егер package болса , сіз тек бума ішіндегі сыныптармен бөлісесіз (сыныптар арнайы пакеттерге жиналады, мұны кейінірек білесіз). Жұртшылық сіздің мейірімді екеніңізді және бүкіл бағдарламамен дәмді рахат (әдіс) бөлісетініңізді көрсетеді . Солай. Бірнеше деңгейден кейін сіз бұл сөздердің рөлін әлдеқайда жақсы түсінесіз.

Қайтарылатын мән

Жоғарыдағы мысалды қараңыз: логикалық мәнді қайтаратын isEnemyAttacked бірінен басқа барлық әдістер void кілт сөзімен белгіленеді . Егер әдіс void деп белгіленсе , ол ештеңені қайтармауы мүмкін. Бұл әдіс жай ғана әрекеттер жиынтығын орындайды және бәрі де. Енді негізгі әдіске назар аударыңыз . Void мәнін қайтаратын әдістер әдіс денесінде дәл осылай аталады. Бірақ isEnemyAttacked әдісі if операторының жақшаларында шақырылады . Логикалық мәнді қайтаратындықтан, аралық айнымалыны қолданбай, оны тікелей кірістіру мүмкіндігін аламыз. Мәнді қайтару return кілт сөзі арқылы жүзеге асады . Егер әдіс int түрін қайтарса , әдісті кез келген өрнектен шақыра аламыз:
public static int getNumber() {
 	    return 5;
}

public static void main(String[] args) {
    	int result = 5 + 6 + getNumber();
    	System.out.println(result);
}
Қорытынды:
16
getNumber әдісі int мәнін қайтарады , сондықтан біз оны өрнектен шақыра аламыз. Сондай-ақ, әдіс кез келген түрді, соның ішінде өзіңіз жасағандарды қайтара алады. Әдіс үшін қайтару түрін көрсетсеңіз, бірдеңені қайтару керек. Сіз оны былай жаза алмайсыз:
public static int findMaxNumber(int a, int b) {
 	if(a>b) {
 	    return a;
 	}
}
Компилятор сізге бірінші шарт орындалғанда, сіз бірдеңені қайтарасыз, ал екінші шарт орындалса, сіз қайтармайсыз деп ұрсады.

Өткізу параметрлері

Оның жұмысы кезінде қолданылатын әдіске параметрлерді беруге болады. Ең қарапайым мысал - екі санның қосындысы. Бірақ біз қарабайыр емеспіз, солай ма? Басқа мысалды алайық, өте стереотиптік. Бізде chef() әдісі бар делік - аспаз. Біз сорпа ингредиенттерін параметр блогында осы әдіске бере аламыз, нәтижесінде бұл әдіс сорпаны бізге қайтарады. Бұл сияқты:
public static void main(String[] args) {
    	String[] ingredients;
    	// Инициализация массива ингредиентов
    	Soup soup = chef(ingredients);

}

public static Soup chef(String[] ingredients) {
    	Soup soup = new Soup();
    	// Процесс варки супа
    	return soup;
}
(Алдын ала дайындалған Сорпа сыныбы бар делік ) Негізгі әдісте біз ингредиенттер массивін жасаймыз, содан кейін оны «аспазға береміз» (аспаз әдісіне өткіземіз ) . «Аспаз сорпа жасайды», содан кейін оны Сопа сыныбының нысаны ретінде бізге қайтарады . Барлығы өте қарапайым. Әдіске кез келген параметрлерді, қарабайыр типтерді, an objectілерді, массивтерді және т.б. беруге болады.

Параметрлерді сілтеме бойынша және мән бойынша беру

Java бағдарламалау тілінде кез келген параметрлер мәндері бойынша әдіске беріледі. Дегенмен, бұл механизм қарабайыр түрлер үшін және an objectілер үшін әртүрлі. Кез келген қарабайыр типті әдіске өткізіп, оны өзгертсеңіз, ол негізгі әдісте өзгермейді. Сіз жай ғана мәннің көшірмесін бердіңіз және бастапқы айнымалы мән сақталды. Ең қарапайым мысал:
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;
	}
Қорытынды:
он бір
Дегенмен, нысандар жағдайында өзгерістер бастапқы нысанға әсер етеді:
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;
	}
}
Қорытынды:
Біздің дана адамда IR 300 бар Біздің дана адамда IR 100 бар
Бізде iq қасиеті бар WiseMan сыныбы бар . Және осы өрістің мәнін басқаратын екі әдіс. Негізгі әдісте wiseMan нысанын жасаймыз , iq мәнін 300-ге орнатамыз . Содан кейін iq 300-мен данышпанымызды changeObject әдісіне береміз.Бірақ бұл әдісте ол ақымақ болып қалады. Біз iq мәнін 100-ге қоямыз. Содан кейін негізгі әдісте an objectіні басып шығарамыз. changeObject әдісінде біз m айнымалысында басқа данагөйді басқарып жатқанымызды көре аласыз . Дегенмен, біз бастапқы нысанды өзгертеміз. Мәселе мынада, негізгі әдістегі wiseMan нысаны мен changeObject әдісіндегі m нысаны бірдей дана адам және нысанға сілтеме параметр ретінде әдіске көшіріледі. Нысанды жеке әдістерде өңдегенде осыны есте сақтаңыз.

Соңында, статикалық модификатор туралы бірнеше сөз

Жалпы, бұл жерде бірнеше сөз болмайды, бірақ мен тырысамын. Осы модификатормен белгіленбеген қалыпты әдістер сынып нысанына жатады. Ал статикалық әдістер класстың өзіне жатады. Жеке an objectілерде тұрақты әдістерді қолдануға болады. Жоғарыдағы мысалдан WiseMan класын қараңыз . Әрбір данышпанның өзіндік getIq және setIq әдістері болады , өйткені әркімнің IQ деңгейі әртүрлі. Егер біз бұл классқа generatorAWisePhrase статикалық әдісін қоссақ , онда мұндай әдісті нысансыз шақыра аламыз:
WiseMan.generateAWisePhrase();
Жалпы алғанда, бұл ақпарат әзірге жеткілікті, өйткені статикалық туралы бірнеше дәрістер жазуға болады . Кодыңыздағы тәртіпті сақтау әдісін жазу кезінде бірнеше ережелерді орындаңыз:
  • Әдістеріңізге мағыналы атаулар беріңіз, сонда олардың не істейтіні түсінікті болады.
  • Өте ұзақ әдістерді жазбауға тырысыңыз. Оңтайлы ұзындық - 8-15 жол.
  • Әдіс параметрлерінің саны 4-5-тен аспауы керек.
  • Егер сіздің codeыңызда екі рет ұқсас функционалдылық болса, ойланыңыз: мүмкін оны жалпылап, бөлек әдіске қою керек пе?
Бұл әдістер сіздің бағдарламаңыздың жұмысын жақсартуға көмектеседі және ең бастысы, codeты оқуға ыңғайлы етеді.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION