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

الفرق بين ال Procdure وال Function رجاء

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

السلام عليكم ...

أرجوا منكم أيها الأخوة أن تساعدوني في فهم الفرق بين ال Procdure والـ Function في الدوت نت فقد سمعت كثيرا ان لـ Procdure لا يرجع قيمة أما الـ Function فإنها ترجع قيمة فمثلا عملنا Procdure يجمع رقمين فإنه يرجع قيمة ... أليس كذلك

ارجوا أن يقدم لي أحد الأخوة شرحا مبسطا لهذا الموضوع مع إعطاء أمثلة من الدوت نت بمعنى لماذا قلنا عن Massagebox أنها Function وليست Procdure

وكيف إذا ظهرت القوائم المختصرة أثناء كتابة الكود كيف نفرق بين الProcdure وال Function

ساعدوني في فهم هذه النقطة لانني اعتقد انها من أساسيات البرمجة ، حتى أكمل مشواري فيها ولكم جزيل الشكر

وإلا سوف أتوقف ويكون منتدى الفريق العربي للبرمجة هو السبب :lol:

#2

لا يا أيمن لااااااا

#3

أخي

في القديم كان هناك فرق بين الاجراء و الدالة (و هو كما ذكرت سايقا)

لكن المبدأ الاساسي هو أن الاجراء اشمل من الدالة و في الدوت نت لن تجد فرق كما في اي لغة اخرى الا في طريقة استدعاء الاجراء أو الداله فقط

#4

و المسج تعتبر دالة في الدوت نت لانها صممت لكي تعيد قيمة فقط

#5

طيب أخي ناصر كيف استطيع افرق بينهم لما اكتب اي كود في الدوت نت ( طبعا تظهر قائمة بالخصائص والأوامر كما تعلم ) وهو في الحقيقة عندم توقف على اي خاصية يعطيك على شكل تعليق جميع الوسائط المفروض تمريرها إلى هذه الدالة أو الإجراء

#6

خذ هذا الرابط وهو شرح للدوال وكيفيىة إنشائها وإن شاء الله من خلالها تعرف الفرق

إنشاء الدوال

تم تعديل هذه المشاركة بواسطة nasser50001 في 1 فبراير 2005 في 19:59

#7

السلام عليكم

الأخ الكريم

أرى هنا أنك تقصد بكلمة Procdure الإجراء أو ال Sub وهذه هي الكلمة المستخدمة والفرق بين الإجراء Sub والدالة Function هو بالفعل ما ذكرته أنت وهو أن الدالة يجب أن تعيد قيمة أما الإجراء فلا يجب أن يعيد قيمة والقيمة المرتجعة من الدالة تكون هي الدالة نفسها دعنا نوضح هذا الأمر

مثلاً فلنفرض ان لديك خادم وطلبت من خادمك هذا أمراً ثم قلت له " وبعدأن تنهي هذا الأمر إذهب إلى بيتك " هنا يكون خادمك هذا إجراء .

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

ولنعطي مثالاً للدالة والإجراء من واقع الدوت نيت

أولا الدالة : فلنفرض أننا نريد عمل دالة تقوم بفتح اتصال مع قاعدة بيانات من نوع SQL SERVER ثم ترجع لنا الاتصال ذاته كمتغير ليتسنى لنا إغلاقها وقت الانتهاء منها

تكون الدالة كالآتي :

    Public Shared Function ConnectDb(ByVal ConnectionString As String) As SqlConnection
             Dim DbConnection As SqlConnection
        DbConnection = New SqlConnection
                  DbConnection.ConnectionString = ConnectionString
            DbConnection.Open()
            Return DbConnection
    End Function

لاحظ أننا يجب أن نمرر متغير نصي على انه جملة الاتصال النصية

والقيمة المرتجعة تكون من خلال استخدام الكلمة المحجوزة Return

لاحظ ايضاً أن الدالة غالباً ما يكون لها نوع وهو الذي حددناه من خلا الجملة " As SqlConnection"

الآن كيف نستدعي هذه الدالة ونستخدمها ؟

انظر ..

 Dim SqlCon As New SqlConnection
        SqlCon = ConnectDb("ضع هنا جملة الاتصال الخاصة بك")

وأهم ما في الأمر اننا نستطيع إغلاق هذا الاتصال كالتالي

SqlCon.Close

حسناً حتى الآن شرحنا الدالة Function بقي الإجراء Sub

لنفرض أننا نريد عمل إجراء له وظيفة مشابهة لوظيفة الدالة التي قمنا بعملها قبل لحظات لكن لاحظ الفرق ... أولا نكتب كود الإجراء

 Sub ConnectDb(ByVal ConnectionString As String)
        Dim DbConnection As SqlConnection
        DbConnection = New SqlConnection
        DbConnection.ConnectionString = ConnectionString
        DbConnection.Open()
    End Sub

هل لاحظت الفرق ؟ نعم هو كما تقول ..

فالإجراء ليس له نوع ولا يجوز أن يكون له نوع ولا يجوز كذلك أن يرجع قيمة من خلال الكلمة Return ..

وأيضاً .. ليس لك أي نوع من التحكم بعد ذلك فكل ما تفعله أنك تأمر بتنفيذ الإجراء ثم .. لا شيء انتهى ..

انظر كيفية استخدام هذا الإجراء

 ConnectDb("ضع هنا جملة الاتصال الخاصة بك")

لاحظ أننا هنا لا نستطيع إغلاق هذا الاتصال كما فعلنا مع الدالة

أرجو أن اكون قد وفقت لشرح هذا الأمر ..

بارك الله لنا ولكم

#8

شكرا لك يا اخ محمد النحرواي

لقد فهمت المقصود الآن

وجزاكم الله خيرا

#9

طيب يا اخ محمد كيف يكون نوع الدالة as sqlconnection ما هو المفروض يكون integer او double أو single

#10

وبعدين يا اخ محمد لو تعبتك ... آسف

لماذا احيانا في تعريف المتغيرات تضع كلمة New واحيانا لا

#11

السلام عليكم

أستاذي الفاضل

أياً كان "النوع" فهو في النهاية نوع !! والانواع لا تقتصر فقط على الأنواع التقليدية لكن أنت نفسك يمكنك تعريف كلاس جديد فيصير نوع يمكن التعريف على أساسه

هل اتضح الأمر ؟

#12

ايوه فهمت عليك

يعني لما نعرفه as connection معنى ذلك ان الدالة سوف ترجع لنا Connection يمكن لنا اغلاقه او فتحه او غير ذلك

وعندما ترجع لنا الدالة integer يمكن ان نتصرف في هذا الرقم كما نشاء

اليس كذلك

#13

لأن New تقوم بعمل إنشاء للمتغير على أنه كلاس مماثل تماما للنوع المعرف به أما التعريف ب as فقط لا يقوم بإنشاء الكلاس ربما هو كافي في حالة الأنواع التي ليس لها members

ربما كلامي غير دقيق 100% ولكني أحاول التقريب

وفقك الله للخير

#14

واضح أنني أرد حينما تكتب أنت سؤالاً آخر :)

اقتباس
يعني لما نعرفه as connection معنى ذلك ان الدالة سوف ترجع لنا Connection يمكن لنا اغلاقه او فتحه او غير ذلك

وعندما ترجع لنا الدالة integer يمكن ان نتصرف في هذا الرقم كما نشاء

اليس كذلك

نعم تماماً

#15

جزاك الله خيرا يا اخ محمد النحرواي

الف ... شكر

#16

أنصحك بتحميل هذا الكتاب

http://www.biznaseducation.com/VBDotNet/book.htm

حيث يوجد شرح واف لما تريده

ani.gif

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

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