TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #74 94
👑 قوانین نانوشته #C :
اولویت و ترتیب اجرای عملگرها

وقتی عبارتی مثل 1 + 2 * 3 رو می‌نویسید، #C از کجا می‌دونه که اول باید ضرب رو انجام بده؟ یا چرا 8 / 4 / 2 میشه 1 و نه 4؟

جواب تو دو تا قانون کلیدیه که امروز یاد می‌گیریم:
●اولویت (Precedence)
●ترتیب اجرا (Associativity).

1️⃣عبارت‌های انتساب (=) و ترفندهاش ✍️

اول از همه، بدونید که خودِ انتساب (=) در #C یک "عبارت" هست و مقدار داره! مقدارش هم همون چیزیه که بهش اختصاص داده شده. این ویژگی به ما اجازه میده کدهای جالبی بنویسیم:

زنجیره‌ای کردن انتساب: برای مقداردهی اولیه چند متغیر:
int a, b, c;
a = b = c = 0; // هر سه متغیر برابر با صفر میشن

عملگرهای ترکیبی: این‌ها میانبرهای syntactic برای ترکیب انتساب با یه عملگر دیگه‌ان و کد رو تمیزتر می‌کنن:
int x = 5;
x *= 2; // معادل: x = x * 2; حالا x برابر 10 است


2️⃣اولویت عملگرها (Precedence): چه کسی رئیس است؟

مثل ریاضی مدرسه، بعضی عملگرها در #C "زورشان" بیشتره. کامپایلر همیشه اول سراغ عملگرهای با اولویت بالاتر میره.

اولویت * و / از + و - بیشتره.

به همین دلیله که عبارت زیر، اینجوری محاسبه میشه:
// کامپایلر این رو به صورت 1 + (2 * 3) می‌بینه
int result = 1 + 2 * 3; // خروجی: 7


3️⃣ترتیب اجرا (Associativity): چپ به راست یا راست به چپ؟
حالا اگه اولویت‌ها یکی بود چی؟ اینجا "ترتیب اجرا" وارد میشه.

چپ-به-راست (Left-associative):
بیشتر عملگرهای دوتایی در #C چپ-به-راست هستن. یعنی محاسبه از چپ شروع میشه.
// کامپایلر این رو به صورت (8 / 4) / 2 می‌بینه
int result = 8 / 4 / 2; // خروجی: 1

راست-به-چپ (Right-associative):
اما عملگرهای انتساب (=)، شرطی سه‌تایی (?:) و null-coalescing (??) استثنا هستن و از راست به چپ ارزیابی میشن.
این ویژگی به ما اجازه میده که انتساب زنجیره‌ای داشته باشیم:
int x, y;
// کامپایلر این رو به صورت (x = (y = 3)) می‌بینه
// اول 3 در y ریخته میشه، و بعد حاصل اون عبارت (که 3 هست) در x ریخته میشه.
x = y = 3;


🤔 حرف حساب و تجربه شما

تسلط بر این قوانین، شما رو از خیلی از باگ‌های محاسباتی نجات میده و بهتون کمک می‌کنه کد بقیه رو سریع‌تر بخونید.

آیا تا حالا باگی داشتید که به خاطر رعایت نکردن اولویت عملگرها به وجود اومده باشه؟ یا از قابلیت زنجیره‌ای کردن انتساب (a=b=c) استفاده می‌کنید؟

خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامه‌ی بحث، سوالات، غر زدن‌ها و گپ و گفت‌های خودمونی، فقط تو گروه.

[C# Geeks Hangout]

🔖 هشتگ‌ها:
#CSharp #Programming #Developer #DotNet #CodingTips #Fundamentals #Operators
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →