کال بائی ویلیو اور کال بائی ریفرنس کے درمیان فرق۔

پروگرامنگ زبانوں میں ، افعال کو دو طریقوں سے طلب کیا جا سکتا ہے: جسے کال بہ ویلیو اور کال بہ حوالہ کہا جاتا ہے۔

اس سبق میں ، آپ سیکھیں گے ،

کال بائی ویلیو طریقہ کیا ہے؟

قیمت کے لحاظ سے کال ایک دلیل کی قیمت کو اس فنکشن کے رسمی پیرامیٹر میں کاپی کرتی ہے۔ لہذا ، مرکزی تقریب کے پیرامیٹر میں کی جانے والی تبدیلیاں دلیل کو متاثر نہیں کرتی ہیں۔

اس پیرامیٹر گزرنے کے طریقہ کار میں ، اصل پیرامیٹرز کی اقدار کو فنکشن کے رسمی پیرامیٹرز میں کاپی کیا جاتا ہے ، اور پیرامیٹرز کو مختلف میموری مقامات میں محفوظ کیا جاتا ہے۔ لہذا افعال کے اندر کی گئی کوئی بھی تبدیلی کال کرنے والے کے اصل پیرامیٹرز میں ظاہر نہیں ہوتی۔

کلیدی فرق

  • کال بائی ویلیو کے طریقہ کار میں اصل قیمت میں ترمیم نہیں کی جاتی جبکہ کال کے ذریعے حوالہ کے طریقہ کار میں اصل قدر میں ترمیم کی جاتی ہے۔
  • کال بائی ویلیو میں ، متغیر کی ایک کاپی پاس کی جاتی ہے جبکہ کال بذریعہ حوالہ ، ایک متغیر خود گزر جاتا ہے۔
  • کال بائی ویلیو میں ، اصل اور رسمی دلائل مختلف میموری مقامات پر بنائے جائیں گے جبکہ کال بذریعہ حوالہ ، اصل اور رسمی دلائل اسی میموری لوکیشن میں بنائے جائیں گے۔
  • C ++ ، PHP ، Visual Basic NET ، اور C# جیسی پروگرامنگ زبانوں میں قیمت کے لحاظ سے کال ڈیفالٹ طریقہ ہے جبکہ حوالہ سے کال صرف جاوا زبان کی حمایت کرتی ہے۔
  • کال بائی ویلیو ، متغیرات کو سیدھا طریقہ استعمال کرتے ہوئے پاس کیا جاتا ہے جبکہ کال بائی ریفرنس ، پوائنٹس کی ضرورت ہوتی ہے کہ متغیرات کا پتہ محفوظ کیا جائے۔

کال بہ حوالہ طریقہ کیا ہے؟

حوالہ کے طریقہ سے کال ایک دلیل کے پتے کو رسمی پیرامیٹر میں کاپی کرتا ہے۔ اس طریقے میں ، ایڈریس فنکشن کال میں استعمال ہونے والی اصل دلیل تک رسائی کے لیے استعمال ہوتا ہے۔ اس کا مطلب یہ ہے کہ پیرامیٹر میں کی جانے والی تبدیلیاں گزرنے والی دلیل کو بدل دیتی ہیں۔

اس طریقہ کار میں ، میموری کی تقسیم اصل پیرامیٹرز کی طرح ہے۔ فنکشن میں تمام آپریشن اصل پیرامیٹر کے ایڈریس پر محفوظ کردہ ویلیو پر کئے جاتے ہیں ، اور نظر ثانی شدہ ویلیو اسی ایڈریس پر سٹور کی جائے گی۔

کال بائی ویلیو طریقہ کی مثال۔

 void main() { int a = 10, void increment(int); Cout << 'before function calling' << a; increment(a); Cout << 'after function calling' << a; getch(); void increment(int x) { int x = x + 1; Cout << 'value is' << x; } 

آؤٹ پٹ:

 before function calling 10 value is 11 after function calling 1-0 

کیونکہ متغیر اعلان کردہ 'a'in main () انکریمنٹ () میں متغیر' x 'سے مختلف ہے۔ اس پروگرام میں صرف متغیر نام ملتے جلتے ہیں ، لیکن ان کا میموری ایڈریس مختلف ہے اور میموری کے مختلف مقامات پر محفوظ ہے۔

حوالہ کے طریقہ سے کال کی مثال۔

 Public static void(string args[]) { int a = 10; System.out.println('Before call Value of a = ', a); Void increment(); System.out.println('After call Value of a = ', a); } Void increment(int x) { int x = x + 1; } 

آؤٹ پٹ:

 Before call Value of a =10 After call Value of a =11 

کیونکہ متغیر 'a' in کا ​​حوالہ دے رہا ہے/ main () میں متغیر 'a' کی طرف اشارہ کر رہا ہے۔ یہاں متغیر نام مختلف ہے ، لیکن دونوں ایک ہی میموری ایڈریس کے مقامات کی طرف اشارہ/حوالہ دے رہے ہیں۔

کال بہ ویلیو بمقابلہ حوالہ کال۔

پیرامیٹرز قیمت کے مطابق کال کریں۔ حوالہ کے ذریعے کال کریں۔
تعریفکسی فنکشن کو کال کرتے وقت ، جب آپ متغیرات کو کاپی کرکے اقدار پاس کرتے ہیں ، تو اسے 'کال بائی ویلیوز' کہا جاتا ہے۔کسی فنکشن کو کال کرتے وقت ، پروگرامنگ زبان میں متغیرات کی اقدار کو کاپی کرنے کے بجائے ، متغیرات کا پتہ استعمال کیا جاتا ہے جسے 'کال بائی ریفرنسز' کہا جاتا ہے۔
دلائل۔اس طریقہ کار میں ، متغیر کی ایک کاپی پاس کی جاتی ہے۔اس طریقہ کار میں ، ایک متغیر خود گزر جاتا ہے۔
اثرمتغیر کی کاپی میں کی جانے والی تبدیلیاں فنکشن سے باہر متغیر کی قدر میں کبھی تبدیلی نہیں کرتی ہیں۔متغیر میں تبدیلی فنکشن کے باہر متغیر کی قدر کو بھی متاثر کرتی ہے۔
قدر کی تبدیلی۔آپ کو اصل متغیرات میں کوئی تبدیلی کرنے کی اجازت نہیں دیتا ہے۔فنکشن کالز کا استعمال کرکے آپ کو متغیرات کی اقدار میں تبدیلی لانے کی اجازت دیتا ہے۔
متغیر کا گزرنا۔متغیرات کی اقدار ایک سیدھا سادہ طریقہ استعمال کرتے ہوئے منظور کی جاتی ہیں۔متغیر کا پتہ محفوظ کرنے کے لیے پوائنٹر متغیرات کی ضرورت ہوتی ہے۔
قدر میں ترمیماصل قدر میں ترمیم نہیں کی گئی۔اصل قدر میں ترمیم کی گئی ہے۔
یادداشت کا مقام۔اصل اور رسمی دلائل مختلف میموری لوکیشن میں بنائے جائیں گے۔اصل اور رسمی دلائل اسی میموری لوکیشن میں بنائے جائیں گے۔
حفاظت۔اصل دلائل محفوظ رہتے ہیں کیونکہ انہیں غلطی سے تبدیل نہیں کیا جا سکتا۔اصل دلائل محفوظ نہیں ہیں۔ انہیں غلطی سے تبدیل کیا جاسکتا ہے ، لہذا آپ کو دلائل کی کارروائیوں کو احتیاط سے سنبھالنے کی ضرورت ہے۔
پہلے سے طے شدہبہت سی پروگرامنگ زبانوں میں ڈیفالٹ جیسے سی ++ پی ایچ پی۔ بصری بنیادی نیٹ ، اور C#.یہ جاوا جیسی زیادہ تر پروگرامنگ زبانوں کے ذریعہ تعاون یافتہ ہے ، لیکن بطور ڈیفالٹ نہیں۔

کال بائی ویلیو طریقہ استعمال کرنے کے فوائد۔

قیمت کے طریقہ سے کال کے فوائد/فوائد:

  • طریقہ اصل متغیر کو تبدیل نہیں کرتا ، لہذا یہ ڈیٹا کو محفوظ کر رہا ہے۔
  • جب بھی کسی فنکشن کو بلایا جائے ، کبھی بھی اصل دلائل کے اصل مواد کو متاثر نہ کریں۔
  • اصل دلائل کی قدر رسمی دلائل کو منتقل کی جاتی ہے ، لہذا رسمی دلیل میں کی گئی کوئی بھی تبدیلی حقیقی معاملات کو متاثر نہیں کرتی۔

کال بذریعہ حوالہ طریقہ استعمال کرنے کے فوائد۔

حوالہ کے طریقہ سے کال استعمال کرنے کے فوائد:

  • فنکشن دلیل کی قدر کو تبدیل کرسکتا ہے ، جو کافی مفید ہے۔
  • یہ صرف ایک ویلیو رکھنے کے لیے ڈپلیکیٹ ڈیٹا نہیں بناتا جو آپ کو میموری کی جگہ بچانے میں مدد کرتا ہے۔
  • اس طریقے میں ، دلیل کی کوئی نقل نہیں ہے۔ لہذا اس پر بہت تیزی سے عمل کیا جاتا ہے۔
  • غلطی سے کی گئی تبدیلیوں سے بچنے میں آپ کی مدد کرتا ہے۔
  • کوڈ پڑھنے والا شخص کبھی نہیں جانتا کہ فنکشن میں ویلیو میں تبدیلی کی جا سکتی ہے۔

کال بائی ویلیو طریقہ استعمال کرنے کے نقصانات۔

یہاں ، ویلیو میتھڈ کے ذریعے کال کے بڑے نقصانات/خرابیاں ہیں:

  • اصل پیرامیٹرز میں تبدیلی اسی دلیل کے متغیرات میں بھی ترمیم کر سکتی ہے۔
  • اس طریقے میں ، دلائل متغیر ہونے چاہئیں۔
  • آپ کسی فنکشن باڈی میں براہ راست کسی متغیر کو تبدیل نہیں کر سکتے۔
  • کبھی کبھی دلیل پیچیدہ تاثرات ہوسکتی ہے۔
  • ایک ہی متغیر کے لیے دو کاپیاں بنائی گئی ہیں جو میموری کے لیے موثر نہیں ہیں۔

کال بذریعہ حوالہ طریقہ استعمال کرنے کے نقصانات

یہاں ، حوالہ کے طریقہ سے کال استعمال کرنے کے بڑے نقصانات ہیں:

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