the_king
مدیرکل انجمن
Enum یک گروه از مقادیری رو تعریف می کنه که هر کدوم یک اسم یکتا دارند. مقدار هر کدوم شون هم ثابت و بدون تغییر ئه. مزیت Enum در همون گروه ساختنه که یکسری مقادیر ثابت که به نحوی بهم مربوط اند رو یکجا و با یک اسم خاص جمع آوری می کنه. تو زبان هایی مثل ++C / C چون enum وجود نداشت مجبور شدن برای مقادیر یک پیشوند یکسان در نظر بگیرند تا پیدا کردنشون ساده تر بشه مثلا WM_KEYDOWN و WM_KEYUP و WM_CLOSE اما چون کامپایلر ارتباط بین این اسامی رو درک نمی کنه تو کد نویسی هیچ کمکی نمی کرد، اما با کمک enum همچین مشکلی پیش نمیاد، هر جا که اسم enum بیاد تمامی مقادیر زیر گروهش لیست میشه و در دسترس ئه.با سلام مجدد
این سوالاتی که می پرسم فقط از آقا سجاد نیست اگه استاد علی عزیز می تونن در فهم مطلب کمک کنن خوشحال میشم نظر ایشون رو بدونم حتی اگه یکی دو خط باشه که اذیت نشن
آقا سجاد من 4 روزه روی این قسمت 11 گیر کردم روی enum . شما نوشتی که من هر چی مینویسم شما کاری نداشته باشید فعلا ولی من نمی تونستم بفهمم شما داری چیکار می کنی خلاصه تونستم با گشتن تو اینترنت بفهمم این enum چیه و ارتباطش رو با عملگر های بیتی
ممکنه enum شامل مقادیری باشه که فقط یکتا بودنش مهمه، جابجا شدن مقدارها یا فرضا چند رقمی بودن مقادیر یا اینکه از چه مقداری شروع بشن یا توانی از 2 باشن یا نه مهم نباشه. فرضا اسامی شهر ها باشه. اینکه شهر تهران مقدار 178 داشته باشه یا 1009 باشه از نظر برنامه نویس مهم نیست. همه جا از نام City.Tehran استفاده میشه که City نام enum ئه و اینکه Tehran چه مقداری داره حقیقتا مهم نیست. در اینجور مثال به قول شما عملگر هایی مثل | و ^ و & معنی و مفهوم قابل درکی ندارند، چون فرضا City.Tehran | City.Yazd مقداری خواهد بود که نه ربطی به Tehran داره و نه Yazd. یک مقداری است که ممکنه معادل مقدار یکی از اعضاء City باشه یا نباشه.الان فقط یک چیزی رو متوجه نشدم که چیه که تو کد می نویسم ولی فقط نتیجه ها رو
کد:5 | 13 = 13 5 ^ 13 = 8 16 | 4 = 20 16 & 4 = 0
حالا ما اینا رو بدست آوردیم چه کمکی تو برنامه نویسی می کنه و کابردش چیه
برنامه نویس هم برایش ترکیب کردن مقادیر شهر ها معنی نداره. Tehran + Tabriz - Yazd معنی نداره. معادل عددی داره، ولی عدد ای نیست که معنی خاصی براش تعریف شده باشه.
اما مقادیر enum ها همیشه اینطوری بی اهمیت نیستند، فرضا enum ای رو در نظر بگیرید که ترکیب رنگ و نوع کفش باشه. رنگ یکسری مقادیر ئه و نوع کفش یکسری مقادیر دیگه که همه شون تحت enum ئه Shoes هستند. چطوری میخواهیم رنگ ونوع کفش رو در یک مجموعه مقدار دهی کنیم؟ یک راه نامناسب اینه که هر چی ترکیب رنگ و نوع هست رو همینطوری بدون توجه به مقدار یکی یکی بنویسیم. پوتین مشکی، پوتین قهوه ای و ...
و زمانی که بخواهیم همه پوتین ها یا همه مشکی ها رو سوا کنیم به مشکل برمیخوریم چون مقادیر هیچ تفکیک پذیری مشخصی ندارند. اما میشه فقط یک مقدار برای پوتین نوشت و فقط یک مقدار برای رنگ مشکی. به شرطی که مقادیر با شیوه مشخصی ترکیب بشوند. اینجا است که اون توان 2 بودن ها کمک می کنه. فرضا از قبل قرار میذاریم که چهار بیت برای رنگ باشه و چهار بیت بعدی برای نوع کفش. اینجا اون عملگر های | و & و ^ کاربرد پیدا می کنند چون هر مقدار رو بصورت بیتی تفسیر می کنیم. فرضا Shoes.Black | Shoes.Boot چکمه مشکی است. s & Shoes.Color) == Shoes.Black) فقط زمانی برقراره که s یک کفش مشکی باشه و با هر نوع دلخواه.
اگر 4 بیت اول رو به رنگ اختصاص میدیم Shoes.Color مقدار 15 داره، یعنی معادل باینری اش 00001111 ئه. و Shoes.Type که نوع کفش ئه مقدارش 240 ئه که معادل باینری اش 11110000 ئه. Color و Type به اصطلاح Mask هستند، با هر چی and بشوند بخش مربوط به خودشون رو سوا می کنند و بقیه رو حذف (صفر) می کنند.