الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل من الممكن أن تعيد الدالة قيمتان ؟

مغلق
بدأه karim_tarek في 29 مارس 2005 · 9 رد · 896 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سؤالي: هل من الممكن أن تعيد الدالة (function) قيمتان, أرسلت لكم صورة توضح الكود

فكرة هذه الدالة هي أنك تدخل قيمتان لأي نوع من الكتابة ثم تقوم الدالة بتبديل نصف القيمة الأولى مع النصف الثاني للقيمة الثانية و هكذا مع القيمة الثانية, لذا أنا أريد أن أدخل قيمتان و يكون الناتج قيمتان فهل هذا ممكن؟!

و إذا كان ممكنا فما الكود الذي سوف يكتب؟

post-41592-1112108097_thumb.gif

#2

الصورة المرفقة كانت خاصة بسؤال سابق عن ReadLine

على العموم لا يمكن لدالة ان تعيد اكثر من قيمة، لكن اذا اردت ان تمرر معاملين لدالة أو اجراء وتريد ان يقومو بالتغير عليهم عليك تمريرهم حسب ال reference مثل

Sub MyFun(byref x, byref y)
x = 10
y = 20
end sub

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#3

وعليكم السلام

نعم يمكن للدالة ال function أن تعيد أكثر من قيمة ولكن هذا في حالة أن تكون المدخلات (المعاملات) مختلفة مثلاً لاحظ المثال الآتي :

function SumNums(Num1 as integer , Num2 as integer) as integer

dim retval as integer

retva l= Num1 + Num2

return retval

end function

هذا مثال لدالة تقوم بجمع رقمين واسمها كما ترى SumNums وهي تعيد ناتج الجمع

يمكننا أيضاً أن نعرف دالة أخرى بنفس الاسم لكن نعطيها معاملات مختلفة مثلاً :

function SumNums(Num1 as integer , Num2 as integer , Num3 as integer) as integer

dim retval as integer

retva l= Num1 + Num2 + Num3

return retval

end function

لاحظ اننا هنا قمنا بزيادة المعاملات معامل آخر والناتج أيضاً هو مجموع المعاملات الثلاثة

هذا مثال بسيط والأمر متوسع أكثر فيمكن تغيير الأنواع مثلاً للحصول على نواتج أخرى

تذكر أن تكتب الدالتين معاً ، ولا تقلق لن يحدث خطأ تكرار دوال إلا في حالة كتابة نفس عدد وأنواع المعاملات .

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

وفقك الله تعالى

#4

أولا آسف لإرسال الصورة الخطأ و حاولت تغيرها لكني لا أجد زر التعديل !!

ثانيا شكرا يا جماعة و الله ما قصرتو معي, سأحاول تطبيق ما أقترحتموه و إذا سنحت الفرصه أخبركم بالنتائج إن شاء الله

تم تعديل هذه المشاركة بواسطة karim_tarek في 29 مارس 2005 في 23:15

#5

السلام عليكم

بالنسبة للتعديل يوجد عندك زر تحت الصفحة إسمه تحريرتستطيع التغيير من خلاله

بالنسبة لما سبق

تستطيع تعريف function بمتغيرين يرجع هذا الفنكشن كله وتستقبله بالمتغيرين

بلغة الجافا ترجع الكلاس كله

والإخوان جزاهم الله خيراً قد أوضحو الطريقتين

اللهم صل وسلم وزد وبارك على سيدنا محمد وعلى آله وصحبه وسلم

تعلم كيف تقرأ من ملف باستخدام لغة السي

Routers Programming-الدرس الأول

#6
اقتباس
هل من الممكن أن تعيد الدالة قيمتان ؟

الاجابة علي هذا السؤال : لا

لايمكن للدالة بارجاع أكثر من قيمة فالدوال في كل لغات البرمجة ترجع قيمة واحدة بغض النظر عن نوع هذه القيمة

اقتباس
نعم يمكن للدالة ال function أن تعيد أكثر من قيمة ولكن هذا في حالة أن تكون المدخلات (المعاملات) مختلفة مثلاً لاحظ المثال الآتي :

المثال في النهاية يعيد المجموع وهو قيمة واحدة :)

أي هل من الممكن إرجاع أكثر من قيمة بعد الامر Return ؟؟ طبعا لا .

اقتباس
على العموم لا يمكن لدالة ان تعيد اكثر من قيمة، لكن اذا اردت ان تمرر معاملين لدالة أو اجراء وتريد ان يقومو بالتغير عليهم عليك تمريرهم حسب ال reference مثل

10 علي 10 محمد نسمان B) فالطريقة الوحيدة لجعل الاجراء أو الدالة لتؤثر في قيمة معينة حتي بعد الانتهاء من تنفيذ أوامرها هي تمرير المتغيرات كـ Reference Type وليس Value Type

والفرق الرئيسي بين هذين النوعين هو عند الاعلان عن المتغير By Value أنه يتم تخزينه مباشرة في الذاكرة أما عند الاعلان عنه كـ Reference Type يتم تخزين مؤشر فقط للمتغير حيث يتم تخزين الـ Value Type ومؤشر الـ Reference Type في مكدسة Stack ..

والاستخدام الشائع للاسلوب By Ref في التطبيقات الموزعة التي تعمل علي الشبكة ..

والله الموفق

#7

شكراً اخي والله افهم ما تقول ولكن مقصدي واضح !!

فالمستخدم هنا مجرد مثال ولكن يمكن استخدامه بأكثر من طريقة ، وتعيد لنا الدالة قيم متنوعة وانواع مختلفة والاسم واحد وهذا مقصدي

اسم واحد يعيد أكثر من نوع وقيم مختلفة ، وإلا فأنا أعلم جيداً أن الدالة لا تعيد غير متغير واحد من خلال return

يا رب تكون وصلت

#8

هناك طريقة ايظا لجعل دالة تعيد اكثر من قيمة ( مثلا قيمة من نوع Integer واخرى من نوع Long واي انواع اخرى كذلك )

وذلك بجعل الدالة تعيد قيمة من نوع Structure يكون مخزن فيه انواع متباينة

function SumNums(Num1 as integer , Num2 as integer ) as struc1

dim s as struct1

s.X = Num1
s.Y = Num2

return s

end function

مع ملاحظة انني افترضت ووجود structure معرف مسبقا اسمه struct1

#9

أعتقد أننا ذهبنا في شقين الان :)

القيمة المرجعة من الدالة تعتمد علي نوع بيانات وليس بالمعني أنها قيمة واحدة (أي رقم واحد) , مثلاً المصفوفة يمكن للدالة أن تعيد مصفوفة والمصفوفة تحتوي علي أكثر من قيمة واحدة ولكن هنا نقول أن الدالة تقوم بارجاع مصفوفة ولا نقول أنها تقوم بإرجاع أكثر من قيمة , هل من الممكن أن تقوم الدالة بارجاع مصفوفة مستقلة ومتغير رقمي مستقل , لا :)

علي العموم (h) المستفيد الاول والاخير من هذين الشقين هو karim_tarek :lol: لانه بهذا قد يكون قد جمع المعلومات الكافية عن القيم المرجعة بواسطة الدوال :)

والشكر والتقدير لكل من شارك في هذا الموضوع ..

اقتباس
شكراً اخي والله افهم ما تقول ولكن مقصدي واضح !!

B) أعرف ذلك جيداً أخي العزيز محمد النحراوي فقط أحببت أن أوضح المقصد من السؤال فعنوان الموضوع

اقتباس
  الرد على موضوع هل من الممكن أن تعيد الدالة قيمتان ؟
والمعني القريب هو أن تعيد الدالة أكثر من نوع بيانات واحد وقد ثبت أنه يريد المعني البعيد :D

وفقكم الله

تم تعديل هذه المشاركة بواسطة Ammar Gaffar في 31 مارس 2005 في 08:19

#10
اقتباس
والمعني القريب هو أن تعيد الدالة أكثر من نوع بيانات واحد وقد ثبت أنه يريد المعني البعيد

:)

ذكرتني بمقولة موجودة في هذا الموضوع /index.php?showtopic=61106

تقول :

 There are three sides to any argument: your side, my side and the right side.

:D

هذا الموضوع مغلق.

مواضيع مشابهة