JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ واپسي جو بيان
Viacheslav
سطح

جاوا ۾ واپسي جو بيان

گروپ ۾ شايع ٿيل

تعارف

جيئن اسان ڄاڻون ٿا، جاوا هڪ اعتراض تي مبني پروگرامنگ ٻولي آهي. اهو آهي، بنيادي تصور، ڇاڪاڻ ته چوڻ جو بنيادي اصول اهو آهي ته هر شيء هڪ اعتراض آهي. شيون ڪلاس استعمال ڪندي بيان ڪيون ويون آهن. جاوا ۾ واپسي جو بيان - 1ڪلاس، موڙ ۾، رياست ۽ رويي آهي. مثال طور، هڪ بينڪ اڪائونٽ ۾ رقم جي رقم جي صورت ۾ هڪ رياست ٿي سگهي ٿي ۽ بيلنس کي وڌائڻ ۽ گهٽائڻ جو رويو هجي. جاوا ۾ رويي کي طريقن سان لاڳو ڪيو ويو آھي. طريقن کي ڪيئن بيان ڪجي توهان جي جاوا سکيا جي سفر جي شروعات ۾ متعارف ڪرايو ويو آهي. مثال طور، 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 جي وچ ۾ ڇا فرق آهي؟ #وياچسلاو
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION