CodeGym /جاوا بلاگ /Random-UR /جاوا واپسی کی ورڈ
John Squirrels
سطح
San Francisco

جاوا واپسی کی ورڈ

گروپ میں شائع ہوا۔
جیسا کہ ہم جانتے ہیں، جاوا زبان ایک آبجیکٹ پر مبنی پروگرامنگ زبان ہے۔ دوسرے لفظوں میں بنیادی تصور یعنی بنیاد کی بنیاد یہ ہے کہ ہر چیز ایک شے ہے۔ اشیاء کو کلاسز کا استعمال کرتے ہوئے بیان کیا جاتا ہے۔ طبقات، بدلے میں، ریاست اور رویے کی وضاحت کرتے ہیں۔ مثال کے طور پر، ایک بینک اکاؤنٹ میں اکاؤنٹ میں رقم کی شکل میں بیان ہوسکتا ہے اور اس میں ایسے رویے ہوسکتے ہیں جو اکاؤنٹ بیلنس کو بڑھاتے اور گھٹاتے ہیں۔ جاوا میں، طرز عمل کو طریقوں سے لاگو کیا جاتا ہے۔ طریقوں کی وضاحت کرنے کا طریقہ سیکھنا آپ کے جاوا اسٹڈیز کے بالکل شروع میں آتا ہے۔ مثال کے طور پر، اوریکل کے آفیشل ٹیوٹوریل میں، عنوان کے تحت " طریقوں کی تعریف "۔ یہاں دو اہم باتوں کا خیال رکھنا ضروری ہے:
  • ہر طریقہ کا ایک دستخط ہوتا ہے۔ دستخط طریقہ کے نام اور اس کے ان پٹ پیرامیٹرز پر مشتمل ہوتا ہے۔
  • طریقوں کے لیے واپسی کی قسم کا تعین کیا جانا چاہیے۔ آپ کسی طریقہ کی واپسی کی قسم کا اعلان اس کے طریقہ کار کے اعلان میں کرتے ہیں۔
واپسی کی قسم طریقہ دستخط کا حصہ نہیں ہے۔ ایک بار پھر، یہ اس حقیقت کا نتیجہ ہے کہ جاوا ایک مضبوط ٹائپ کی جانے والی زبان ہے اور مرتب کرنے والا یہ جاننا چاہتا ہے کہ کون سی قسمیں استعمال ہوتی ہیں اور کہاں، پہلے سے اور زیادہ سے زیادہ۔ ایک بار پھر، یہ ہمیں غلطیوں سے بچانے کے لیے ہے۔ بنیادی طور پر، یہ سب ایک اچھے مقصد کے لیے ہے۔ اور مجھے ایسا لگتا ہے کہ یہ ایک بار پھر ہمارے اندر ڈیٹا کو سنبھالنے کا کلچر پیدا کرتا ہے۔ لہذا، واپسی کی قیمت کی قسم طریقوں کے لیے بیان کی گئی ہے۔ اور جاوا میں واپسی کا مطلوبہ لفظ اصل میں واپسی کرنے کے لیے استعمال ہوتا ہے۔ جاوا ریٹرن کلیدی لفظ - 1

جاوا میں واپسی کیا کرتی ہے۔

واپسی کا مطلوبہ لفظ ایک کنٹرول فلو اسٹیٹمنٹ ہے، جیسا کہ یہاں اوریکل ٹیوٹوریل میں بیان کیا گیا ہے ۔ آپ آفیشل ٹیوٹوریل کے " طریقہ سے قدر واپس کرنا " سیکشن میں اقدار کو واپس کرنے کے طریقہ کے بارے میں بھی پڑھ سکتے ہیں ۔ مرتب کرنے والا احتیاط سے اس بات پر نظر رکھتا ہے کہ آیا وہ اس بات کو یقینی بنا سکتا ہے کہ طریقہ کی واپسی کی قیمت طریقہ کی مخصوص واپسی کی قسم سے ملتی ہے۔ آئیے ایک مثال پر غور کرنے کے لیے Tutorialspoint کا آن لائن IDE استعمال کریں۔ آئیے ابتدائی مثال کو دیکھیں:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
جیسا کہ ہم دیکھ سکتے ہیں، بنیادی طریقہ یہاں پر عمل میں لایا جاتا ہے، جو کہ پروگرام کا انٹری پوائنٹ ہے۔ کوڈ کی لائنیں اوپر سے نیچے تک عمل میں لائی جاتی ہیں۔ ہمارا بنیادی طریقہ کوئی قدر واپس نہیں کر سکتا۔ اگر ہم وہاں کوئی قدر واپس کرنے کی کوشش کرتے ہیں تو ہمیں ایک خامی ملے گی: "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";
    }

}
جیسا کہ ہم دیکھ سکتے ہیں، ہم نے واپسی کی قیمت کو ظاہر کرنے کے لیے واپسی کا مطلوبہ لفظ استعمال کیا، جسے ہم نے پھر پرنٹ ایل این کے طریقہ کار میں منتقل کیا۔ getHelloMessage طریقہ کا اعلان اس بات کی نشاندہی کرتا ہے کہ یہ طریقہ ایک String واپس کرے گا ۔ یہ مرتب کرنے والے کو یہ جانچنے کی اجازت دیتا ہے کہ طریقہ کار کے اعمال اس کے اعلان کے مطابق ہیں۔ قدرتی طور پر، طریقہ کے اعلان میں بیان کردہ واپسی کی قسم اصل میں کوڈ میں واپس کی گئی قدر کی قسم سے زیادہ وسیع ہو سکتی ہے، یعنی اہم بات یہ ہے کہ قسم کی تبدیلی ممکن ہے۔ بصورت دیگر، ہمیں کمپائل کے وقت ایک ایرر ملے گا: "Error: incompatible type" ۔ ویسے، آپ کے پاس شاید ایک سوال ہے: واپسی کو کنٹرول فلو اسٹیٹمنٹ کیوں سمجھا جاتا ہے؟ کیونکہ یہ کسی پروگرام کے عام اوپر نیچے بہاؤ میں خلل ڈال سکتا ہے۔ مثال:
public class HelloWorld {

    public static void main(String[] args) {
        if (args.length == 0) {
            return;
        }
        for (String arg : args) {
            System.out.println(arg);
        }
    }

}
جیسا کہ آپ مثال سے دیکھ سکتے ہیں، ہم جاوا پروگرام میں مرکزی طریقہ میں خلل ڈالتے ہیں اگر اسے بغیر دلائل کے کہا جاتا ہے۔ یہ یاد رکھنا ضروری ہے کہ اگر آپ کے پاس واپسی کے بیان کے بعد کوڈ ہے، تو یہ قابل رسائی نہیں ہوگا۔ ہمارا سمارٹ کمپائلر اسے محسوس کرے گا اور آپ کو ایسا پروگرام چلانے سے روکے گا۔ مثال کے طور پر، یہ کوڈ مرتب نہیں ہوتا ہے:
public static void main(String[] args) {
        System.out.println("1");
        return;
// we use output method after return statement, which is incorrect
        System.out.println("2");
 }
اس کے ارد گرد حاصل کرنے کے لئے ایک گندی ہیک ہے. مثال کے طور پر، ڈیبگنگ کے مقاصد کے لیے، یا کسی اور وجہ سے۔ مذکورہ کوڈ کو اگر بلاک میں واپسی کے بیان کو لپیٹ کر طے کیا جا سکتا ہے :
if (2==2) {
    return;
}

غلطی سے نمٹنے کے دوران بیان واپس کریں۔

کچھ اور بھی بہت مشکل ہے - ہم غلطی سے نمٹنے کے ساتھ مل کر واپسی کا استعمال کر سکتے ہیں۔ میں ابھی یہ کہنا چاہتا ہوں کہ کیچ بلاک میں واپسی کا بیان استعمال کرنا بہت، بہت بری شکل ہے، لہذا آپ کو اس سے بچنا چاہیے۔ لیکن ہمیں ایک مثال کی ضرورت ہے، ٹھیک ہے؟ یہ رہا:
public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Value: " + getIntValue());
    }

    public static int getIntValue() {
        int value = 1;
        try {
            System.out.println("Something terrible happens");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("Cached value: " + value);
            return value;
        } finally {
            value++;
            System.out.println("New value: " + value);
        }
    }

}
پہلی نظر میں، ایسا لگتا ہے کہ 2 کو واپس کیا جانا چاہئے، کیونکہ آخر میں ہمیشہ پھانسی دی جاتی ہے. لیکن نہیں، واپسی کی قیمت 1 ہوگی، اور آخر میں بلاک میں متغیر میں تبدیلی کو نظر انداز کر دیا جائے گا۔ مزید برآں، فرض کریں کہ اس ویلیو میں ایک آبجیکٹ ہے اور ہم کہتے ہیں value = null آخر میں بلاک۔ پھر وہ اعتراض، کالعدم نہیں، کیچ بلاک میں واپس آ جائے گا۔ لیکن واپسی کا بیان آخر میں بلاک میں صحیح طریقے سے کام کرے گا ۔ ظاہر ہے، آپ کے ساتھی کارکن واپسی کے بیانات پر مشتمل چھوٹی حیرت کے لیے آپ کا شکریہ ادا نہیں کریں گے۔

void.class

اور آخر میں. یہ عجیب ساخت ہے جسے آپ لکھ سکتے ہیں: void.class ۔ ہمم کیوں اور اس کا کیا مطلب ہے؟ واقعی میں جاوا ریفلیکشن 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);
        }
    }
}
یہ ٹیسٹ فریم ورک میں کارآمد ثابت ہوسکتا ہے جہاں آپ کو طریقوں میں اصل کوڈ کو تبدیل کرنے کی ضرورت ہے۔ لیکن ایسا کرنے کے لیے، آپ کو یہ سمجھنے کی ضرورت ہے کہ کوئی طریقہ کس طرح برتاؤ کرتا ہے (یعنی یہ کس قسم کی واپسی کرتا ہے)۔ مندرجہ بالا کوڈ میں مرکزی طریقہ کو نافذ کرنے کا دوسرا طریقہ بھی ہے :
public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == Void.TYPE);
        }
 }
آپ اسٹیک اوور فلو پر دونوں کے درمیان فرق کی ایک بہت ہی دلچسپ بحث پڑھ سکتے ہیں: java.lang.Void اور void میں کیا فرق ہے؟
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION