فهرست (نوع داده انتزاعی)
در علوم رایانه، یک فهرست یا لیست یا دنباله، یک نوع دادهٔ انتزاعی است که نمایانگر تعداد شمارش‌پذیری از مقادیر مرتب است، به‌طوری که یک مقدار ممکن است بیش از یک بار مشاهده شود. یک فهرست نمایش کامپیوتری از مفهوم دنباله‌های متناهی در ریاضیات است. مفهوم نامتناهی قابل قیاس با فهرست، جریان (جریان داده) است. فهرست‌ها نمونهٔ ابتدایی از مخزن‌ها (به انگلیسی: Container) به‌شمار می‌رود، به این جهت که دربرگیرندهٔ دیگر مقادیر هستند. اگر مقدار مشخصی در فهرست بیش از یک بار رخ بدهد، هر تکرار به صورت مقدار مجزایی لحاظ می‌شود. عنوان فهرست برای چندین داده ساختار واقعی (غیرانتزاعی) که مفهوم انتزاعیِ فهرست را پیاده‌سازی کره اند، بکار گرفته شده‌است. مثلاً یک پیاده‌سازی معروف لیست‌های پیوندی است.
بسیاری از زبان‌های برنامه‌نویسی نوع دادهٔ فهرست را در کتابخانه خود دارند و استفاده از آن قوانین، دستورها و عملگرهای بخصوصی دارند.
در برنامه نویسی کامپیوتر یک داده انتزاعی(enumerated type)یک نوع (data type)هست که شامل میشود یک مجموعه ای از مقادیر که اعضا یا عناصر یا شمارنده نامیده میشوند. اسامی شمارنده ها(enumerators) معمولا شناسه ای هستند که مثل ثوابت در زبان برنامه نویسی عمل میکنند. داده انتزاعی میتواند به عنوان یک برچسب غیر قابل استفاده در برنامه دیده شوند.
متغیری که به عنوان یک نوع شمرده شده اعلام شده است می تواند هر یک از شمارشگرها را به عنوان یک مقدار اختصاص بدهد. به عبارت دیگر ، یک نوع متغیر شمرده شده دارای مقادیری است که با یکدیگر متفاوت هستند ، و قابل مقایسه و اختصاص هستند ، اما توسط برنامه نویس مشخص نشده است که هرگونه نمایش خاص در حافظه کامپیوتر را دارا باشند.
به عنوان مثال ، چهار لباس موجود در یک کارت ویزیت ممکن است چهار فهرست کننده به نام های Club ، Diamond ، Heart و Spade باشد که متعلق به یک نوع ذکر شده با نام کت و شلوار است. اگر متغیر V با توجه به نوع داده خود متناسب باشد ، می توان هریک از آن چهار مقدار را به آن اختصاص داد.
هرچند شمارنده های معمولا مجزا هستند. برخی از زبانها ممکن است اجازه دهند که شمارنده دو بار در اظهارنامه نوع ثبت شود.
نام شمارنده ها به هیچ وجه لازم نیست از نظر معنایی کامل یا سازگار باشد. به عنوان مثال ، یک نوع (enumerated) به نام color ممکن است تعریف شده باشد که شامل شمارنده های red ، green ، zebra ، lost و bacon است.
در برخی از زبانها ، اعلامیه از enumerated type نیز به طور عمدی ترتیب سفارش اعضای آن را تعریف می کند. در بعضی دیگر ، ثبت کنندگان بدون هماهنگی هستند. در برخی دیگر ، یک سفارش ضمنی از کامپایلر بوجود می آید که بطور مشخص نمایندگان شمارنده را به عنوان عدد صحیح نشان می دهد.
ممکن است برخی از enumerator types در زبان ساخته شود. به عنوان مثال ، boolean types اغلب شمارنده ای از پیش تعریف شده ای از مقادیر نادرست و درست است. بسیاری از زبان ها از جمله c++,C به کاربران این امکان را می دهند که انواع جدید از enumerated type را ذکر کنند.
متغیر ها و مقادیر از نوع enumerated type معمولا به عنوان رشته های از نوع Bit با طول پابت استفاده میشوند .و اغلب در یک قالب و سایز سازگار با integer type هستند. برخی از زبانها ، به ویژه سیستم زبانهای برنامه نویسی ، به کاربر این امکان را می دهند که ترکیب بیت را برای هر مترجم تعیین کند.
بنیاد و پایه (Rationale)
برخی از زبانهای برنامه نویسی اولیه در ابتدا enumerated type نداشتند. اگر یک برنامه نویس می بخواهد یک متغیر ، به عنوان مثال myColor ، مقدار قرمز داشته باشد ، متغیر را قرمز اعلام میکند و مقداری دلخواه به آن اختصاص می دهد و معمولا یک integer ثابت هست. سپس متغیر قرمز به myColor اختصاص می یابد. سایر تکنیک ها مقادیر دلخواه را به رشته های حاوی نام شمارنده ها (enumerators) اختصاص می دهند. این مقادیر دلخواه بعضی اوقات به عنوان اعداد جادویی شناخته می شوند زیرا اغلب توضیحی در مورد چگونگی به دست آوردن اعداد یا اینکه آیا ارزشهای واقعی آنها معنی دار است یا خیر ، وجود ندارد. از این رو ، شماره های جادویی می توانند (source code) را برای درک و حفظ دیگران سخت تر کنند. به عبارت دیگر (enumerated type)کد هارا خود مستندسازی میکنند. بسته به زبان ، کامپایلر می تواند مقادیر پیش فرض را به طور خودکار به (enumerators) اختصاص دهد و بدین ترتیب جزئیات غیرضروری از برنامه نویس پنهان شود. این مقادیر حتی ممکن است برای برنامه نویس قابل مشاهده نباشد. (enumerated types) همچنین می توانند از نوشتن یک کد برنامه نویسی مانند برنامه های ریاضی روی مقادیر شمارنده ها(enumerators) جلوگیری کنند. اگر مقدار متغیری که یک enumerators اختصاص داده می شد چاپ شود ، برخی از زبان های برنامه نویسی می توانند به جای مقدار عددی نام enumerators را چاپ کنند.
یک مزیت دیگر این است که انواع ذکر شده می توانند به کامپایلرها اجازه دهند صحت معنایی را اعمال کنند.
برای مثال: myColor = TRIANGLE ممکن است ممنوع باشد در حالی که: myColor = RED پذیرفته می شود ، حتی اگر TRIANGLE و RED هر دو از لحاظ داخلی به عنوان 1 نشان داده شوند. در واقع ، a enumerated type شبیه لیست اسامی (کدهای عددی) است ، از آنجا که به هر مقدار از نوع ممکن است ، یک شماره طبیعی متمایز اختصاص داده شود.از این رو ، یک enumerated type داده شده مشخص ، اجرای مشخص این مفهوم است.هنگامی که یک order معنی دار است یا برای مقایسه استفاده می شود ، یک نوع شمارش شده به یک نوع معمولی تبدیل می شود.
Conventions: زبانهای برنامه نویسی معمولاً چندین مرتبه ، سبک های برنامه نویسی و کنوانسیون های نامگذاری خود را دارند. enumerations, معمولاً از یک کنوانسیون PascalCase یا حروف بزرگ پیروی می کنند ، در حالی که حروف کوچک و دیگران کمتر دیده می شوند.
قواعد در سی پلاس پلاس : سی پلاس پلاس انواع enumeration types دارد که مستقیماً از C به ارث برده شده اند و عمدتا مانند انها کار می کنند.به جز اینکه a enumeration یک نوع واقعی در C ++ است و به بررسی زمان کامپایل اضافه می شود. همچنین (مانند ساختارها) ، کلمه کلیدی enum در سی پلاس پلاس به طور خودکار با typedef ترکیب می شود ، به طوری که به جای نامگذاری نام enum type ، فقط آن را نامگذاری کنید. این را می توان در C با استفاده از typedef شبیه سازی کرد:
مثال: سی پلاس پلاس enumeration typer ایمنی از نوع دوم را ارائه می دهد که به طور ضمنی به یک نوع عدد صحیح تبدیل نمی شود.آن اجازه می دهد جریان Io برای آن نوع تعریف شود.علاوه بر این که ، تعداد ذکر شده نشت نمی کند،بنابراین آنها باید با Enumeration استفاده شوند: این با عبارت "enum class" مشخص شده است. به عنوان مثال: نوع زمینه ای یک نوع انتگرال تعریف شده برای اجرای است که به اندازه کافی بزرگ برای نگه داشتن تمام مقادیر شمارش شده است (لازم نیست کوچکترین نوع ممکن باشد!). در C ++ می توانید نوع زیربنایی را مستقیماً مشخص کنید. enum class Shapes : char; // forward declaration. If later there are values defined that don't fit in 'char' it is an error.
منابع:
ویکی پدیا انگلیسی .