نکته مهم در مورد استاندارد سی #technical
ببینید قضیه اینه که سی تعداد آپریتور های بسیار بالایی رو به ما میده اما نکته مهم اینه که بدونیم این آپریتور ها و اکسپرشن هایی که از این آپریتور ها ساخته میشند چطوری و به چه اوردری به اجرا در میان؟
نکته مهم اینه که خیلی ها فکر میکنند در این عبارت همیشه ضرب ها اول اجرا میشند چون ضرب به جمع اولویت داره:
a * b + c * d + e * fاما داستان اینه که این قضیه درست نیست!
اولویت و حتی ویژگی شرکت پذیری آپریتور ها صرفا به گروه بندی ربط دارند این یعنی چی؟ یعنی صرفا در بسته بندی این عملیات ها به ما کمک میکنند مثلا در بحث اولویت :
(a * b) + (c * d) + (e * f)به این شکل گروه بندی میشن و وقتی ویژگی شرکت پذیری هم بیاد میتونیم بگیم که به این شکل میتونیم گروه بندیش کنیم :
((a * b) + (c * d)) + (e * f)اما داستانی که وجود داره اینه که این قضیه تقدم evaluation رو به طور کامل بیان نمیکنه یعنی چی؟ یعنی درسته که برای جمع اول ما نیاز داریم که ضرب ها اجرا بشن ولی این که در هنگام انجام جمع اول ما ضرب e*f رو داریم یا نه چیزی نیست که بتونیم صد درصد در موردش نظر بدیم
حالا اینجا این قضیه ساید افکتی نداره اما وقتی که از اپریتور هایی استفاده کنیم که ساید افکت دارند این قضیه میتوونه باعث بشه که یک ایکسپرشن ساده undefined باشه و حتی unspecified sequence رو دارا باشیم
مثلا یه همچین چیزی :
i + ++iاین قضیه چیه؟ اینجا دوتا اکسپرشن داریم یکی i++ و یه دونه کل جمعمون در حقیقت داستان اینه که اولویت i++ بالا تره پس توی گروه بندی میتونیم اینو بنویسیم :
i + (++i)اما موضوع اینه که هیچجا گفته نشده که آیا موقع ارزیابی و i++ مقدار i خونده میشه یا نه اگر خونده بشه مقدار میتونه یکی کمتر از نتیجه نهایی باشه و اگر خونده نشه مقدار یکی بیشتر از نتیجه نهایی هست یعنی در نهایت نتیجه نهایی گارانتی نشده هست
این یه موضوع مهم است که بدونیم وقتی میگیم :
x + c*p
برای این که جمع انجام بشه ما حتما باید مقدار سمت راست و چپ رو به طور کامل داشته باشیم اما این که ایکس خونده میشه و مقدار ضرب انجام میشه یا در هنگام ضرب ایکس خونده میشه و ... ربط داره به پلتفرم و انتخاب کامپایلر و پیاده سازی های سطح پایین
این نکته خیلی نکته مهمی هستش...
میدونم درکش سخته و کمی پیچیده هست ولی کم کم متوجهش میشید
پیشنهاد من اینه که یه برگه کامل بردارید و تک تک اپریتور ها رو بنویسید و ویژگی هاشون رو هم ذکر کنید و در نهایت بزنیدش یه جای اتاقتون و هر روز ببینیدشون و این قضیه رو به شکل ذهنی تمرین کنید...
@farhantbyte