منتديات احمد سعيد عبده
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

سلسلة تعلم VBScript – الجزء الثاني - الدوال والإجراءات الفرعية

اذهب الى الأسفل

سلسلة تعلم VBScript – الجزء الثاني - الدوال والإجراءات الفرعية Empty سلسلة تعلم VBScript – الجزء الثاني - الدوال والإجراءات الفرعية

مُساهمة من طرف احمد سعيد الخميس أبريل 23, 2009 12:29 pm

سلسلة تعلم VB****** – الجزء الثاني - الدوال والإجراءات الفرعية


الدرس السابع: الدوال والإجراءات الفرعية
Functions and Subs ...


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


الدوال..

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




كود:


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

Function FunctionName([arguments])
Function statements
End Function

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



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



كود:

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

'تكوين الدالة
Function Percent(Hi,Nw)
Dim RetVal
RetVal = Nw * 100 / Hi & "%"
Percent = RetVal
End Function

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



كما تلاحظ في المثال السابق أننا قمنا بطلب القيمة العليا Hi والقيمة الحالي Nw
كوسيطات ثم قمنا بإجراء العملية لإيجاد النسبة ثم مرنا النتيجة إلى اسم الدالة..

ويمكننا استدعاء الدالة بتمرير القيمة العظمى والقيمة الحالية



كود:

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

Dim sRet
sRet = Percent(200,50)
msgbox sRet

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


الإجراءات الفرعية..

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



كود:

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

Sub SubName(arguments)
Sub statements
End Sub

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




الآن سنقوم بتحويل المثال السابق لجعله معتمدا على الإجراءات الفرعية


كود:

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

Sub Percent(Hi,Nw)
Dim RetVal
RetVal = Nw * 100 / Hi & "%"
msgbox RetVal
End Sub

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



والآن نقوم باستدعاء الإجراء الفرعي


كود:

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

Percent 200,50

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




تلاحظ عند الاستدعاء أن الإجراء لا يعيد أي قيمه بل يقوم بتنفيذ مجموعة من الأوامر
، آخرها هو عرض نتيجة القيمة باستخدام الإجراء msgbox .. أيضا تلاحظ عدم استخدامنا
للأقواس عند استدعاء الإجراء الفرعي ويجب علينا استخدامها إذا قمنا بالاستدعاء
بواسطة العبارة Call ...



كود:

--------------------------------------------------------------------------------
Call Percent(200,50)

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



الدوال والإجراءات المعرفة داخل اللغة...

قمنا قبل قليل بإنشاء إجراء فرعي ودالة وقد قمنا بتعريفهما قبل استخدامهما، هذا
النوع من الإجراءات يسمى "الإجراءات المعرفة من قبل المستخدم" وتوفر لغة VB******
كغيرها من اللغات دوال خاصة معرفة مسبقا داخل اللغة وتعالج كثيرا من المهام ..
وفيما تبقى من هذا الدرس سأتطرق إلى الدوال الخاصة بالتاريخ وفي الدرس القادم –
بإذن الله- سأتابع الموضوع للحديث عن الدوال النصية والتي تعتبر مما يميز لغات
السكريبت،أيضا سأقوم بتوضيح بعض الدوال الأخرى التي لا تندرج تحت أي من الأمرين
السابقين ... جدير بالذكر هنا أن انوه بأنني لن أتطرق لكافة ملابسات وملاحظات كل
دالة لأن ذلك يؤدي إلى إطالة الموضوع لكني (سأحاول) ترجمة دليل مايكروسوفت لأوامر
لغة VB****** متى ما كانت الظروف مواتية...


دوال الوقت والتاريخ في لغة VB******..

 الدالة Date

الوظيفة:

تعيد التاريخ الحالي

مثال:



كود:

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

msgbox Date

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



ملاحظة:

تستخدم الدالة Time لإيجاد الوقت الحالي على نفس نهج الدالة السابقة أيضا نستخدم
الدالة Now لإيجاد التاريخ والوقت معا.


 الدالة DateAdd

الوظيفة:

جمع أو طرح مدة زمنية من وإلى تاريخ معين..

الصيغة العامة:


DateAdd(Interval, Number, Date)


الوسيطات:

interval : هذه الوسيطة تأخذ القيم التالية.. d الأيام، h الساعات، m الأشهر، n
الدقائق، q ربع العام، s الثواني، w يوم من الأسبوع، ww الأسبوع، y يوم من العام،
yyyy العام.

Number : مقدار الإضافة.

Date: التاريخ المراد الإضافة إليه.

مثال



كود:

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

'#لاحظ ضرورة وضع التاريخ بين نسختي العلامة
msgbox DateAdd("d",1,#01/01/98#) '02/01/98

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



 الدالة DateDiff

الوظيفة:

إيجاد الفرق بين تاريخين.

الصيغة العامة:


DateDiff (interval, date1, date2 [ ,
firstdayofweek [ , firstweekofyear ]] )




الوسيطات:

Interval: تشبه نفس الوسطية في الدالة DateAdd.

Date1: التاريخ الأول (المطروح)

Date2: التاريخ الثاني (المطروح منه)

Firstdayofweek: (وسيطة اختيارية)أول يوم في الأسبوع وتأخذ القيم من 1 إلى 7 حيث
يمثل vbSunday رقم 1 و vbMonday رقم 2 وهكذا..

firstweekofyear: (وسيطة اختيارية) وتأخذ القيم التالية

vbUseSystem لاستخدام إعدادات NLS API

vbFirstJan1 البدء عند الأسبوع الذي يحدث فيه 1 يناير

vbFirstFourDays البدء عند أول أسبوع يحوي الأيام الأربع الأقل

vbFirstFullWeek البدء عند الأسبوع الأول الكامل


مثال:


كود:

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

msgbox DateDiff("d",#01/01/98#,Date)

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



 الدالة DatePart

الوظيفة:

تعيد جزءا محددا من تاريخ معطى.

الصيغة العامة:


DatePart (interval, date [ , firstdayofweek [ ,
firstweekofyear ]] )



الوسيطات:

interval: تم التطرق لهذه الوسطية في الدالة DateAdd.

Date: التاريخ الذي سيعاد جزء منه.

Firstdayofweek: تم التطرق لهذه الوسطية في الدالة DateDiff.

Firstweekofyear: تم التطرق لهذه الوسطية في الدالة DateDiff.


مثال:



كود:

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

msgbox DatePart("d",#01/05/98#) ' 5

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





 الدالة DateSerial

الوظيفة:

تعيد تاريخا تسلسليا يوافق قيم يوم وشهر وسنة ممررة إليها كوسيطات.

الصيغة العامة:



DateSerial (year, month, day)


الوسيطات:

year: قيمة تمثل السنة بين (100و 9999).

month: قيمة تمثل الشهر.

Day: قيمة تمثل اليوم


مثال


كود:

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

msgbox DateSerial(1998,2,12) ' 12/02/98

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



ملاحظة:

تشبه الدالة TimeSerial الدالة السابقة في طريقة تعاملها ولكنها تختلف عنها في أنها
تتعامل مع الوقت.


 DateValue

الوظيفة:

إيجاد التاريخ المكافئ للقيمة الممررة..

الصيغة العامة:



DateValue (date)



الوسيطات:

Date: قيمة تمثل التاريخ..

مثال:


كود:

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

msgbox DateValue("يناير,99")


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





ملاحظة:

تشبه الدالة TimeValue الدالة السابقة في طريقة تعاملها ولكنها تختلف عنها في أنها
تتعامل مع الوقت.


 الدالة Day

الوظيفة:

تعيد رقم اليوم للتاريخ المحدد.

الصيغة العامة:


Day (date)



الوسيطات:

Date: قيمة تمثل التاريخ

مثال:


كود:

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

msgbox Day(Date)

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





ملاحظة:

تستخدم الدالتين Month و Year لإيجاد قيمة اليوم والسنة لتاريخ معين على نفس نهج
الدالة السابقة.


 الدالة Hour

الوظيفة:

تعيد رقم يمثل الساعة للزمن المحدد.

الصيغة العامة:


Hour( Time)


الوسيطات:

Time: قيمة تمثل الزمن.

مثال:


كود:

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

msgbox Hour(#05:01:10 Am#) '5

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



ملاحظة:

تستخدم الدالتين Minute و Second لإيجاد قيمة الدقائق والثواني لزمن معين بنفس نهج
الدالة السابقة.



 الدالة MonthName

الوظيفة:

تعيد الدالة قيمة تمثل اسم الشهر المكافئ للقيمة الممررة.

الصيغة العامة:


MonthName( month [,abbreviate])



الوسيطات:

month: رقم الشهر.

Abbreviate : (وسيطة اختيارية) تأخذ هذه الوسيطة قيمة منطقية تحدد هل يتم اختصار
اسم الشهر أم لا.


مثال:


كود:

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

msgbox MonthName(12) 'ديسمبر

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



ملاحظة:

تشبه الدالة WeekdayName الدالة السابقة -في المفهوم- وتختلف عنها في كونها تعيد
اسم اليوم من الأسبوع.



 الدالة WeekDay

الوظيفة:

تعيد رقما يمثل اليوم لتاريخ معين.

الصيغة العامة:


Weekday( date, [firstdayofweek])



الوسيطات:

date: قيمة تمثل التاريخ.

Firstdayofweek: تم التطرق لها في الدالة DateDiff.


مثال:


كود:

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

msgbox WeekDay(#01/01/99#) '6 الجمعة

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



 الدالة Timer

الوظيفة:

تعيد الوقت المنقضي منذ نصف الليل.


مثال:


كود:

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

Dim startTime,EndTime,SiteName,Prompt
Prompt ="ادخل العنوان التالي"& vbcrlf
msgbox "سيتم اختبار سرعتك في الكتابة...استعد"
startTime = Timer
SiteName = InputBox(Prompt & "www.c4arab.com")
EndTime= Timer
If SiteName = "www.c4arab.com" Then
Prompt = "قمت بكتابة 14 محرفا خلال "
msgbox Prompt & EndTime - startTime & " ثانية"
End If

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


ملاحظات عامة..

1. يمكن الخروج من الإجراءات قبل نهايتها باستخدام العبارة Exit Function للدوال و
Exit Sub للإجراءات الفرعية.

2. يمكن استخدام الدوال كإجراءات فرعية عند عدم الحاجة للقيمة التي تعيدها فمثلا
الدالة msgbox -قمنا بالتطرق لها في وقت سابق- والتي تستخدم كدالة على الشكل
التالي..



كود:


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

Dim Ret,Prompt
Prompt ="هل تريد تحويل اللون الخلفي للنافذة إلى الأسود؟"
Ret = msgbox(Prompt,vbYesNo)
If Ret = vbYes Then ********.bgColor = vbBlack

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



حيث أننا استعملنا القيمة المعادة لحاجتنا إليها.. ولكن عند عدم الحاجة إليها
تستطيع تجاهل القيمة واستخدام Msgbox كإجراء فرعي.



كود:

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

Dim Prompt
Prompt ="سيتم تحويل اللون الخلفي للنافذة إلى الأسود"
msgbox Prompt
********.bgColor = vbBlack

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



3. يمكن تطبيق مبدأ الاستدعاء التراجعي Recursion في لغة VB****** وهو المبادئ
المتقدمة بعض الشي في لغات البرمجة ويقصد به استدعاء الإجراء من داخل نفسه وهو قليل
الاستعمال في لغة VB******.. لاحظ المثال



كود:

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

'تكوين الإجراء الفرعي
Sub Myloop(Num,Txt)
If Num = 0 Then Exit Sub
********.write Txt & "< BR>"
Myloop Num - 1,txt
Exit Sub
End Sub
'عند الاستدعاء
Myloop 5,"www.roro44.com"
احمد سعيد
احمد سعيد
المدير العام
المدير العام

ذكر عدد الرسائل : 350
العمر : 37
الموقع : https://ahmedsaid.yoo7.com
العمل/الترفيه : الرياضة
المزاج : تمام
تاريخ التسجيل : 02/04/2008

https://ahmedsaid.yoo7.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى