اعلان در برنامه نویسی چیست؟ | مفهوم Declaration به بیان ساده

در برنامه نویسی کامپیوتر، اعلان (Declaration) یک ساختار یا سازه زبانی است که خصیصه‌های یک شناسه (Identifier) را مشخص می‌کند. اعلان به طور رایج برای تابع‌ها، متغیرها، ثابت‌ها و کلاس‌ها در برنامه نویسی مورد استفاده قرار می‌گیرد. علاوه بر این موارد، اعلان را می‌توان برای سایر موجودیت‌ها در برنامه نویسی، مثل فهرست‌های شمارا (Enumeration) و تعریف نوع داده نیز به کار گرفت. در ادامه این مقاله در خصوص این سوال که اعلان در برنامه نویسی چیست ، توضیحات بیش‌تری ارائه شده است و همچنین پیرامون تفاوت تعریف (Definition) و اعلان نیز بحث می‌شود و مثال‌هایی هم برای درک بهتر در انتها آمده‌اند.

اعلان در برنامه نویسی چیست ؟

اعلان در برنامه نویسی برای اعلام وجود یک موجودیت به کامپایلر مورد استفاده قرار می‌گیرد. علاوه بر نام (شناساگر) و نوع موجودیت (تابع، متغیر و سایر موارد)، اعلان‌ها معمولاً نوع داده (برای متغیرها و ثوابت) یا امضای نوع (Type Signature) را مشخص می‌کنند. علاوه بر این، انواع داده ممکن است شامل ابعاد هم باشند که در این خصوص می‌توان آرایه‌ها را مثال زد.

اعلان در زبان‌های برنامه نویسی با نوع دهی قوی

اعلان خصوصاً در مورد زبان‌های برنامه نویسی با نوع‌دهی قوی (Strongly Typed) اهمیت دارد. در زبان‌های برنامه نویسی با نوع‌دهی قوی، تعیین توابع، متغیرها و ثوابت و نوع آن‌ها با استفاده از اعلان پیش از استفاده ضروری است و در «پیش اعلان» (Forward Declaration) هم کاربرد دارد.

اعلان در برنامه نویسی چیست؟ | مفهوم Declaration به بیان ساده

اعلان خصوصاً در مورد زبان‌هایی با عُرف الگوریتمی (ALGOL)، شامل خانواده زبان‌هایی با کامپایل ساده (BCPL)، خصوصاً زبان‌های C و C++‎ و همچنین پاسکال، مفهومی برجسته است. از عبارت اعلان در جاوا استفاده می‌شود، اگرچه در جاوا نیازی به اعلان و تعریف به صورت جداگانه وجود ندارد.

مقایسه تعریف و اعلان در برنامه نویسی

اصطلاح اعلان یا همان Declaration معمولاً با اصطلاح «تعریف» یا همان «Definition» در تضاد است، اما معانی و کاربرد آن‌ها خصوصاً در بین زبان‌های برنامه نویسی مختلف متفاوت است. یک دوگانگی اساسی که به وجود می‌آید این است که آیا اعلان شامل یک تعریف یا همان Definition می‌شود یا خیر؟ برای مثال، آیا در اعلان یک ثابت یا متغیر، مقدار آن ثابت یا مقدار اولیه آن متغیر هم تعیین می‌شود یا تنها نوع آن را مشخص می‌کنند؟

همه زبان‌های برنامه نویسی چنین تمایزی را قائل نمی‌شوند؛ در بسیاری از زبان‌ها، اعلان‌ها همیشه شامل تعریف هم هستند و می‌توان آن‌ها را بسته به زبان برنامه نویسی مربوطه، اعلان یا تعریف خطاب کرد. اگرچه، این مفاهیم در زبان‌هایی با هم تفاوت دارند که پیش از استفاده نیاز به اعلان دارند که در خصوص آن‌ها از پیش اعلان (Forward Declaration) استفاده می‌شود. همچنین در زبان‌هایی که واسط (اینترفیس) و پیاده‌سازی در آن‌ها جدا هستند، واسط شامل اعلان‌ها و پیاده‌سازی حاوی تعریف‌ها خواهد بود.

در کاربرد غیر رسمی، «اعلان» تنها به اعلان خالص یعنی تنها تعیین نوع و عدم تعیین مقدار یا بدنه گفته می‌شود. این در حالی است که «تعریف» به اعلانی می‌گویند که شامل مقدار یا بدنه هم باشد. اگر چه، در کاربرد رسمی (در مشخصات زبان‌ها)، اعلان هر دوی این مفاهیم را شامل می‌شود که بر اساس زبان قابلیت تشخیص بهتری وجود دارد.

تفاوت تعریف و اعلان در برنامه نویسی C

