JavaRush /Блоги Java /Random-TG /Усулҳо дар Java

Усулҳо дар Java

Дар гурӯҳ нашр шудааст
Як принсипи ҷолибе вуҷуд дорад, ки бисёриҳо дар бораи он шунидаанд. Он «Таксим кун ва забт кун» ном дорад. Ин принцип дар бисьёр сохахои хаёти инсон, масалан, дар сиёсат истифода мешавад. Он таќсимоти шумораи зиёди ќисмњои гуногунро дар давлат ифода мекунад, ки дар байни ин ќисмњо хусуматро барангехта ва истифода мебарад. Ба ибораи дигар: эҷод кардани низоъ байни онҳое, ки эҳтимолан ба қудрат таҳдид мекунанд. Аммо мо барномасоз ҳастем, бинобар ин мо танҳо ба тафсири техникии ин принсип манфиатдорем. Ва ин чунин аст: «Принсипи «Таксим кун ва ғалаба кун» ин аст, ки мушкилоти калонро ба мушкилоти хурдтар тақсим кардан то он даме, ки онҳо ибтидоӣ шаванд. Пас шумо бояд онҳоро пайдарпай ҳал кунед ва ҳама чизро дар як система муттаҳид кунед. Ин барнома бояд масъалаи додашударо ҳал кунад” Яъне, шумо танҳо як масъалаи калонро ба масъалаҳои хурдтар ҷудо мекунед, ки барои ҳалли онҳо мушкorе нест. Ва он гоҳ шумо ҳалли худро ба як калон ҷамъ мекунед. Барои риояи ин принсипи оддӣ ва муфид, барномасозии 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;
}
Ман мефаҳмам, ки ин рамз метавонад ҳоло барои шумо каме норавшан бошад, махсусан баъзе калимаҳо ба монанди void , return ва ғайра. Барои партофтани помидор шитоб накунед, ман ҳоло ҳама чизро шарҳ медиҳам. Идеяи умумии парадигмаи "Ҷудо кун ва ғалаба кун" бояд барои шумо равшан бошад. Усулҳо дар ин бобат ба мо кӯмак мекунанд. Сохтори умумии эъломияҳои методӣ чунин аст:
модификатор_доступа возвращаемое_meaning Name_метода(принимаемые_параметры) {
   	//Тело метода
}

Тағирдиҳандаи дастрасӣ

Тағирдиҳандаи дастрасӣ якчанд калимаҳои калидӣ мебошад: public , private , package . Ин калимахо доираи методро нишон медиханд. Ман инро содда мефаҳмонам: бо ин калима шумо гӯё як тӯҳфаи болаззатро бо дигарон мубодила мекунед. Усули шумо болаззат аст. Агар он хусусӣ бошад , шумо усулро бо синфҳои дигар мубодила намекунед. Агар пакет бошад , шумо танҳо бо синфҳо дар дохor баста мубодила мекунед (синфҳо дар бастаҳои мушаххас ҷамъ карда мешаванд, шумо инро баъдтар меомӯзед). Хуб, омма нишон медиҳад, ки шумо худи меҳрубон ҳастед ва бо тамоми барнома як тӯҳфаи болаззатро (усул) мубодила мекунед. Чизе монанди ин. Пас аз чанд сатҳ шумо нақши ин калимаҳоро беҳтар мефаҳмед.

Баргардонидани арзиши

Ба мисоли боло нигаред: ҳама усулҳо бо калимаи калидии void қайд карда шудаанд , ба истиснои як - isEnemyAttacked , ки арзиши мантиқиро бармегардонад . Агар усул void қайд карда шуда бошад , он метавонад чизе барнагардонад. Ин усул танҳо як маҷмӯи амалҳоро иҷро мекунад ва ҳамин аст. Акнун ба усули асосӣ диққат диҳед . Он усулҳое, ки ботилро бармегардонанд , дар бадани метод ҳамин тавр номида мешаванд. Аммо усули isEnemyAttacked дар дохor қавсҳои изҳороти if даъват карда мешавад . Аз сабаби он, ки он арзиши логикиро бармегардонад, мо имконият дорем, ки тағирёбандаи мобайниро истифода набарем, балки онро мустақиман ворид кунем. Баргардонидани арзиш бо истифода аз калимаи бозгашт ба амал меояд . Агар усул навъи 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и синфи шӯрбо ба мо бармегардонад . Ҳама чиз хеле оддӣ аст. Шумо метавонед ҳама гуна параметрҳо, намудҳои ибтидоӣ, 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;
	}
Хулоса:
ёздаҳ
Аммо, дар мавриди an objectҳо, тағирот ба an objectи аслӣ таъсир мерасонад:
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 дорад
Мо синфи WiseMan дорем, ки моликияти iq дорад . Ва ду усуле, ки арзиши ин майдонро назорат мекунанд. Дар усули асосӣ мо an objectи wiseMan эҷод мекунем , арзиши iq -ро ба 300 муқаррар мекунем . Пас аз он мо бо iq 300 хирадманди худро ба усули changeObject мегузарем Аммо дар ин усул ӯ беақл мешавад. Мо арзиши iq- ро ба 100 муқаррар мекунем. Сипас дар усули асосӣ an objectро чоп мекунем. Шумо мебинед, ки дар усули changeObject мо як ҳакими дигарро дар тағирёбандаи m идора карда истодаем . Бо вуҷуди ин, мо an objectи аслии худро тағир медиҳем. Гап дар он аст, ки an objectи wiseMan дар усули асосӣ ва an objectи m дар усули changeObject ҳамон одами доно мебошанд ва истинод ба an object ба усул ҳамчун параметр нусхабардорӣ карда мешавад. Ҳангоми таҳрир кардани an object бо усулҳои инфиродӣ инро дар хотир нигоҳ доред.

Дар охир, чанд сухан дар бораи тағирдиҳандаи статикӣ

Умуман, чанд сухан дар ин ҷо кор нахоҳад кард, аммо ман кӯшиш мекунам. Усулҳои муқаррарие, ки бо ин тағирдиҳанда қайд нашудаанд, ба an objectи синф тааллуқ доранд. Ва усулҳои статикӣ ба худи синф тааллуқ доранд. Усулҳои муқаррариро дар an objectҳои алоҳида истифода бурдан мумкин аст. Ба синфи WiseMan аз мисоли боло нигаред. Ҳар як ҳаким усулҳои getIq ва setIq-и худро дорад , зеро сатҳи IQ ҳама гуногун аст. Агар мо ба ин синф усули статикии generatorAWisePhrase илова кунем , он гоҳ мо метавонем чунин усулро бе an object даъват кунем:
WiseMan.generateAWisePhrase();
Умуман, ин маълумот ҳоло кофӣ аст, зеро дар бораи статикӣ якчанд лексияҳо навиштан мумкин аст . Ҳангоми навиштани усул барои нигоҳ доштани тартибот дар codeи худ чанд қоидаҳоро риоя кунед:
  • Усулҳои худро номҳои пурмаъно диҳед, то фаҳманд, ки онҳо чӣ кор мекунанд.
  • Кӯшиш кунед, ки усулҳои хеле дароз нанависед. Дарозии оптималии 8-15 сатр аст.
  • Шумораи параметрҳои усул набояд аз 4-5 зиёд бошад.
  • Агар шумо дар codeи худ ду маротиба функсияи шабеҳ дошта бошед, фикр кунед: шояд онро умумӣ кардан ва ба усули алоҳида гузоштан меарзад?
Ин усулҳо ба шумо кӯмак мекунанд, ки иҷрои барномаатонро беҳтар созед ва муҳимтар аз ҳама, codeи шуморо хондантар гардонед.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION