ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

ثوابت، توابع و رویه ها

 
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET
View previous topic :: View next topic  
Author Message
unknown
مدير بخش ويژوال بيسيك
مدير بخش ويژوال بيسيك


Joined: 05 Dec 2004
Posts: 439
Location: Tehran

PostPosted: Thu Feb 17, 2005 2:39 pm    Post subject: ثوابت، توابع و رویه ها Reply with quote

ثوابت

ثابت خانه ای از حافظه است که مقدارآن در طول برنامه ثابت می ماند و نمی توان مقدارآن را تغییر داد. ثوابت با کلمه کلیدی زیر تعریف می شوند:
Const

که نحوه کاربرد آن به صورت زیر می باشد:

[
Private/Public] Const ConstantName [As DataType] = Value


همان طور که می دانید کلمات داخل کروشه به معنی اختیاری بودن آنهاست.
مثال:

Const Pi = 3.14
Private Const WelMsg As String = "Hi"
Public Const T_1 = &HF


تذکرات:
1. اگر قبل از کلمه کلیدی Const چیزی نوشته نشده باشد مقدار پیش فرض Private می باشد.
2. اگر As DataType ذکر نشود نوع ثابت Variant خواهد بود.
3. یک ثابت عمومی (Public Const فقط می تواند در یک ماجول تعریف شود.)
4. &H شناسه ای است که نشان دهنده مبنای هگزا دسیمال می باشد. یعنی عددی که بعد از آن می آید در مبنای 16 می باشد.

یک نکته فراموش شده در تعریف متغییرها:

مدت زمانی را که یک متغییر مقدار فعلی خود را حفظ می کند مدت عمر متغییر گویند. متغییر هایی که در بخش Declaration تعریف می شوند طول عمری برابر فرم دارند. ( محلی که Option Explicit را نوشتید به یاد بیاورید!) یعنی با ایجاد فرم ، ایجاد می شوند و با ازبین رفتن فرم نابود می شوند. یعنی حافظه را به سیستم باز می گردانند.اما متغییر هایی که داخل یک تابع یا رویه تعریف می شوندطول عمری برابر با تابع یا رویه دارند. یعنی با از بین رفتن تابع از بین می روند.
اما اگر متغییری را با کلمه کلیدی Static تعریف کنیم دیگر با از بین رفتن تابع یا رویه مقدار متغییر از بین نمی رود. Static به کامپایلر می گوید که ما این متغییر را چقدر دوست داریم و نمی خواهیم مرگ آن را ببینیم. طول عمر Static برابر فرم می باشد. عجله نکنید! بعدا مثال های جالبی براتون می نویسم. فقط تا همین جا بدونید که Static هم برای تعریف متغییر به کار می رود.
طرز تعریف متغییر استاتیک:

Static StaticVarName [As DataType]


برنا مه نویسی ماجولار:

برای نوشتن برنامه های طولانی و سنگین باید آنها را به بخش های کوچکتری تقسیم بندی کرد به طوری که هر بخش وظیفه خاصی دارد و کار خاصی را انجام می دهد. به این کار برنا مه نویسی ماجولار گفته می شود. به هر بخش که کار خاصی را در برنامه انجام می دهد زیر برنامه می گویند.

مزایای برنا مه نویسی ماجولار:

1. خوانایی برنامه بالا می رود.
2. کار گروهی را امکان پذیر می کند.
3. از زیر برنامه های از قبل نوشته شده نیز می توان استفاده کرد.
4. رفع اشکال آسانتر می شود.
5. سرعت برنامه نویسی بالا می رود و به علت عدم تکرار حجم برنامه ها کم می شود.

انواع زیر برنامه ها:

1. روال (Sub)
2. تابع ( Function )

روال می تواند چندین مقدار را به برنامه فراخوان باز گرداند ولی تابع فقط می تواند یک خروجی داشته باشد. هر دوی روال و تابع می توانند مقداری را باز نگردانند و فقط عملیات خودشان را انجام دهند مثل چاپ یک مقدار. هر دوی روال و تابع می توانند هیچ مقداری را به عنوان آرگومان نگیرند.

توابع:
طرز تعریف:

[Private/Public] Function FuncName([اسامی آرگومان ها و نوع آنها]) [As DtataType]
   لیست دستورات vb
End Function


تذکرات:
1. نامگذاری توابع همانند متغییرهاست.
2. [As DtataType] نوع خروجی تابع را مشخص می کند. اگر نوع را مشخص نکنید نوع خروجی برابر نوع متغییری می شود که در اسم تابع قرار می گیرد.
3. آرگومان مقادیری است که هنگام فراخوانی برنامه فراخوان به تابع منتقل می کند.
4. آرگومان ها با کاما از هم جدا می شوند (به مثال توجه کنید)
5. مقدار تابع در اسم آن قرار می گیرد.

FuncName = مقدار


6. فراخوانی توابع:
(اسامی آرگومانها در صورت وجود)اسم تابع = متغییر

مقدار محاسبه شده تابع در این متغییر قرار می گیرد که نوع آن باید با نوع خروجی تابع یکی باشد.
7. تعداد آرگومان ها و نوع آنها باید حتما با تعداد پارامتر ها و نوع آنها برابر باشد.

مثال:

Private Function Fact(n As Integer) As Long
.
.
.
End Function

تابعی به نام Fact تعریف کردیم که فقط یک مقدار را دریافت می کند که نوع آن صحیح می باشد. خروجی این تابع از نوع Long می باشد.
این تابع فاکتوریل عدد n ورودی را حساب کرده و حاصل را در Fact قرار می دهد.

Public Function GetComputerName()
.
.
.
End Function

این تابع هیچ ورودی ندارد و فقط اسم کامپیوتر را در اسمش قرار می دهد.

Function Arr(x1 As Integer, x2 As String, status As Boolean) As Boolean
.
.
.
End Function

این تابع چند آرگومان دارد که نوع های آنها نیز با هم متفاوت است. خروجی این تابع از نوع منطقی است.
فراخوانی توابع بالا:

Dim Ret As Long
Ret = Fact (5)

Dim Name As String
Name = GetComputerName

Dim x As Boolean
x = Arr(m, "Amir", False)

عجله نکنید! وقتی دستورات vb کامل گفته شد مثال های توپی براتون می زنم.

رویه ها:
طرز تعریف:

[Private/Public] Sub SubName([اسامی آرگومان ها و نوع آنها])
   لیست دستورات vb
End Sub

تذکرات:
1. نامگذاری رویه ها نیز همانند متغییرهاست.
2. رویه ممکن است یک یا چند کار را انجام دهد ولی برعکس تابع چیزی در نام آن قرار نمی گیرد.
3. از توابع می توان درمحاسبات عددی مثل یک متغییر استفاده کرد ولی رویه چنین نیست.
4. رویه ها به دو صورت فراخوانی می شوند
الف) با استفاده از نام رویه ها:
مثلا اگر رویه زیر تعریف شده باشد
Sub Show_results()
.
.
.
End Sub

فراخوانی آن به این صورت می باشد:
Show_results

و یا اگر رویه زیر تعریف شده باشد

Sub GetInfo1(Name As String, StNo As Integer)
.
.
.
End Sub

فراخوانی آن به این صورت می باشد:
GetInfo1 "Amir", 2546

نمی توان در این روش از پرانتز در فراخوانی استفاده کرد.

ب) با استفاده از دستور Call:
فراخوانی رویه های بالا با دستور call به صورت زیر است

Call Show_results
Call GetInfo1("Amir", 2546)

اگر از call استفاده می کنید پرانتز فراموش نشود.

5. بقیه نکات رویه همانند نکات توابع می باشد.

انواع پارامتر ها:
پارامتر های رویه ها و توابع دو گونه اند:
الف) مقدار ( ByVal )
ب) ارجاع ( ByRef)

پارامتر های مقدار فقط مقادیر را به زیر برنامه تحویل می دهند و اگر مقدار آن پارامتر در زیر برنامه تغییر یابد مقادیر جدید در آن پارامتر کپی نمی شود.
ولی در پارامتر های ارجاع تبادل اطلاعات دو طرفه است یعنی اگر مقدار آن پارامتر در زیر برنامه تغییر یابد از این به بعد در برنامه اصلی نیز مقادیرجدید مورد استفاده قرار می گیرند.
به علت سنگینی این مبحث و کاربرد کم آن در برنامه های ساده از توضیح بیشتر پرهیز می شود بنابر این هر جا لازم شد به توضیح بیشترمی پردازم. فقط طرز تعریف را بدانید.

مثال:

Sub Pro(ByVal a As Integer, ByRef b As Integer)
.
.
.
End Sub

متغییر a از نوع مقدار و متغییر b از نوع ارجاع تعریف شده اند.

از امکانات جالب vb استفاده از آرگومان های اختیاری در برنامه است.
یعنی می توان هنگام فراخوانی به آنها مقدار نداد ، در این صورت مقدار آن آرگومان برابر مقادیر پیش فرض نوعشان می باشد.
برای تعریف یک آرگومان به صورت اختیاری از کلمه کلیدی Optional در پشت آن استفاده می شود.
مثال:

Sub Pro(Optional a As Boolean)
.
.
.
End Sub

فراخوانی رویه بالا:

Call Pro(True)
یا
Call Pro

بنابراین مقدار a در فراخوانی دوم برابر False خواهد بود.

هنگام تعریف آرگومان اختیاری می توان به آن مقدار اولیه نیز داد بنابراین اگر هنگام فراخوانی به آن مقدار ندهیم ، مقدارش برابر همان مقدار اولیه ما خواهد بود.
مثال:

Sub Pro1(Optional Num As Integer = 5)
.
.
.
End Sub


مختصری درباره زیر برنامه های بازگشتی:
زیر برنامه های بازگشتی زیر برنامه هایی هستند که به نحوی خودشان ، خودشان را فراخوانی می کنند.
دو نوع زیر برنامه بازگشتی داریم:
1. مستقیم
که در این زیر برنامه نام خود تابع درون خودش آورده می شود (فراخوانی می شود)
مثال:

Function Fact(n As Integer)
.
.
.
Fact = Fact(n - 1)
.
.
.
End Function
2. غیر مستقیم

فرض کنید زیر برنامه a زیر برنامه b را فراخوانی کند و در زیر برنامه b هم زیر برنامه a فراخوانی شده باشد.
این هم نوعی بازگشتی است...
مثال:

Function Proc1 (m As Integer)
.
.
.
Proc1 = Proc2 (m)
.
.
.
End Function

Function Proc2 (n As Integer)
.
.
.
Proc2 = Proc1 (n-1)
.
.
.
End Function

البته در هر دو روش باید شرطی برای خاتمه کار در نظر گرفته شود وگرنه...


مولف:
امیر مرادآبادی (amirmoradabadi@yahoo.com)
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum