الاتصال حسب المرجع مقابل الاتصال حسب القيمة: الفرق والمقارنة

يمكن استدعاء الوظائف بطريقتين في البرنامج. إحدى الطرق هي عن طريق الاتصال بالإشارة ، والطريقة التالية هي عن طريق الاتصال بالقيمة. يمكن تمييز هذه الطرق بناءً على نوع القيم التي يتم تمريرها إلى المعلمات.

تسمى المعلمات المستخدمة فيها المعلمات الفعلية. يتم استخدامها في العديد من لغات البرمجة مثل C و C ++ و Java.

الوجبات السريعة الرئيسية

  1. يقوم الاستدعاء بالإحالة بتمرير عنوان ذاكرة المتغير إلى دالة ، بينما يرسل الاستدعاء حسب القيمة نسخة من قيمة المتغير.
  2. باستخدام الاستدعاء حسب المرجع ، تؤثر التغييرات التي يتم إجراؤها داخل دالة بشكل مباشر على المتغير الأصلي ، بينما يترك الاتصال حسب القيمة المتغير الأصلي دون تغيير.
  3. يعد الاتصال بالإشارة أكثر كفاءة في استخدام الذاكرة من الاتصال بالقيمة ، ولكنه قد يؤدي إلى آثار جانبية غير مقصودة إذا لم تتم إدارتها بعناية.

الاتصال حسب المرجع مقابل الاتصال حسب القيمة

الخل الأبيض ، المستخدم في التنظيف أو الطهي ، يُصنع عن طريق تخمير الكحول المقطر ، مما ينتج عنه سائل واضح المذاق. يُصنع خل التفاح عن طريق تخمير السكريات من التفاح ، وله طعم أكثر اعتدالًا وحلوًا إلى حد ما ، ويستخدم في تتبيلات السلطة والمخللات.

الاتصال حسب المرجع مقابل الاتصال حسب القيمة

يتم استخدام طريقة الاستدعاء بالمرجع للوصول إلى الوسيطة الفعلية التي تمثل استدعاء الوظيفة. هذا يعني أنه يتم إجراء التغييرات في المعلمة فقط بعد تمرير الوسيطة.

يستخدم نفس تخصيص الذاكرة المستخدم في المعلمات الفعلية. عندما تستدعي دالة ، بدلاً من نسخ المتغيرات ، يتم استخدام العنوان نفسه في الاستدعاء من خلال المراجع.

الاستدعاء حسب القيمة هو روتين فرعي يمرر البيانات الفعلية للمعلمات المستخدمة في الروتين الفرعي.

في هذه الطريقة ، عندما تستدعي دالة ، فإنك تقوم بتمرير القيمة إلى متغير الوسيطات في الوظيفة التي تم استدعاؤها بحيث تعمل الوظيفة التي تم استدعاؤها على القيمة. لن ينعكس هذا التغيير في الوظيفة التي تم استدعاؤها.

جدول المقارنة

معلمات المقارنةدعوة عن طريق المرجعدعوة حسب القيمة
متغيرتم تمرير المتغير.تم تمرير نسخة من المتغير.
قيمة متغيرةستؤثر التغييرات التي تم إجراؤها على الوظيفة بالخارج.التغييرات التي تم إجراؤها لن تؤثر على الوظيفة بالخارج.
القيمة الأصليةتم تعديله.لم يتم تعديله.
السلامةالحجج الفعلية ليست آمنة.الحجج الفعلية آمنة.
تعريفيستخدم المتغير نفسه للتمرير.يستخدم نسخة المتغير للتمرير.

ما هو الاتصال بالمرجع؟

إنها طريقة تستخدم لتمرير الوسائط إلى وظيفة. لتخزين عنوان المتغيرات ، يتم استخدام متغيرات المؤشر. في هذه الطريقة ، الحجج الفعلية ليست آمنة.

اقرأ أيضا:  مخطط النجمة مقابل ندفة الثلج: الفرق والمقارنة

يمكن إجراء تعديلات عرضية. من المهم التعامل مع عمليات الحجة بعناية. يساعد على تجنب التغييرات التي تم إجراؤها عن طريق الخطأ.

لن يُنشئ أي بيانات مكررة لأنه يحتوي على قيمة واحدة فقط حتى يتمكن من ذلك حفظ مساحة الذاكرة. إذا قرأ شخص الكود ، فلن يتمكن من معرفة ما إذا كانت القيم التي تم تعديلها في هذا الرمز لم يتم تعديلها أم لا.

في هذه الطريقة ، يعد الضمان مدى الحياة مشكلة كبيرة. سيصبح خطرًا إذا كنت تعمل مع برامج متعددة الخيوط ولامدا. للإعلان عن الاتصال بالإشارة ، يجب عليك تمرير العنوان.

اتصل بالإشارة عندما يتعلق الأمر ببرمجة لغة سي. يصل مباشرة إلى عناصر البيانات ويؤدي الوظائف عليها. لكن يجب أن تكون حذرًا لأن المؤشرات متورطة فيه.

إذا كنت تعرف الحالة الخاصة لعنصر البيانات ، فقم باستدعاء معرف الطريقة المرجعية بشكل مثالي. لن يؤدي تعديل نسخة من البيانات إلى أي شيء مفيد

الاتصال بالإشارة له مخاطر لا يستدعيها الاستدعاء بالقيمة. يمكنك إعادة تعيين قيمة إلى مؤشر بدون قصد وفقدانها في الذاكرة.

ما هو الاتصال بالقيمة؟

في هذه الطريقة ، لن يكون للتغييرات التي يتم إجراؤها داخل وظيفة المعلمة أي تأثير على الوسيطة. يعمل برنامج المبادلة كأفضل مثال على برنامج الاتصال حسب القيمة.

يوضح أنه لم يتم إجراء أي تغييرات في القيمة على الرغم من تغييرها داخل الوظيفة. في جافا، تعني طريقة الاستدعاء بالقيمة استدعاء الطريقة بمعاملتها كقيمة.

في هذه الطريقة ، يتم تخزين المعلمات في مواقع ذاكرة مختلفة. إذا قمت بإجراء أي تغيير داخل الموقع الفعلي ، فلن تتأثر المعلمة الفعلية للمتصل.

هذه الطريقة هي الأفضل لأن القيمة الأصلية لم يتم تعديلها. لكن لا يمكنك إجراء أي تغييرات على المتغيرات الفعلية. ستكون الحجج الفعلية آمنة في هذه الطريقة حيث لا يمكنك إجراء أي تغييرات عن طريق الخطأ. 

اقرأ أيضا:  التصيد الاحتيالي مقابل الانتحال: الفرق والمقارنة

هذه الطريقة يحفظ البيانات لأنها لا تغير المتغير الأصلي. هنا الحجج المتغيرات. لا يعد تغيير متغير في جسم وظيفي مباشرًا. يمكن أن تعمل التعبيرات المعقدة كوسيطات في بعض الأحيان.

إنها ليست فعالة في الذاكرة حيث يتم إنشاء نسختين لنفس المتغير. إذا كان حجم البيانات كبيرًا ، فلن تتناولها طريقة الاتصال بالقيمة. في هذه الحالة ، يجب على المبرمجين الذهاب للاستدعاء من خلال الأسلوب المرجعي. 

الاختلافات الرئيسية بين الاتصال حسب المرجع والاتصال حسب القيمة

  1. يتم تعديل القيمة الأصلية في المكالمة حسب المرجع. من ناحية أخرى ، في الاستدعاء حسب القيمة ، لا يتم تعديل القيمة الأصلية.
  2. يتم دعم الاتصال حسب المرجع من قبل لغات البرمجة ، لكنه ليس افتراضيًا. من ناحية أخرى ، يعمل الاتصال حسب القيمة افتراضيًا في لغات البرمجة.
  3. في Call by Reference ، ستؤثر أي تغييرات يتم إجراؤها في المتغير أيضًا على المتغير خارج الوظيفة. من ناحية أخرى ، في الاستدعاء حسب القيمة ، فإن أي تغييرات يتم إجراؤها في المتغير لن تؤثر على المتغير خارج الوظيفة.
  4. يسمح لك الاتصال بالإشارة بإجراء تغييرات في القيمة المتغيرة. من ناحية أخرى ، لن يسمح لك الاتصال بالقيمة بإجراء تغييرات.
  5. في الاتصال بالإشارة ، سيتم تمرير عنوان القيمة. ولكن في الاستدعاء بالإشارة ، سيتم تمرير نسخة من القيمة. 
مراجع حسابات
  1. https://www.jstor.org/stable/3857812
  2. ftp://prog.vub.ac.be/education/EMOOSE/ReuseSlides/merge-papers/Jackson&al1994-semanticDiff.pdf

آخر تحديث: 22 يوليو 2023

النقطة 1
طلب واحد؟

لقد بذلت الكثير من الجهد في كتابة منشور المدونة هذا لتقديم قيمة لك. سيكون مفيدًا جدًا بالنسبة لي ، إذا كنت تفكر في مشاركته على وسائل التواصل الاجتماعي أو مع أصدقائك / عائلتك. المشاركة هي ♥ ️

اترك تعليق

هل تريد حفظ هذه المقالة لوقت لاحق؟ انقر فوق القلب الموجود في الزاوية اليمنى السفلية للحفظ في مربع المقالات الخاصة بك!