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

الطريقة Main

بدأه محمد سامر أبو سلو في 17 يوليو 2008 · 1 رد · 1,292 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

النوع Module

يدعم فيجول ستوديو وحدة بناء برمجية تدعى Module والتي يتم التصريح عنها باستخدام الكلمة المحجوزة Module فعندما تقوم بإنشاء تطبيق كونسول مثلا يتم إنشاء ملف vb من أجلك يحتوي على الكود التالي:

Module Module1
	Sub Main()
	End Sub
End Module

وفي الواقع فإن الـ Module هي عبارة عن فئة Class مع بعض الاختلافات الواضحة فأي إجراء أو وظيفة عامة Public يتم تعريفها ضمن الـ Module تكون عنصر مشترك Shared Member يمكن الوصول إليه مباشرة من جميع أنحاء التطبيق وبذلك فأنت لست مضطرا لكتابة اسم الـ Module عندما تريد استخدام عناصرها

Module Module1
	 Sub Main()
		  ' Show banner.
		  DisplayBanner()
		  ' Get user's name and say howdy.
		  GreetUser()
	 End Sub

	 Sub DisplayBanner()
		  ' Get the current color of the console text.
		  Dim currColor As ConsoleColor = Console.ForegroundColor
		  ' Set text color to yellow.
		  Console.ForegroundColor = ConsoleColor.Yellow
		  Console.WriteLine("******* Welcome to FunWithModules *******")
		  Console.WriteLine("This simple program illustrates the role")
		  Console.WriteLine("of the Module type.")
		  Console.WriteLine("*****************************************")
		  ' Reset to previous color of your console text.
		  Console.ForegroundColor = currColor
		  Console.WriteLine()
	 End Sub

	 Sub GreetUser()
		  Dim userName As String
		  Console.Write("Please enter your name: ")
		  userName = Console.ReadLine()
		  Console.WriteLine("Hello there {0}. Nice to meet ya.", userName)
	 End Sub
End Module

لاحظ في المثال السابق أن الطريقة Main يمكنها استدعاء الطريقة GreetUser لأنها معرفة ضمن نفس الـ Module ولست مضطرا لكتابة اسم الـ Module كبادئة عند استدعاء عنصر فيها. وفي التطبيق الذي يحتوي على أكثر من Module أنت لست مضطرا لكتابة اسم أي Module كبادئة عند استدعاء العناصر المحتواة في تلك الـ Modules إلا إذا كانت هناك عدة طرائق في أكثر من Module تحمل نفس الاسم.

كما أن الـ Module لا يمكن أن يتم استخدامها كنوع عند التصريح عن متغير باستخدام الكلمة المحجوزة New لأنها غير قابلة للإنشاء Non Creatable وإن استخدمت كودا شبيها بالكود التالي فإن المترجم سيعطيك خطأ

' Nope! Error, can't allocated modules!
Dim m as New Module1()

كما يمكن للـ Module أن تحتوي على عناصر أخرى إضافة للوظائف والإجراءات كحقول البيانات مثلا كما في المثال

Module MyModule
	Public UserName As String

	Sub GreetUser()
		Console.WriteLine("Hello, {0}.", UserName)
	End Sub

End Module

وكأي عنصر آخر ضمن Module يمكننا استخدام الحقل UserName مباشرة

	Sub Main()
		...
		' Set user's name and call second form of GreetUser().
		UserName = "Fred"
		MyModule.GreetUser()
		...
	End Sub

الطريقة Main

أي تطبيق Vb2008 يجب أن يحتوي على نوع يحدد الطريقة Main التي تشكل نقطة الدخول للتطبيق وهي تكون موجودة عادة ضمن Module وهي طريقة مشتركة دوما Shared method مع انه يمكن أن تتواجد ضمن فئة Class عندها يجب عليك التصريح عنها باستخدام الكلمة المحجوزة Shared. وكمثال على ذلك أنشئ تطبيق كونسول جديد واستبدل كامل الكود المولد بالكود التالي

Class Program

	' Unlike Modules, members in a class are not
	' automatically shared. Thus, we must declare Main()
	' with the Shared keyword.
	Shared Sub Main()

	End Sub

End Class

فإن حاولت تشغيل البرنامج عند هذه النقطة فسوف تتلقى خطأ بأنه لا يمكن إيجاد الطريقة Main ولحل هذه المشكلة يجب عليك تحديد الفئة Program كعنصر بدء للتطبيق وذلك في Startup Object من الصفحة Application في خصائص MyProject

معالجة محددات سطر الأوامر

إحدى المهام الرئيسية للطريقة Main هي معالجة محددات سطر الأوامر التي يتم تمريرها للتطبيق فمثلا مترجم سطر الأوامر vbc.exe يمتلك العديد من الخيارات مثل target و out وغيرها فعندما تريد إنشاء طريقة Main تقوم بمعالجة محددات سطر الأوامر الممررة للتطبيق ستجد أنه لديك عدة طرق للقيام بذلك.

أول طريقة يمكننا استخدامها لهذا الغرض هو استخدام الطريقة GetCommandLineArgs المعرفة ضمن المجال System.Envitronment التي تعيد مصفوفة من العناصر من النوع String وأول عنصر في هذه المصفوفة هو اسم الملف التنفيذي للتطبيق بينما تشكل باقي عناصر المصفوفة محددات سطر الأوامر الممررة للتطبيق

Class Program

	Shared Sub Main()
		Console.WriteLine("***** Fun with Main() *****")
		' Get command-line args.
		Dim args As String() = Environment.GetCommandLineArgs()
		Dim s As String

		For Each s In args
			Console.WriteLine("Arg: {0}", s)
		Next
	End Sub

End Class

وإن لم ترغب باستخدام الطريقة السابقة يمكنك تحديد مصفوفة String كدخل للطريقة Main كما في الكود

Shared Sub Main(ByVal args As String())
	Console.WriteLine("***** Fun with Main() *****")
	' Get command-line args.
	Dim s As String
	For Each s In args
		Console.WriteLine("Arg: {0}", s)
	Next
End Sub

استخدام Main كوظيفة وليست إجراء

يمكننا أيضا تعريف Main كوظيفة تعيد قيمة من النوع Integer الأمر الذي يعد من الموروثات من لغة C حيث يعيد البرنامج القيمة 0 عند انتهائه بصورة طبيعية أو يمكن إعادة أي قيمة أخرى تمثل خرجا ما أو رقما للخطأ الذي أدى إلى انتهاء البرنامج كما في الكود

Shared Function Main(ByVal args As String()) As Integer
	Console.WriteLine("***** Fun with Main() *****")
	Dim s As String
	For Each s In args
		Console.WriteLine("Arg: {0}", s)
	Next
	' Return a value to the OS.
	Return 0
End Function

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

تمرير محددات سطر الأوامر من داخل بيئة التطوير

يمكننا فيجول ستوديو من تمرير محددات سطر الأوامر للتطبيق عند اختباره من داخل بيئة التطوير الأمر الذي يسهل علينا عملية الاختبار لما يوفر علينا من عناء تمرير تلك المحددات يدويا حيث يمكننا تمريرها أثناء الاختبار بإدخالها في مربع Command Line Arguments في الصفحة Debug من خصائص MyProject

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

جزاك الله خير أخ محمد على الدرس المهم والممتع .. خصوصا جزئية معالجة محددات سطر الأوامر ..

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

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