الأخوة الكرام,
لاحظت أن بعض الاخوة يكتب جميع الاكواد ضمن 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
