PDA

View Full Version : معرفی دستورات DefStr، DefLng، DefVar، DefBool



IranVB
جمعه 09 اردیبهشت 1390, 01:59 صبح
سلام به همگی دوستان
همونطور که داخل عنوان تاپیک هم معمول هست، کسی از دوستان میتوانند به من کمک کنند و توابع زیر را به بنده معرفی کنن و بگویند که چه استفاده ای دارند، آخه هرچی فکر میکنم به جایی نمیرسم،

DefStr
DefLng
DefVar
DefBool

مثلا در جاهایی از کدهای برنامه نویسی میبینم این توابع را بصورت زیر در ابتدای کدهای ماژول نوشته اند:
DefStr S
DefLng H-I, L, N
DefVar V
DefBool B

خیلی ممنون میشوم اگر دوستان به من کمک کنند http://barnamenevis.org/ff1Oi8vYmFybmFtZW5ldmlzLm9yZy9pbWFnZXMvc21pbGllcy9 5YWhvby8xMTMuZ2lm

aria1o
جمعه 09 اردیبهشت 1390, 08:43 صبح
اینجارو مطالعه کن :قلب:


http://www.ganjineh-danesh.com/topic-t13455.html

IranVB
جمعه 09 اردیبهشت 1390, 10:10 صبح
خیلی ممنون از توجهتون :قلب:
طبق توضیح زیر که ، اینطور که گفته بودن دستور DEF همانند دستور ِِِِDim است یعنی برای تعریف متغیرها بکار میرود، و برای زمانی بکار میرود که متغیر بیشتری داشته باشیم




.
.
.
. نحوه تعریف متغیرها درbasic دو نوع می باشد .

1- با استفاده از دستور( DIM ): در نوع تعریف متغیر با ید به روش زیر عمل کرد

DIM نام متغير AS شکل کلی دستور : نوع

مثال :

DIM f ASSTRING

DIM s,h AS INTEGER

نکته : همیشه باید متغیرها قبل از دستور ورودی ( INPUT ) یا همان مقدار دهی تعریف شوند .

2- با اشتفاده از دستور( DEF ) : این نوع متغیر مانند تعریف قبلی می باشد با این تفاوت که زمانی مورد

استفاده قرار می گیرد که متغیر بیشتری داشته باشیم
.
.
.



اما وقتی که من متغیرهایی را در وی بی با این دستور (DEF) اعلان میکنم طبیعتا" در زمان اجرا وی بی نباید هشدار بدهد که متغیر شما تعریف نشده است (Variable not defined) اما بازم وی بی این پیام را میدهد :گریه:
همینطور چون این دستور همانند Dim است منتها برای تعریف تعداد زیادی متغیر باید انواع متغیرها را بپذیره ولی اینطور نیست مثلا" وقتی من این دستور را بصورت زیر مینویسم وی بی قبلو نمیکنه و دستور را قرمز میکنه:
DEFInt var1,var2,var3

خیلی ممنون میشوم اگر من را راهنمایی کنین چون خیلی گیر کرده ام

محسن واژدی
جمعه 09 اردیبهشت 1390, 10:44 صبح
سلام علیکم

چون این دستور همانند Dim است منتها برای تعریف تعداد زیادی متغیر باید انواع متغیرها را بپذیره ولی اینطور نیست مثلا" وقتی من این دستور را بصورت زیر مینویسم وی بی قبلو نمیکنه و دستور را قرمز میکنه:
DEFInt var1,var2,var3

چون نوشتن این دستور بدین صورت اشتباه است
توضیحی که آدرس "http://www.ganjineh-danesh.com/topic-t13455.html" برای دستور DEF ارائه کرده اند کاملا" اشتباه است چون این دستور هیچ شباهتی با دستور Dim که برای اعلان متغیرها استفاده میشود ندارد،

DEF مخفف (Default) به معنای پیش فرض میباشد
این دستور در سطح ماژول برای تعریف یک نوع پیش فرض برای متغیرها، آرگومانهای قرار گرفته در روال ها و نوع برگشتی برای Function ها و Property Getهایی است که نامشان با یکی از کاراکترهای تعیین شده -توسط دستور DEF- شروع میشود،
همانگونه که اطلاع دارید در صورت مشخص نکردن نوع یک متغیر یا روالT، ویژوال بیسیک آنرا به صورت Variant اعلان میکند، اما شما میتوانید توسط دستور DEF رنج های مشخصی را برای نوع ها تعریف کنید، مثلا" تعیین کنید نوع پیش فرض متغیرهایی که با کاراکترهای A و R شروع میشوند Boolean باشد و نوع پیش فرض متغیرهایی که از حرف S تا Z تعریف شده اند از نوع Integer باشد
در این صورت اگر روالی داشته باشید به نام ReturnMyRes و نوع آنرا نیز مشخص نکرده باشید، یعنی بصورت زیر:
Public Function ReturnMyRes ()
'com-line
End Function

مقدار برگشتی از نوع Boolean میباشد نه Variant

لیست Defهای قابل استفاده در وی بی:
DefByte

DefInt

DefLng

DefCur

DefSng

DefDbl

DefDate

DefStr

DefObj

DefVar

موفق باشید
یاعلی

M_Maskout
جمعه 09 اردیبهشت 1390, 11:14 صبح
سلام
در بیسیک (BASIC)، شما مجبور به تعریف متغیر، قبل از استفاده از اون نیستید. و در هر جا از کد برنامه، می‌تونید با درج یه نام، یه متغیر ایجاد کنید و از اون استفاده کنید. اما برای اینکه نوع این جور متغیرها تغیین بشن، از علاماتی مثل %، #، $ و یا & استفاده می‌شه. قبلاً (تو نسخه‌های قدیمی) تمام متغیرهای بدون تعریف اولیه، به طور پیش فرض از نوع Singleدر نظر گرفته می‌شدن (این متغیرهای 4 بایتی هستن و علامت مشخصه‌ی این نوع، ! هست). توی VB6، اینطور متغیرها از نوع Variant هستن و هیچ علامت مشخصه‌ای ندارن.
برای اینکه این حالت پیش فرض رو عوض کنیم، از دستور DefX [A-Z]‎ استفاده می‌کنیم. که البته بجای X کلماتی مثل Str برای نوع String، ‏Lng برای نوع Long، ‏Bool برای نوع Boolean و ... استفاده می‌شه و ضمناً درج قسمت [A-Z] اختیاری هست. برای اینکه این عبارت (DefX) محدود بشه، می‌تویند با اوردن حرف (مثلاً A) یا حروف (مثلاً A, D) و یا دنباله‌ای از حروف (مثلاً A-D) در جلوی عبارت، دامنه‌ی اعمال دستور رو روی متغیرهای با نام‌های مختلف محدود کنید.
مثلاً در ماژولی که در ابتدای اون عبارت DefLng درج بشه، هر متغیر بدون نوع، از نوع Long (دقت مضاعف) در نظر گرفته می‌شه. این زمانی کاربرد داره که شما بطور عمده می‌خواین از متغیرهای با دقت بالا استفاده کنید. و در صورت نیاز به متغیرهای با دقت معمولی باید حتماً توی اون ماژول بعد از نام متغیر، ! بذارین. حالا در صورتیکه بخواین فقط متغیرهایی که با حرف L شروع می‌شن، از نوع Long در نظر گرفته بشن، از دستور DefLng L باید استفاده بشه. بنابراین دستور DefLng H-I, L, N باعث می‌شه، تمام متغیرهایی که نام اونا با یکی از حروف N، L، I، H شروع می‌شه بدون گذاشتن علامت # در انتهای نامشون، از نوع Long در نظر گرفته بشن.
البته استفاده از متغیرهای‌ بدون تعریف اولیه، اصلاً کار مناسبی نیست. یکی از دلایل بسیار مهم این نکته، اینه که شما رو از برنامه نویسی استاندارد، دور نگه می‌داره و در صورتیکه بعدها قصد استفاده از زبون‌های دیگه‌ای (حتی VB .net) رو داشته باشید، به مشکل برخورد می‌کنید (کار با اون زبون‌ها براتون سخت می‌شه). دلیل مهم دیگه اینکه که فضای اشغال شده توسط متغیرها، اغلب بیشتر از حد نیازه و عملاً یه جورایی باعث کندتر شدن برنامه می‌شه. خطایابی (Debug) برنامه هم سختتر انجام می‌شه و دلایلی از این قبیل.
پیشنهاد می‌شه، اولاً تمام متغیرهای لازم تو برنامه رو با دستور Dim بطور کامل مشخص کنید (نوع اونا رو هم حتماً تو دستور مشخص کنید). ثانیاً حتی الامکان دستور Option Explicit رو در ابتدای تمام فرم‌ها و ماژول‌هاتون بذارین تا VB بطور اتوماتیک از درج متغیرهای بدون تعریف اولیه جلوگیری کنه و شما تو روتین‌های طولانی، مطمئن باشید که هر متغیری که دارید استفاده می‌کنید، حتماً از قبل تعریف شده.
البته با تیک زدن عبارت Require Variable Declaration تو تب Editor از پنجره‌ی Options (منوی Tools، دستور Options)، ‏VB به طور خودکار دستور Option Explicit رو به تمام فرمها و ماژول‌های جدید اضافه خواهد کرد.

hczssChips
شنبه 17 خرداد 1393, 20:36 عصر
سلام به همه دوستان
توضیحات آقای محسن واژدی و جناب M_Maskout کاملا کامل بود! فقط یه چیزیو نگفتن که اون این بود که در جلوی عبارت defX، یک عبارت با قاعده (RegExp) قرار میگیره که برای محدود کردن دامنه ی عملکرد عبارت defX بر روی الگوی مشخصی از نام ها است.
موفق باشید...