در زبان‌های C‌ و C++‎ اعلانِ یک تابع که شامل بدنه نیست را «نمونه اولیه تابع» (Function Prototype) می‌نامند، در حالی که اعلان تابعی که شامل یک مقدار یا بدنه نباشد را تعریف تابع (Function Definition) می‌نامند.

تفاوت تعریف و اعلان در برنامه نویسی جاوا

در زبان برنامه نویسی جاوا، اعلان‌ها به دو صورت انجام می‌شوند. برای متُدهای عمومی می‌توان آن‌ها را در واسط‌ها به عنوان امضای متُد ارائه کرد که شامل نام متدها، نوع ورودی و نوع خروجی می‌شود. یک نوع نشانه‌گذاری مشابه می‌تواند در تعریف متدهای انتزاعی استفاده شود که حاوی تعریف نیست. کلاس محصور کننده می‌تواند به جای یک کلاس مشتق شده نمونه‌سازی شود که برای ایجاد یک نمونه از کلاس هم باید تعریف متد انجام شود. از جاوا نسخه ۸ به بعد، اظهار لاندا (Lambda Expression) به این زبان اضافه شده است که می‌توان آن را به عنوان اعلان تابع در نظر گرفت.

اعلان‌ و تعریف

در خانواده زبان‌های برنامه نویسی C، اعلان‌ها اغلب در فایل‌های سرآیند (هدر) جمع‌آوری می‌شوند که در سایر فایل‌های منبعی که به این اعلان‌ها ارجاع می‌دهند و از آن‌ها استفاده می‌کنند هم وجود دارند، اما به تعریف دسترسی ندارند. اطلاعات در فایل هدر رابط بین کدهایی را فراهم می‌کند که از اعلان استفاده می‌کنند و آنچه که اعلان‌ها را تعریف می‌کند که این نوعی مخفی‌سازی اطلاعات به حساب می‌آید. اعلان اغلب برای دسترسی به توابع یا متغیرهایی استفاده می‌شود که در فایل‌های منبع مختلف یا در یک کتابخانه تعریف شده‌اند. مغایرت میان نوع در تعریف و نوع در اعلان منجر به بروز خطای کامپایلر می‌شود.

در خصوص متغیرها، در تعریف مقادیری به ناحیه‌ای از حافظه تخصیص داده می‌شود که این ناحیه از حافظه در هنگام اعلان اندوخته (رزرو) شده است. در خصوص توابع، تعاریف، بدنه تابع را تغذیه می‌کنند. در حالی که یک متغیر یا تابع ممکن است به دفعات زیاد اعلان شود، معمولاً تنها یک بار تعریف می‌شود. در زبان C++‎ این شیوه با عنوان «قانون فقط یک بار تعریف» (One Definition Rule | ODR) شناخته می‌شود.

زبان‌های پویا مثل جاوا اسکریپت یا پایتون عموماً اجازه می‌دهند توابع باز تعریف شوند که به آن re-bound گفته می‌شود. یک تابع متغیری بسیار شبیه به سایر متغیرها است که دارای یک نام و مقدار (یعنی همان تعریف) است. در ادامه چند مثال برای درک بهتر مباحث مطرح شده ارائه شده است:

مثال اعلان در زبان C

در کدهای زیر نمونه‌هایی از اعلان‌هایی در زبان C آمده است که اعلان هستند ولی تعریف نیستند:

extern char example1;
extern int example2;
void example3(void);

در کدهای زیر تعدادی اعلان در زبان C ملاحظه می‌شوند که تعریف هم به حساب می‌آیند:

char example1; /* Outside of a function definition it will be initialized to zero.  */
int example2 = 5;
void example3(void) { /* definition between braces */ }

اعلان برای متغیرهای تعریف نشده

در برخی از زبان‌های برنامه نویسی، یک اعلان ضمنی در زمان کامپایل برای اولین باری فراهم می‌شود که مواجهه با متغیرهای تعریف نشده (Undefined Variable) اتفاق می‌افتد. در سایر زبان‌های برنامه نویسی چنین کاربردی به عنوان خطا در نظر گرفته می‌شود که ممکن است به یک پیام تشخیصی منجر شود. برخی از زبان‌ها در ابتدا رفتار اعلان ضمنی را در پیش گرفتند، اما در طول زمان و با پیشرفت این زبان‌ها، امکان غیرفعالی کردن این قابلیت را فراهم کردند. برای مثال در زبان پرل «use strict» و در ویژوال بیسیک از «Option Explicit» برای انجام این کار معرفی شده است.

جمع‌بندی

در این مقاله به شرح چیستی اعلان در برنامه نویسی پرداخته شد. اعلان و تعریف در برنامه نویسی با هم مقایسه شدند و در انتها نیز پیرامون اعلان برای متغیرهای تعریف نشده بحث شده است.

اگر این مطلب مفید بوده است، استفاده از دوره‌های آموزشی و مطالب زیر نیز پیشنهاد می‌شوند:

 

منبع [+]

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *