زیر برنامه در vb.net
برای روشن شدن موضوع ابتدا به چند تعریف می پردازیم . زیربرنامه چیست : برنامه ایست برای حل قسمتی از یک مسئله که ما می توانیم هرجا که بخواهیم در برنامه از آن استفاده کنیم یا در اختیار دیگر برنامه نویسان قرار دهیم
برنامه فرخوان چیست؟ برنامه اصلی است که زیربرنامه را اجرا می کند یا در اصطلاح صدا می زند. دستوری که در برنامه فراخوان نوشته می شود و زیر برنامه را صدا می زند را دستور فراخوانی می گویند.برای نوشتن این دستور ما باید نام زیر برنامه و آرگومانهای ورودی و خروجی آن را جلوی نام زیر برنامه در برنامه فراخوان قرار دهیم
زیربرنامه ها به دو نوع زیر تقسیم می شوند: Sub یا روال Function یا تابع در برخی از کتابها به توابع هم روال گفته می شود.
برای تعریف زیربرنامه ها از دو کلمه کلیدی publicوprivate استفاده می شود. Public برای تعریف زیر برنامه هایی مورد استفاده قرار می گیرد که در کل برنامه قابل دسترسی باشند در واقع عمومی هستند ولی private ها در محدوده ای که تعریف شده اند قابل دسترسی هستند در واقع خصوصی هستند
روال یا sub: Subها معمولا توسط Vb.net ایجاد می شوند و کنترل رویداد های برنامه را بر عهده دارند. ولی برنامه نویس هم می تواند در موقع لزوم اقدام به ایجاد آن نماید. اگرچه به ندرت لازم خواهد شد. فرم کلی در اسلاید بعد
Public | Private Sub نام زیر روال ( تعریف پارامترها ) دستورات زیر روال End Sub مثال :زیر روالی بنویسید که اعداد زوج بین 1 تا 100 را بدست آورد public sub zog() dim I a integer for i=2 to 100 step 2 listbox1.items.add (i) next I end sub برای اجر این زیر روال کافیست آن را صدا بزنیم برای این کار در رویدادکلیک دکمه فرمان بنویسیم call zog()
تابع: برای ایجاد یک تابع از الگوی زیر استفاده می کنیم: Public | Private Function ( parametr) دستورات تابع End Function با کلمه کلیدی Public می توانید تابع را در هر کجای برنامه فرا بخوانید؛ ولی کلمه کلیدی Private فراخوانی تابع را محدود به فرم یا ماژولی می کند که تابع در آن قرار دارد. کلمه Function می گوید که نوع زیربرنامه یک تابع است.
تفاوت sub با function زیر روال یا sub میتواند چندین مقدار یا هیچ مقدار را به برنامه فراخوان برگرداند ولی تابع function حداکثر یک مقدار را به برنامه فراخوان بر می گرداند
Parametr چیست: پارامترها دروازه ورود اطلاعات به زیربرنامه می باشند. اگر می خواهید تابع یک خروجی تولید کند باید نوع آن را مطابق الگو تعیین کنید. در این حالت می شود تابع را درون بدنه تعریفش یک متغیر نیز فرض کرد. یک تابع برای این ایجاد می شود که با دریافت داده های خاص (آرگومان ها) از روتین فراخواننده و انتقال آنها به پارامترها، آنها را پردازش کرده و نتیجه مطلوب را تحویل دهد. این نتیجه می تواند یک خروجی از نوع داده باشد – مثلا یک عدد long -، می تواند خروجی قابل مشاهده روی نمایشگر باشد، می تواند دستکاری متغیرهای عمومی، . . .
این مقدار که به برنامه اصلی باز گردانده می شود درون نام تابع ذخیره می شود در اینجا تابعی می نویسیم که 2 عدد را در یافت کند و عدد بزرگتر با بازگرداند Function Max(ByVal x As Integer, ByVal y As Integer) If x > y Then Return x Else Return y End If End Function
این روال دارای 2 متغیر x و y از نوع عدد است پس هنگام فراخوانی باید 2 عدد را در داخل پرانتز جلوی آن بنویسیم به صورت زیر : Max(10,15) حال 10 درون x و 15 درون y ریخته میشود کلمه Return مقداری را که جلوی خود دارد درون نام روال میریزد پس در اینصورت Return x یعنی Max=x در روال داریم : اگر x بزرگتر از y بود : x را درون نام روال بریز در غیر اینصورت y را درون نام روال بریز
بعد از فراخوانی این روال عدد بزرگتر درون نام روال ریخته شده و ما می توانیم از آن استفاده کنیم به این صورت : TextBox1.Text = CStr(Max(10, 12))
قابلیت بازگشت: منظور از قابلیت بازگشت فرآیند تعریف یک رویه بر حسب خودش می باشد.
در Vb.net همانند اکثر زبانهای دیگر توابع می توانند همدیگر را و بخصوص خودشان را فراخوانی کنند. تابعی که خود را فرا بخواند تابع بازگشتی نامیده می شود. روش بازگشتی یکی از مهمترین و شفاف ترین روشها برای حل برخی مسائل است. بطور مثال اگر تابع ریاضی y = fact ( n ) فاکتوریل را محاسبه کند می توان آن را بر حسب خودش به این صورت نوشت:
y = n * fact ( n – 1) if n > 1 y = 1 if n = 1 مرحله بالا مهمترین مرحله در حل یک مساله به روش بازگشتی است. در ویژوال بیسیک برای طراحی تابع بالا می توان نوشت:اسلاید بعد
Public Function fact ( ByVal n as Long ) As Long If n = 1 then fact = 1 : Exit Function fact = n * fact ( n – 1 ) End Function
هر بار که تابعی خودش را فرا می خواند فضای مورد نیاز متغیرهای محلی جدید و پارامترها در پشته تخصیص می یابد و قسمت اجرایی تابع با متغیرهای جدید از ابتدا اجرا می شود. با پایان رسیدن نتیجه هر عبارت فراخوانی، متغیرهای محلی قدیمی و پارامترها از روی پشته برداشته می شوند و اجرا از نقطه آغاز فراخوانی در تابع ادامه می یابد. اصطلاحا گفته می شود که تابع بازگشتی حرکت تلسکوپی رو به جلو و عقب دارد
اگر تابع fact را با n=3 اجرا نمایید داریم: با این حساب در تابع بازگشتی باید از if استفاده کرد، زیرا فراخوانی تابع بوسیله خود باید در جایی قطع شود، در غیر این صورت با خطای سر ریز پشته مواجه خواهید شد.
به عنوان مثالی دیگر دنباله فیبوناچی رو در نظر بگیرید. این دنباله کاربردهای زیادی در صنعت و رشته های مهندسی دارد و به صورت زیر تعریف می شود: F ( n ) = 1 If n = 1 or n = 2 F ( n ) = F ( n – 1 ) + F ( n – 2 ) If n > 2
پیاده سازی این دنباله در محیط ویژوال بیسیک به صورت زیر است Public Function Fibo ( ByVal n As Long ) As Long if n = 1 or n = 2 Then Fibo = 1 Else Fibo = Fibo ( n – 1 ) + Fibo ( n – 2 ) End If End Function