JavaRush /جاوا بلاگ /Random-UR /جاوا میں واپسی کا بیان
Viacheslav
سطح

جاوا میں واپسی کا بیان

گروپ میں شائع ہوا۔

تعارف

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

جاوا میں مطلوبہ الفاظ کی واپسی کا بیان

اسٹیٹمنٹ کلیدی لفظ returnسے مراد "کنٹرول فلو اسٹیٹمنٹس" ہے جیسا کہ اوریکل ٹیوٹوریل " کنٹرول فلو اسٹیٹمنٹس " میں زیر بحث آیا ہے۔ آپ سرکاری ٹیوٹوریل میں اقدار کو واپس کرنے کے طریقہ کے بارے میں بھی پڑھ سکتے ہیں: " طریقہ سے قدر واپس کرنا "۔ مرتب کرنے والا اپنی بہترین صلاحیت کے مطابق احتیاط سے مانیٹر کرتا ہے کہ طریقہ سے واپس آنے والی قدر طریقہ کے ذریعہ بیان کردہ واپسی کی قدر کی قسم سے میل کھاتی ہے۔ آئیے بطور مثال ٹیوٹوریل پوائنٹ سے آن لائن 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);
        }
 }
ان کے درمیان فرق کے بارے میں ایک دلچسپ بحث اسٹیک اوور فلو پر پڑھی جا سکتی ہے: java.lang.Void اور void میں کیا فرق ہے؟ #ویاچسلاو
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION