JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ طريقا

جاوا ۾ طريقا

گروپ ۾ شايع ٿيل
اتي ھڪڙو دلچسپ اصول آھي جنھن بابت گھڻن ٻڌو آھي. ان کي سڏيو ويندو آهي "ورهايو ۽ فتح ڪريو." اهو اصول انساني زندگيء جي ڪيترن ئي علائقن ۾ استعمال ڪيو ويندو آهي، مثال طور، سياست ۾. اهو رياست جي مختلف حصن جي وڏي تعداد جي تقسيم کي ظاهر ڪري ٿو، انهن حصن جي وچ ۾ دشمني کي ڀڙڪائڻ ۽ استعمال ڪندي. ٻين لفظن ۾: انهن جي وچ ۾ تڪرار پيدا ڪريو جيڪي ممڪن طور تي طاقت لاء خطرو پيدا ڪن. پر اسان پروگرامر آهيون، تنهنڪري اسان کي صرف هن اصول جي فني تشريح ۾ دلچسپي آهي. ۽ اهو هن طرح وڃي ٿو: ”ورهايو ۽ فتح ڪريو“ جو اصول اهو آهي ته هڪ وڏي مسئلي کي ننڍڙن ۾ ورهايو وڃي جيستائين اهي ابتدائي نه ٿين. پوء توهان کي انهن کي ترتيب سان حل ڪرڻ جي ضرورت آهي ۽ هر شيء کي هڪ سڄي سسٽم ۾ گڏ ڪرڻ جي ضرورت آهي. هن پروگرام کي ڏنل مسئلو حل ڪرڻ گهرجي“ يعني توهان صرف هڪ وڏي مسئلي کي ننڍن ۾ ورهايو، جنهن کي حل ڪرڻ توهان لاءِ ڪو مسئلو ناهي. ۽ پوء توهان حل گڏ ڪيو هڪ وڏي ۾. هن سادي ۽ مفيد اصول جي پيروي ڪرڻ لاء، جاوا پروگرامنگ طريقا استعمال ڪري ٿو. جاوا ۾ طريقا - 1مثال طور، اسان هڪ روبوٽ باڪسر ٺاهي رهيا آهيون. اسان لاءِ ضروري آهي ته هو چڱيءَ طرح هلن، صحيح حملا ڪري ۽ دشمن کي ڪمزور نقطن جي ڳولا ۾ به ڏسن. اهو سڀ ڪجهه هڪ مکيه طريقي سان لکڻ بيڪار ٿيندو ، ائين نه آهي؟ جيڪڏهن اسان هر شي کي هڪ طريقي سان بيان ڪريون ٿا، اهو ڪجهه هن طرح ٿيندو:
метод main() {
// Описание действий шага вперед
подача напряжения в отдельные модули;
поднятие ноги;
перевод в другую точку;
поставить ногу;
перенести вес на другую ногу;
если (противникАтакует()) {
        	// Описание действий уклонения робота.
        	...
} еслиНет {
        	// Описание действий обманного атакующего удара.
        	...
}
// Описание действий шага назад
...
}
ڇا جيڪڏهن اسان کي پروگرام ۾ هڪ قدم اڳتي وڌڻ يا ٻئي هنڌ ڪڪ ڪرڻ جي ضرورت آهي؟ سڀني عملن کي ٻيهر بيان ڪريو؟ مناسب ناهي. اتي تمام گھڻا بار بار لائينون آھن جن ۾ وڃائڻ آسان آھي. اسان کي عمل جي تفصيل جي وضاحت کي الڳ ماڊل ۾ رکڻو پوندو، جيڪو روبوٽ قدم کي انجام ڏيندو. ۽ اسان طريقي کي هڪ قطار ۾ سڏي سگهون ٿا. ڪجهه هن طرح:
метод шагВперед() {
// Описание действий шага вперед
  	подача напряжения в отдельные модули;
  	поднятие ноги;
  	перевод в другую точку;
  	поставить ногу;
  	перенести вес на другую ногу;
}

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

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

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

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

метод main() {
	шагВперед();
	если (противникАтакует()) {
        	уклонение();
	} еслиНет {
  	  обманныйАтакующийУдар();
	}
	шагНазад();
}
هاڻي اسان روبوٽ ڪارڪردگي کي الڳ ڪيو آهي، انهي سان گڏ هڪ جامع ۽ صاف main() طريقو . باقي طريقن کي به ورهائي سگهجي ٿو ڪنهن به ڪارڪردگيءَ ۾، مثال طور، فريب واري حملي واري هڙتال کي طريقن ۾ ورهائي سگهجي ٿو ٺڳيءَ واري حرڪت ، ٽنگ جي حرڪت ، حملو . ۽ اهي، موڙ ۾، آسان ڪمن لاء مقرر ڪيا ويا آهن ته جيئن آخرڪار ابتدائي ماڻهن جو هڪ سيٽ حاصل ڪيو وڃي. ٺيڪ، هاڻي اچو ته اهو سڀ ڪجهه سهڻي نموني سان لکون جنهن کي جاوا قبول ڪندو.
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_метода(принимаемые_параметры) {
   	//Тело метода
}

رسائي تبديل ڪندڙ

رسائي تبديل ڪندڙ ڪيترائي لفظ آھن: عوامي ، نجي ، پيڪيج . اهي لفظ طريقت جي دائري کي ظاهر ڪن ٿا. مان ان کي آسانيءَ سان بيان ڪندس: هن لفظ سان توهان لڳي رهيا آهيو ته توهان ٻين سان هڪ لذيذ علاج شيئر ڪري رهيا آهيو. مزيدار توهان جو طريقو آهي. جيڪڏهن اهو خانگي آهي ، توهان طريقي سان حصيداري نٿا ڪريو ٻين طبقن سان. جيڪڏهن پيڪيج ، توهان صرف پيڪيج اندر ڪلاسن سان حصيداري ڪريو ٿا (ڪلاس مخصوص پيڪيجز ۾ گڏ ڪيا ويندا آهن، توهان اهو بعد ۾ سکندا). خير، عوام ڏيکاري ٿو ته توهان پاڻ مهربان آهيو ۽ هڪ لذيذ علاج (طريقو) سڄي پروگرام سان حصيداري ڪريو. ڪجهه هن طرح. ڪجھه سطحن کان پوء توھان انھن لفظن جي ڪردار کي چڱي طرح سمجھندا.

واپسي جي قيمت

مٿي ڏنل مثال تي ڏسو: سڀ طريقا نشان لڳل آهن void لفظ سان ، سواءِ هڪ جي - isEnemyAttacked ، جيڪو هڪ بوليان قدر موٽائي ٿو . جيڪڏهن هڪ طريقو نشان لڳايو ويو آهي باطل ، اهو شايد ڪجهه به واپس نه ڪري سگهي. اهو طريقو صرف عملن جو هڪ سيٽ انجام ڏئي ٿو ۽ اهو ئي آهي. ھاڻي اصلي طريقو ڏانھن ڌيان ڏيو . اهي طريقا جيڪي باطل کي واپس ڪن ٿا ، صرف ان کي سڏيو ويندو آهي، طريقي جي جسم ۾. پر isEnemyAttacked طريقو سڏيو ويندو آهي خط جي قوس ۾ 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;
 	}
}
گڏ ڪرڻ وارو توهان کي ڊاهيندو ته جڏهن پهرين شرط پوري ٿي ته توهان ڪجهه واپس ڏيو، پر جڏهن ٻيو شرط پورو ٿيو، توهان نه ڪيو.

پاسنگ پيراگراف

توھان پاس ڪري سگھوٿا پيٽرولر کي طريقي سان جيڪي ان جي آپريشن دوران استعمال ڪيا ويا آھن. سڀ کان وڌيڪ ابتدائي مثال ٻن انگن جو مجموعو آهي. پر اسان ابتدائي نه آهيون، صحيح؟ اچو ته هڪ ٻيو مثال وٺون، بلڪل stereotypical. اچو ته چئون ته اسان وٽ هڪ طريقو آهي شيف() - cook. اسان سوپ جي اجزاء کي هن طريقي سان پيٽرولر بلاڪ ۾ منتقل ڪري سگهون ٿا، ۽ نتيجي طور، هي طريقو اسان کي سوپ واپس ڏئي ٿو. هن وانگر:
public static void main(String[] args) {
    	String[] ingredients;
    	// Инициализация массива ингредиентов
    	Soup soup = chef(ingredients);

}

public static Soup chef(String[] ingredients) {
    	Soup soup = new Soup();
    	// Процесс варки супа
    	return soup;
}
(اچو ته چئون ته اسان وٽ اڳ ۾ ٺهيل سوپ ڪلاس آهي) مکيه طريقي ۾، اسان اجزاء جي هڪ صف ٺاهيندا آهيون، ۽ پوءِ ”ان کي شيف کي ڏيو“ (ان کي شيف جي طريقي ڏانهن ڏيو ). ”ڪڪ سوپ ٺاهي ٿو“ ۽ پوءِ ان کي سوپ ڪلاس جي هڪ اعتراض جي طور تي اسان ڏانهن موٽائي ٿو . هر شيء بلڪل سادي آهي. توھان پاس ڪري سگھوٿا ڪي به پيٽرول، پرائمري قسم، شيون، صفون، وغيره.

حوالن ۽ قدر جي لحاظ کان پيٽرول پاس ڪرڻ

جاوا پروگرامنگ ٻولي ۾، ڪنهن به پيٽرولر کي انهن جي قيمت ذريعي هڪ طريقي سان منتقل ڪيو ويو آهي. بهرحال، هي ميکانيزم مختلف آهي ابتدائي قسمن ۽ شين لاء. جيڪڏھن توھان ڪنھن ابتدائي قسم کي ھڪڙي طريقي ۾ منتقل ڪريو ۽ ان کي تبديل ڪريو، اھو اصلي طريقي ۾ تبديل نه ٿيندو. توهان صرف قدر جي هڪ ڪاپي منظور ڪيو، ۽ اصل متغير محفوظ ڪيو ويو. سادو مثال:
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 آھي
اسان وٽ هڪ WiseMan ڪلاس آهي جنهن ۾ iq ملڪيت آهي . ۽ ٻه طريقا جيڪي هن فيلڊ جي قيمت کي ڪنٽرول ڪن ٿا. مکيه طريقي ۾ اسان ٺاهيندا آهيون wiseMan اعتراض ، iq قدر مقرر ڪريو 300 . پوءِ اسان پنهنجي بابا کي iq 300 سان ChangeObject ميٿڊ ۾ پاس ڪريون ٿا، پر ان طريقي ۾ هو بيوقوف ٿي وڃي ٿو. اسان iq جي قيمت 100 تي مقرر ڪريون ٿا. پوء مکيه طريقي سان اسان اعتراض کي پرنٽ ڪندا آهيون. توهان ڏسي سگهو ٿا ته changeObject جي طريقي ۾ اسان متغير m ۾ هڪ ٻيو بابا ٺاهي رهيا آهيون . بهرحال، اسان اسان جي اصل اعتراض کي تبديل ڪري رهيا آهيون. حقيقت اها آهي ته مکيه طريقي ۾ wiseMan اعتراض ۽ changeObject طريقي ۾ m اعتراض ساڳيو عقلمند ماڻهو آهي، ۽ اعتراض جو حوالو هڪ پيراميٽر جي طور تي طريقي سان نقل ڪيو ويو آهي. اهو ذهن ۾ رکو جڏهن توهان هڪ اعتراض کي انفرادي طريقن ۾ تبديل ڪريو.

آخرڪار، جامد تبديل ڪندڙ بابت ڪجھ لفظ

عام طور تي، چند لفظ هتي نه ڪندا، پر مان ڪوشش ڪندس. هن ترميمي سان نشان نه لڳل باقاعده طريقا طبقاتي اعتراض سان تعلق رکن ٿا. ۽ جامد طريقا پاڻ طبقي سان تعلق رکن ٿا. انفرادي شيون تي باقاعده طريقا استعمال ڪري سگھجن ٿيون. مٿي ڏنل مثال مان WiseMan طبقي کي ڏسو . هر بابا جا پنهنجا GetIq ۽ setIq طريقا هوندا، ڇاڪاڻ ته هر ڪنهن جو IQ ليول مختلف هوندو آهي. جيڪڏهن اسان هن طبقي ۾ هڪ جامد طريقو generateAWisePhrase شامل ڪريون ٿا ، ته پوءِ اسان اهڙي طريقي کي بغير ڪنهن اعتراض جي سڏي سگهون ٿا:
WiseMan.generateAWisePhrase();
عام طور تي، اها معلومات هن وقت ڪافي آهي، ڇاڪاڻ ته جامد بابت ڪيترائي ليڪچر لکي سگهجن ٿا . ڪجھ قاعدن تي عمل ڪريو جڏھن توھان جي ڪوڊ ۾ آرڊر برقرار رکڻ لاء ھڪڙو طريقو لکو:
  • پنھنجن طريقن کي معنيٰ وارا نالا ڏيو ته جيئن اھو واضح ٿئي ته اھي ڇا ڪندا آھن.
  • ڪوشش ڪريو تمام ڊگھا طريقا نه لکڻ جي. وڌ ۾ وڌ ڊيگهه 8-15 سٽون آهي.
  • طريقن جي ماپ جو تعداد 4-5 کان وڌيڪ نه هجڻ گهرجي.
  • جيڪڏهن توهان وٽ ساڳيو ڪارڪردگي توهان جي ڪوڊ ۾ ٻه ڀيرا آهي، سوچيو: ٿي سگهي ٿو اهو ان کي عام ڪرڻ ۽ ان کي الڳ طريقي سان رکڻ جي قابل آهي؟
اهي ٽيڪنڪون توهان جي پروگرام جي ڪارڪردگي کي بهتر ڪرڻ ۾ مدد ڪندي ۽، سڀ کان اهم، توهان جي ڪوڊ کي وڌيڪ پڙهڻ جي قابل بڻائي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION