متغیر چیست ؟
متغیرها اشیائی هستند که مقادیر را در خود نگه می دارند و همانطور که از نامش معلوم است مقدار آن می تواند تغییر کند
بدین معنی که متغیرها داده های ما را در خود ذخیره می کنند و ما در مواقع لزوم مقادیر آنها را بازیابی می کنیم و مورد استفاده قرار می دهیم .
متغیرها چند نوع است ؟
متغیرها انواع مختلف دارند و کاملا مشهود است که هر نوع متغیر مصرف بخصوصی دارد . گاهی اوقات می توان بعضی متغیر ها را به جای همدیگر مورد استفاده قرار داد اما این کار کاملا اشتباه است و با اصول برنامه نویسی تطابق ندارد .
چندین متغیر پر کاربرد وجود دارد که انها را به شما معرفی می کنم .
متغیرهای عددی :
Single : اعداد را در خود ذخیره می کند و می تواند مقادیر عددی از -3.402823E+38 تا 3.402823E+38 را در خود ذخیره کند
Integer : مقادیر عددی بئون نقطه اعشار که از -32768 تا 32767 ادامه دارند
Double : مقادیر عددی که می توانند از -1.79769313486232E+308 تا -1.79769313486232E+308 تغییر یابد . نوع داده ای Double اغلب به عنوان دقت مضاعف شناخته می شود .
String : مقادیر رشته ای را که شامل هر نوع کاراکتر باشد قبول می کند . از جمله حروف . اعداد و کاراکترهای نشانه مانند !@#$%
Currency : داده هايي كه مقادير پولي از -922.337.203.685.477.5808 تا -922.337.203.685.477.5808 را مي توانند نگه دارند . چهار رقم اعشاري امكان گرد كردن مناسب داده ها را فراهم مي آوردند . ويژوال بيسيك مطابق با تنظيمات بين المللي ويندوز عمل مي كند و مقادير پولي را با نيازهاي كشور شما مطابق مي سازد . وقتي كه مقادير Currency را وارد مي كنيد هيچگاه از علامت دلار را همراه با آنها وارد نشازيد . ( قابل توجه دانش آموزاني كه مي خواهند برنامه هاي حسابداري بنويسند )
Boolean : نوع داده اي كه تنها يكي از دو مقادير درست يا غلط را مي گيرد كه اين دو واژه از واژه هاي رزرو شده در ويژوال بيسيك مي باشند . درست = True و غلط = False .
Date : متغيري با قالب بندي تاريخ ايجاد مي كند و مي تواند تاريخ را در خود نگه دارد . تاريخ هر كشور به صورت قالب خاصي استفاده مي شود . مثلا در ايران متداول است كه تاريخ را اينگونه بنويسيم : 25/11/1384 اما در برخي كشورها اينگونه رايج است : 2006/25/11 و يا به گونه هاي خاص . در واقع اينكه سال اول نوشته شود يا ماه يا روز خود مسئله اي است كه مي توان انها را در متغيراز نوع Date اعمال كرد .
Long : مقادير صحيح با محدوده اي بيش از مقادير داده اي Integer . مقادير داده اي Long از -2.147.483.648 تا -2.147.483.648 مي توانند تغيير كنند . مقادير داده اي Long فضاي حافظه بيشتري نسبت به مقادير Integer مصرف مي كنند و كمتر كارآ هستند . نوع داده اي Long اغلب صحيح طويل خوانده ميشود .
خب . تا اينجا به اندازه كافي با انواع متغيرها آشنا شديد . اما اينجا سوالي پيش مي آيد .
چگونه بايد از متغيرها استفاده كنيم ؟
براي استفاده از متغير ها بايد 2 مرحله را پشت سر بگذاريم
1 ـ متغير را تعريف كنيم
2 ـ متغير را مقدار دهي كينم
مرحله اول كاملا ضروري مي باشد اما مرحله دوم نه . ممكن است شما متغييري را تعريف كنيد اما مقدار دهي نكنيد و مقدار دهي آن را به قسمت ديگري از برنامه واگذار كنيد .
مرحله اول ( تعريف يك متغير ) :
براي اينكه متغييري را به ويژوال بيسيك معرفي كنيم بايد از فرمان Dim استفاده كنيم نام متغير و نوع متغير همراه با فرمان Dim مي آيند و متغير تعريف مي شود . به صورت زير
نوع متغير As نام تغير Dim
مثال :
Dim A As Single
Dim B As String
در فرامين بالا متغيري از نوع داده اي Single با نام A ايجاد كرديم و بعد متغيري از نوع رشته اي با نام B ايجاد كرديم . به همين سادگي
مرحله دوم ( مقداري دهي متغير ) :
حالا مي خواهيم متغيرهاي ايجاد شده را مقدار دهي كنيم . مقدار دهي با علامت = انجام مي شود . بدين صورت :
A = 10
B = "Visual Basic"
خيلي ساده است . به دو علامت كوتيشن در اطراف جمله Visual Basic دقت كنيد . براي اينكه يك متغير رشته اي را مقدار دهي كنيم بايد مقدار متغير را داخل دو علامت كوتيشن قرار دهيم وگرنه ويژوال بيسيك به ما ايراد مي گيرد و برنامه دچار مشكل مي شود . اما براي مقدار دهي ساير انواع متغير ها نبايد از علامت كوتيشن استفاده كرد .
B = "" يك رشته پوچ يا خالي مي باشد . يعني مقداري در آن ذخيره نشده است .
زیربرنامه ها در ویژوال بیسیک
اگر به دستورات هر برنامه ای که در VB6 نوشته شده است نظر بیندازید متوجه بلوک هایی از کد می شوید که بین دو خط تیره قرار دارند. این بلوک ها واحدهای محیط برنامه سازی ویژوال بیسیک هستند، که به هر کدام یک زیربرنامه می گوییم. هر زیربرنامه مسئول کنترل بخشی از برنامه است.
توجه داشته یاشیدکه برنامه نویس هنگام برنامه نویسی نمی تواند ترتیب اجرای زیربرنامه ها را پیش بینی کند، ولی در هر زیربرنامه اجرا از سطر اول شروع و تا سطر آخر زیربرنامه ادامه دارد.
زیربرنامه ها به دو نوع زیر تقسیم می شوند:
در برخی از کتابها به توابع هم روال گفته می شود، ولی در این مقاله فقط به زیربرنامه های از نوع Sub روال اطلاق خواهد شد.
تابع:
برای ایجاد یک تابع از الگوی زیر استفاده می کنیم:
Public | Private Function funName ( تعریف پارامترها ) As نوع داده خروجی تابع
function body
End Function
با کلمه کلیدی Public می توانید تابع را در هر کجای برنامه فرا بخوانید؛ ولی کلمه کلیدی Private فراخوانی تابع را محدود به فرم یا ماژولی می کند که تابع در آن قرار دارد. کلمه Function می گوید که نوع زیربرنامه یک تابع است.
پارامترها دروازه ورود اطلاعات به زیربرنامه می باشند. اگر می خواهید تابع یک خروجی تولید کند باید نوع آن را مطابق الگو تعیین کنید. در این حالت می شود تابع را درون بدنه تعریفش یک متغیر نیز فرض کرد.
یک تابع برای این ایجاد می شود که با دریافت داده های خاص (آرگومان ها) از روتین فراخواننده و انتقال آنها به پارامترها، آنها را پردازش کرده و نتیجه مطلوب را تحویل دهد. این نتیجه می تواند یک خروجی از نوع داده باشد - مثلا یک عدد long -، می تواند خروجی قابل مشاهده روی نمایشگر باشد، می تواند دستکاری متغیرهای عمومی، . . .
مثال:
Public Function Power( ByVal m as integer, ByVal n as long ) As long
Power = m ^ n
End Function
تابع Power تعریف شده در کد فوق دو عدد صحیح را دریافت کرده، اولی را به توان دومی رسانده و حاصل را به عنوان نتیجه باز می گرداند. همانگونه که دیده می شود برای تحویل دادن نتیجه تابع آن نتیجه را با دستور انتساب به نام تابع نسبت می دهیم.
روال:
Subها معمولا توسط Visual Basic ایجاد می شوند و کنترل رویداد های برنامه را بر عهده دارند. ولی برنامه نویس هم می تواند در موقع لزوم اقدام به ایجاد آن نماید. اگرچه به ندرت لازم خواهد شد.
Public | Private Sub subName ( تعریفپارامترها )
sub body
End Sub
فرق اصلی Sub و Function در این است که تابع می تواند به طور صریح یک خروجی عددی و یا غیره را تحویل ما بدهد. روالها به غیر از این ویژگی سایر کارکردهای توابع را دارا می باشند.
جزئیات تعریف پارامترها:
تابع زیر را که برای تعیین اول بودن یک عدد نوشته شده در نظر بگیرید:
Public Function IsPrime ( ByVal n As Long , Optional i As Long = 2 ) As Boolean
Dim Sn, c As Double
Sn = Sqr ( n )
Do
c = n / i
i = i + 1
Loop Until c = int ( c ) Or i > Sn
IsPrime = IIF ( i > Sn , True , False) ' if i > Sn : n is prime
End Function
.
.
.
a = 13
b = 101
key1 = IsPrime ( a )
key2 = IsPrime ( b , 7 )
دستور تعیین Key1 را در نظر بگیرید. کلمه کلیدی ByVal در تعریف تابع IsPrime باعث می شود که مقدار آرگومان ۱۳ در پارامتر n کپی شود. در حقیقت دو متغیر مستقل از هم در حافظه کامپیوتر بوجود می آید. به عبارت ساده تر تغییر در n سبب تفییر a نمی شود. اگر این کلمه (ByVal) نمی بود یا کلمه ByRef به جای آن می نشست وضع کاملا عکس می شد. یعنی هر تغییری ذر مقدار متغیر n باعث تغییر مقدار متغیر a نیز می شد.
کلمه کلیدی Optional قبل از تعریف i بدین معنی است که برنامه نویس مختار است مقداری برای i بفرستد یا نفرستد! در حالتی که برنامه نویس مقداری را برای i ارسال نکند با توجه به کد فوق مقدار پیش فرض 2 در i قرار خواهد گرفت.
ولی بدون دیدن تابع از کجا می توان فهمید که یک پارامتر Optional است؟ به تصویر زیر توجه کنید:
قابلیت بازگشت:
منظور از قابلیت بازگشت فرآیند تعریف یک رویه بر حسب خودش می باشد.
در VB6 همانند اکثر زبانهای دیگر توابع می توانند همدیگر را و بخصوص خودشان را فراخوانی کنند. تابعی که خود را فرا بخواند تابع بازگشتی نامیده می شود. روش بازگشتی یکی از مهمترین و شفاف ترین روشها برای حل برخی مسائل است. بطور مثال اگر تابع ریاضی 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
تابع بالا را می توانید به شکل زیر نیز باز نویسی کنید:
Public Function Fibo ( ByVal n As Long ) As Long
If n = 1 or n = 2 Then Fibo = 1 : Exit Function
Fibo = Fibo ( n - 1 ) + Fibo ( n - 2 )
End Function
نکته آموزشی: بد نیست بدانید که نسبت دو جمله متوالی از این سری برای n های به قدر کافی بزرگ به عدد طلائی (تقریبا 1.618) میل می کند.