در آموزش قبلی با عملگرهای VBA آشنا شدیم. در این بخش از آموزشهای رایگان ویبیای، با مفهوم اولویت عملگرها در VBA و تأثیر آن بر ترتیب محاسبات آشنا میشویم. یادگیری این مفهوم بسیار مهم است، زیرا ترتیب اجرای عملگرها میتواند نتیجه نهایی فرمول یا شرط را بهطور کامل تغییر دهد.
📑 فهرست مطالب
- تعریف اولویت عملگرها
- ترتیب کلی اولویت عملگرها در VBA
- مثال از عملگرهای منطقی
- ملاحظات مهم درباره اولویت عملگرها
- سؤالات متداول درباره اولویت عملگرها در VBA
- منظور از اولویت عملگرها در VBA چیست؟
- چرا نتیجه یک فرمول ممکن است بدون پرانتز اشتباه شود؟
- آیا ترتیب اولویت عملگرها در VBA با Excel یکی است؟
- اگر دو عملگر اولویت برابر داشته باشند چه میشود؟
- پرانتزها چگونه بر ترتیب اجرای عملگرها تأثیر میگذارند؟
- چگونه میتوان از خطاهای منطقی مربوط به ترتیب عملگرها جلوگیری کرد؟
- منبع
تعریف اولویت عملگرها
اولویت عملگرها مجموعه قوانینی است که تعیین میکند هنگام ارزیابی یک عبارت، کدام عملگر باید زودتر اجرا شود. در واقع ترتیب اجرای عملگرها در VBA مشابه قواعد ریاضی است، با این تفاوت که در VBA علاوه بر عملگرهای ریاضی، عملگرهای منطقی و مقایسهای نیز وجود دارند.
مثال عددی
x = 12 * 2 + (1 + 5) / 2
اگر این عبارت را از چپ به راست و بدون در نظر گرفتن اولویت عملگرها محاسبه کنیم، نتیجه 15 میشود. اما با رعایت قواعد اولویت، نتیجه صحیح 27 خواهد بود.
تجزیه مرحلهبهمرحله
1️⃣ ابتدا پرانتز محاسبه میشود: (1 + 5) = 6
x = 12 * 2 + 6 / 2
2️⃣ عملگرهای * و / از جمع و تفریق اولویت بیشتری دارند و از چپ به راست ارزیابی میشوند:
x = 24 + 3
3️⃣ در نهایت عملگر جمع محاسبه میشود و نتیجه برابر 27 است.
ترتیب کلی اولویت عملگرها در VBA
در VBA، ترتیب ارزیابی عملگرها (از بیشترین تا کمترین اولویت) بهصورت زیر است:
(1) پرانتزها ()
(2) توان ^
(3) علامت منفی -
(4) ضرب و تقسیم * /
(5) تقسیم عدد صحیح \
(6) باقیمانده تقسیم Mod
(7) جمع و تفریق + -
(8) ترکیب رشتهای &
(9) عملگرهای مقایسهای = < > <= >= Like Is
(10) عملگرهای منطقی Not, And, Or, Xor, Eqv, Imp
همانطور که مشاهده میکنید، ابتدا عملگرهای ریاضی، سپس مقایسهای، و در نهایت منطقی ارزیابی میشوند.
مثال از عملگرهای منطقی
در مثال زیر، با وجود اینکه Or قبل از And آمده، چون And اولویت بیشتری دارد، ابتدا محاسبه میشود:
Debug.Print True Or False And False ' نتیجه: True
یعنی ابتدا False And False → False محاسبه میشود و سپس True Or False → True.
ملاحظات مهم درباره اولویت عملگرها
- گروهبندی: ابتدا عملگرهای ریاضی، سپس مقایسهای و در آخر منطقی ارزیابی میشوند.
- اولویت برابر: اگر چند عملگر از یک سطح باشند، ترتیب از چپ به راست اعمال میشود (مثل * و /).
- پرانتز: پرانتز همیشه باعث میشود بخشی از عبارت زودتر از بقیه ارزیابی شود.
- عملگر &: برای ترکیب رشتهها استفاده میشود و بین ریاضی و مقایسهای قرار دارد.
- عملگرهای Like و Is: هر دو جزو عملگرهای مقایسهای هستند.
برای جلوگیری از خطاهای منطقی در محاسبات و دستورات شرطی، همیشه در عبارات پیچیده از پرانتزها برای شفافسازی ترتیب محاسبه استفاده کنید.
سؤالات متداول درباره اولویت عملگرها در VBA
منظور از اولویت عملگرها در VBA چیست؟
اولویت عملگرها در VBA مشخص میکند که وقتی چندین عملگر در یک عبارت وجود دارد، ترتیب اجرای آنها چگونه است. مثلاً عملگر ضرب و تقسیم قبل از جمع و تفریق اجرا میشوند مگر اینکه از پرانتز برای تغییر ترتیب استفاده شود.
چرا نتیجه یک فرمول ممکن است بدون پرانتز اشتباه شود؟
زیرا VBA طبق اولویت داخلی خود عملگرها را ارزیابی میکند، نه صرفاً از چپ به راست. مثلاً در عبارت x = 10 + 2 * 5 ابتدا ضرب انجام میشود و نتیجه 20 میشود، نه 60. استفاده از پرانتز باعث کنترل ترتیب محاسبه میشود.
آیا ترتیب اولویت عملگرها در VBA با Excel یکی است؟
بله، در بیشتر موارد مشابه هستند. اما در VBA عملگرهای منطقی مانند And، Or و Not نیز وجود دارند که در Excel به شکل متفاوتی پیادهسازی میشوند. در VBA این عملگرها در انتهای جدول اولویت قرار دارند.
اگر دو عملگر اولویت برابر داشته باشند چه میشود؟
وقتی دو عملگر اولویت یکسانی دارند، VBA آنها را از چپ به راست محاسبه میکند. مثلاً در عبارت 20 / 5 * 2 ابتدا تقسیم (20 ÷ 5) و سپس ضرب (4 × 2) انجام میشود.
پرانتزها چگونه بر ترتیب اجرای عملگرها تأثیر میگذارند؟
پرانتزها همیشه بر هر قاعده اولویتی غلبه میکنند و باعث میشوند بخش داخل آنها قبل از سایر عملگرها محاسبه شود. مثلاً در (10 + 2) * 5 ابتدا جمع انجام میشود و نتیجه 60 خواهد بود.
چگونه میتوان از خطاهای منطقی مربوط به ترتیب عملگرها جلوگیری کرد؟
بهترین روش استفاده از پرانتزها برای مشخصکردن ترتیب مورد نظر است. همچنین توصیه میشود در عبارات شرطی پیچیده از تقسیم منطق به چند متغیر میانی استفاده کنید تا کد خواناتر و بدون خطا شود.
منبع
Microsoft Docs: Operator Precedence (VBA)
بیشتر بخوانید
Me در VBA | کاربرد کلمه کلیدی Me در VBA و برنامه نویسی شیءگرا
روال Property Get در VBA | کاربرد روال Property Get در شیءگرایی
روال Property Set در VBA | کاربرد روال Property Set در شیءگرایی
روال Property Let در VBA | شیءگرایی و کپسوله سازی داده ها در VBA
خواص کلاس در VBA | ایجاد خواص کلاس با استفاده از اعلان متغیر در VBA
کلاس و شیء در VBA | مراحل ایجاد کلاس و شیء در VBA
برنامه نویسی شیءگرا (OOP) | مقدمه ای بر روش برنامه نویسی شیءگرا