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

توضيح: الفرق بين Sub و Function

مغلق
بدأه حمزة في 20 أبريل 2007 · 6 رد · 5,935 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الكرام,

لاحظت أن بعض الاخوة يكتب جميع الاكواد ضمن function

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

----------------------

  • Sub

عندما تريد كتابة كود لا يعيد إليك قيمة,

مثال: كأن تقوم بكتابة إجراء يفتح تقرير لزبون معين بين تاريخين

  Private Sub LoadReport(ByVal CustomerName As String, ByVal FromDate As Date, ByVal ToDate As Date)
		'هنا الكود الخاص بالتقرير
	End Sub

هنا لا تريد الاجراء ان يعيد اليك قيمة

  • Function

عندما تريد كتابة كود تريد منه إعادة قيمة

مثال: كأن تقوم بكتابة كود تريد منه أن يعيد اليك جمع عددين

  Private Function Sum(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer
		Return Number1 + Number2
	End Function

ملاحظة: لا تترك الـ Function دون ذكر نوع البيانات التي تريد إعادتها (Integer, String, Double, …)

--------------------------------------------------------------------

إذن الفكرة العامة هي أن Sub لا تعيد قيمة و Function تعيد قيمة.

كيف يمكن الخروج عن القاعدة؟

أي

كيف يمكن جعل الـ Sub تعيد إليك ليس فقط قيمة واحدة بل أكثر من قيمة؟

يمكنك ذلك من خلال إستخدام ByRef (يمكنك مراجعة الدرس التالي للأخ القدير أيوب جمال الإدريسي - الفرق بين ByRef و ByVal لمعرفة الفرق بين ByVal و ByRef)

مثال:

Dim ClientName As String = String.Empty
		Dim Tel As String = String.Empty
		Dim Address As String = String.Empty
		Dim Email As String = String.Empty
		ClientName = "Hamza"
		GetClientInformation("Hamza", Tel, Address, Email)
		MsgBox(Tel & "," & Address & "," & Email)
-----------------------------------------------------------------
	Private Sub GetClientInformation(ByVal ClientName As String, ByRef Telephone As String, ByRef Address As String, ByRef Email As String)
		'يمكنك كتابة الكود الذي يناسبك
		If ClientName = "Hamza" Then
			Telephone = "0096100000"
			Address = "Beirut - Lebanon"
			Email = "hamza@mail.com"
		End If
	End Sub

الطريقة السابقة غير محبذة, ولكن أحببت ذكرها للفائدة. يمكن الحصول على نفس النتيجة باستخدام الـ Function مع الـ Structure , مثال:

	Structure ClientInfo
		Dim Telephone As String
		Dim Address As String
		Dim Email As String
	End Structure
-------------------------------------------------------
Dim ClientInformation As ClientInfo
		ClientInformation = GetClientInformation("Hamza")
		MsgBox(ClientInformation.Telephone & "," & ClientInformation.Address & "," & ClientInformation.Email)

------------------------------------------------------
	Function GetClientInformation(ByVal ClientName As String) As ClientInfo
		Dim Result As ClientInfo = Nothing
		If ClientName = "Hamza" Then
			With Result
				.Telephone = "0096100000"
				.Address = "Beirut - Lebanon"
				.Email = "hamza@mail.com"
			End With
		End If
		Return Result
	End Function

اقتباس
How to get experience without a job, and how to get a job without experience
#2

شكرا على الشرح ،هههه انا قمت بشرح Classes & Structure

بالتوفيق

45678rh7.jpg
#3

شكرا كثير

بصراحه موضوع اكتر من رائع

1145392391.gif
#4

مشكور اخي (حمزة) على هذا الشرح الجميل...

بالتوفيق..

((رحلة العودة الى العالم الافتراضي قد بدأت))

#5
اقتباس
الطريقة السابقة غير محبذة, ولكن أحببت ذكرها للفائدة

ممكن توضح السبب ؟

#7

يوجد في توقيعي درس مفصل عن الروتين والدوال وهو بعنوان " درس في الإجراءات الفرعية ( العامة )

" ، أتمنى أن تستفيدو منه ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

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

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