تعارف
جيئن اسان ڄاڻون ٿا، جاوا هڪ اعتراض تي مبني پروگرامنگ ٻولي آهي. اهو آهي، بنيادي تصور، ڇاڪاڻ ته چوڻ جو بنيادي اصول اهو آهي ته هر شيء هڪ اعتراض آهي. شيون ڪلاس استعمال ڪندي بيان ڪيون ويون آهن.
ڪلاس، موڙ ۾، رياست ۽ رويي آهي. مثال طور، هڪ بينڪ اڪائونٽ ۾ رقم جي رقم جي صورت ۾ هڪ رياست ٿي سگهي ٿي ۽ بيلنس کي وڌائڻ ۽ گهٽائڻ جو رويو هجي. جاوا ۾ رويي کي طريقن سان لاڳو ڪيو ويو آھي. طريقن کي ڪيئن بيان ڪجي توهان جي جاوا سکيا جي سفر جي شروعات ۾ متعارف ڪرايو ويو آهي. مثال طور، Oracle کان سرڪاري ٽيوٽوريل ۾: "
طريقن جي تعريف ". هتي ٻه اهم پهلو آهن:
- هر طريقو هڪ دستخط آهي. دستخط طريقن جو نالو ۽ ان جي ان پٽ پيٽرولن تي مشتمل آهي؛
- طريقن کي واپسي جو قسم بيان ڪرڻ گھرجي؛
- واپسي جو قسم طريقو دستخط جو حصو نه آهي.
ٻيهر، اهو ان حقيقت جو نتيجو آهي ته جاوا هڪ مضبوط ٽائيپ ٿيل ٻولي آهي ۽ مرتب ڪندڙ اڳ ۾ ئي سمجهڻ چاهي ٿو ته ڪهڙي قسم جا استعمال ڪيا ويا آهن جتي ممڪن آهي. ٻيهر، اسان کي غلطين کان بچائڻ لاء. عام طور تي، هر شيء سٺي لاء آهي. خير، اهو هڪ ڀيرو ٻيهر اسان ۾ ڊيٽا کي هٿي ڏيڻ جي ثقافت کي ترتيب ڏئي ٿو، اهو مون کي لڳي ٿو. تنهن ڪري، طريقن لاء قدر جو قسم بيان ڪيو ويو آهي. ۽ طريقن مان اهو ساڳيو قدر واپس ڪرڻ لاء، لفظ استعمال ڪيو ويندو آهي
return
.
جاوا ۾ لفظ واپسي جو بيان
بيان جو لفظ
return
”ڪنٽرول فلو بيانن“ ڏانهن اشارو ڪري ٿو جيئن oracle ٽيوٽوريل ”
ڪنٽرول فلو بيانات “ ۾ بحث ڪيو ويو آهي. توھان پڻ پڙھي سگھوٿا ڪئين قدر واپس ڪرڻ بابت سرڪاري ٽيوٽوريل ۾: "
هڪ طريقي مان ھڪڙي قدر واپس ڪرڻ ". گڏ ڪرڻ وارو احتياط سان مانيٽر ڪري ٿو، پنهنجي قابليت جي بھترين حد تائين، ته ھڪڙي طريقي مان موٽايل قيمت طريقي سان بيان ڪيل واپسي قدر جي قسم سان ملي ٿي. اچو ته مثال طور tutorialspoint مان
آن لائن IDE استعمال ڪريون. اچو ته اصل مثال ڏسو:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello World");
}
}
جيئن اسان ڏسي سگهون ٿا، هڪ طريقو هتي جاري ڪيو ويو آهي
main
، جيڪو پروگرام ۾ داخل ٿيڻ جو نقطو آهي. ڪوڊ جون لائينون مٿي کان ھيٺ تائين جاري آھن. اسان جو
main
طريقو قدر واپس نه ٿو ڪري سگھي، ٻي صورت ۾ اسان کي غلطي ملندي: "
Error: Main method must return a value of type void
". تنهن ڪري، طريقو صرف اسڪرين کي ٻاھر ڪڍيو ويندو. اچو ته ھاڻي اسٽرنگ جي وصولي کي پيغام حاصل ڪرڻ لاءِ الڳ طريقي سان منتقل ڪريون:
public class HelloWorld {
public static void main(String []args) {
System.out.println(getHelloMessage());
}
public static String getHelloMessage() {
return "Hello World";
}
}
جيئن اسان ڏسي سگهون ٿا، لفظ استعمال ڪندي
return
اسان واپسي جي قيمت بيان ڪئي، جنهن کي اسان بعد ۾ استعمال ڪيو طريقو
println
. طريقي جي وضاحت (تعريف) ۾،
getHelloMessage
اسان اشارو ڪيو ته اهو اسان کي واپس ڏيندو
String
. هي ڪمپلر کي اجازت ڏئي ٿو ته چيڪ ڪرڻ لاء ته طريقي جي ڪارناما انهي طريقي سان ٺهڪندڙ آهن انهي طريقي سان اعلان ڪيو ويو آهي. قدرتي طور تي، طريقي جي تعريف ۾ بيان ڪيل واپسي جي قيمت جو قسم ڪوڊ مان موٽايل قدر جي قسم کان وسيع ٿي سگھي ٿو، يعني. بنيادي شيء اها آهي ته قسمون هڪ ٻئي ڏانهن گهٽجي وينديون آهن. ٻي صورت ۾ اسان کي گڏ ڪرڻ جي وقت جي غلطي ملندي: "
error: incompatible types
". رستي ۾، اهو سوال شايد فوري طور تي پيدا ٿيو:
return
اهو پروگرام جي وهڪري ڪنٽرول آپريٽرز تي ڇو لاڳو ٿئي ٿو؟ پر ڇاڪاڻ ته اهو پروگرام جي عام وهڪري کي مٿاهين کان تري تائين روڪي سگهي ٿو. مثال طور:
public class HelloWorld {
public static void main(String []args){
if (args.length == 0) {
return;
}
for (String arg : args) {
System.out.println(arg);
}
}
}
جيئن مثال مان ڏسي سگھجي ٿو، اسان طريقي جي عمل ۾ مداخلت ڪندا آهيون
main
جيڪڏهن اسان جي جاوا پروگرام کي پيٽرولر کان سواء سڏيو ويندو آهي. اهو ياد رکڻ ضروري آهي ته جيڪڏهن توهان
return
وٽ ڪوڊ آهي، اهو ناقابل رسائي ٿي ويندو. ۽ اسان جو سمارٽ ڪمپلر ان کي نوٽيس ڪندو ۽ توهان کي اهڙي پروگرام کي هلائڻ جي اجازت نه ڏيندو. مثال طور، هي ڪوڊ مرتب نه ٿيندو:
public static void main(String []args) {
System.out.println("1");
return;
System.out.println("2");
}
هن جي چوڌاري حاصل ڪرڻ لاء هڪ گندي هيڪ آهي. مثال طور، ڊيبگنگ جي مقصدن لاءِ يا ڪنهن ٻئي سبب لاءِ. مٿي ڏنل ڪوڊ کي بلاڪ
return
۾ لپيٽڻ سان مقرر ڪري سگھجي ٿو :
if
if (2==2) {
return;
}
غلطي سنڀالڻ ۾ بيان واپس ڪريو
اتي ھڪڙو تمام مشڪل صورتحال آھي - اسان ان کي استعمال ڪري سگھون ٿا
return
غلطي سنڀالڻ سان. مان فوري طور تي چوڻ چاهيان ٿو ته ان کي بلاڪ
return
۾ استعمال ڪرڻ تمام، تمام خراب صورت آهي، تنهنڪري توهان کي ان کان پاسو ڪرڻ گهرجي.
catch
پر اسان کي هڪ مثال جي ضرورت آهي، صحيح؟ هتي هو آهي:
public class HelloWorld {
public static void main(String []args) {
System.out.println("Value is: " + getIntValue());
}
public static int getIntValue() {
int value = 1;
try {
System.out.println("Something terrible happens");
throw new Exception();
} catch (Exception e) {
System.out.println("Catched value: " + value);
return value;
} finally {
value++;
System.out.println("New value: " + value);
}
}
}
پهرين نظر ۾، اهو لڳي ٿو ته 2 واپس ٿيڻ گهرجي، ڇاڪاڻ ته
finally
اهو هميشه تي عمل ڪيو ويندو آهي. پر نه، قيمت 1 ٿي ويندي، ۽ متغير ۾ تبديلي کي
finally
نظر انداز ڪيو ويندو. ان کان علاوه، جيڪڏهن اهو
value
هڪ اعتراض تي مشتمل آهي ۽ اسان
finally
چيو آهي
value = null
، ته پوء اهو
catch
اڃا به اعتراض ڏانهن حوالو ڏيندو، نه
null
. پر بلاڪ مان
finally
آپريٽر
return
صحيح ڪم ڪري ها. ساٿي واضح طور تي اهڙي تحفي لاء توهان جي مهرباني نه ڪندا.
void.class
۽ آخر ۾. توهان هڪ عجيب تعمير لکي سگهو ٿا جهڙوڪ
void.class
. اهو لڳي ٿو، ڇو ۽ ڇا نڪتو آهي؟ حقيقت ۾، مختلف فريم ورڪ ۽ مشڪل ڪيسن ۾ جتي
Java Reflection API استعمال ٿئي ٿي ، اهو تمام ضروري ٿي سگهي ٿو. مثال طور، توهان چيڪ ڪري سگهو ٿا ته ڪهڙي قسم جو طريقو واپس اچي ٿو:
import java.lang.reflect.Method;
public class HelloWorld {
public void getVoidValue() {
}
public static void main(String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == void.class);
}
}
}
اهو ڪارائتو ٿي سگهي ٿو ٽيسٽ فريم ورڪ ۾ جتي اهو ضروري آهي ته طريقن جي حقيقي ڪوڊ کي تبديل ڪرڻ لاء. پر هن کي ڪرڻ لاء، توهان کي اهو سمجهڻ جي ضرورت آهي ته هي طريقو ڪيئن ڪم ڪري ٿو (يعني، ڪهڙي قسم جو اهو موٽائي ٿو).
main
مٿي ڏنل ڪوڊ مان طريقو لاڳو ڪرڻ جو ٻيو طريقو آهي :
public static void main (String[] args) {
for (Method method : HelloWorld.class.getDeclaredMethods()) {
System.out.println(method.getReturnType() == Void.TYPE);
}
}
انهن جي وچ ۾ فرق جو هڪ بلڪه دلچسپ بحث stackoverflow تي پڙهي سگهجي ٿو:
java.lang.Void ۽ void جي وچ ۾ ڇا فرق آهي؟ #وياچسلاو
GO TO FULL VERSION