زبان پاسکال اولیه بر مبنای مفاهیم سادهای شکل گرفت که امروزه در زبانها برنامهنویسی کاملاً شیوع یافتهاند. نخستین آنها مفهوم نوع داده است. نوع نشان دهندهی مقادیری است که یک متغیر میتواند اتخاذ کند و عملهایی که میتوان بر روی آن انجام داد. مفهوم نوع در پاسکال قویتر از C است, که در آن نوعهای دادهای حسابی را تقریباً میتوان به جای همدیگر مورد استفاده قرار داد, و از نسخههای ابتدایی BASIC هم که فاقد چنین مفهومی بودند, بسیار قویتر است.
متغیرها
در پاسکال هر متغیری را باید قبل از استفاده اعلام کرد. هرگاه متغیری را اعلام میکنید, باید نوع دادهای آن را مشخص نمایید. چند نمونه اعلام متغیر ساده را در زیر میبینید:
var
Value: Integer;
IsCorrect: Boolean;
A, B: Char;
از کلیدواژهی var میتوان در جاهای مختلفی از کد استفاده کرد, مثلاً در آغاز کد یک تابع یا پردازه (procedure), برای اعلام متغیرهای محلی (local) آن روال, و یا در یک یکان (unit) برای اعلام متغیرهای سراسری (global). پس از کلیدواژهی var لیستی از نام متغیرها واقع میشود که به دنبال آن دو نقطه (:) و سپس نام نوع قرار میگیرد. میتوانید در یک خط نام چند متغیر را قرار دهید, مانند سطر آخر در مثال فوق.
وقتی متغیری از یک نوع خاص تعریف کردید, فقط عملهایی را که برای آن نوع داده مجاز است, میتوانید روی آن انجام دهید. مثلاً از مقادیر بولی در یک شرط و از مقادیر صحیح در یک عبارت عددی میتوانید استفاده کنید. بر خلاف زبان C, مقادیر بولی و صحیح را نمیتوانید با هم مخلوط کنید.
با استفاده از اختصاصهای ساده, میتوان کد زیر را نوشت:
Value := 10;
IsCorrect := True;
اما دستورالعمل زیر درست نیست, زیرا دو متغیر از نوعهای متفاوتی هستند:
Value := IsCorrect; // error
اگر سعی کنید که این کد را تدوین (compile) کنید, دلفی یک پیغام خطای تدوینگر با مضمون زیر را صادر میکند: Incompatible types: 'Integer' and 'Boolean'. به طور معمول, اینگونه خطاها خطاهای برنامهنویسی هستند, زیرا معنی نمیدهد که یک مقدار True یا False را به متغیری از نوع عدد صحیح اختصاص دهیم. نباید دلفی را به خاطر این خطاها سرزنش کرد. این خطاها فقط به شما هشدار میدهد که اشکالی در کد شما وجود دارد.
البته در اغلب موارد این امکان وجود دارد که مقدار یک متغیر را از نوعی به نوع دیگر تبدیل کنیم. در برخی از موارد, این تبدیل به صورت خودکار صورت میپذیرد, اما معمولاً لازم است که تابع خاصی از سیستم را فراخوانید تا نمایش درونی را تغییر دهد.
در دلفی میتوانید هنگام تعریف یک متغیر سراسری مقدار آغازینی به آن اختصاص دهید. مثلاً میتوانید بنویسید:
var
Value: Integer = 10;
Correct: Boolean = True;
این روش آغازش (initialization) فقط برای متغیرهای سراسری مؤثر است, نه برای متغیرهایی که در درون قلمرو یک پردازه یا متد تعریف میشوند.
ثابت ها
در پاسکال میتوانید برای نامگذاری مقادیری که در طی اجرای برنامه تغییر نمیکنند, ثابت (constant) تعریف کنید. برای اعلام یک ثابت لازم نیست که نوع داده را مشخص کنید, بلکه فقط باید مقدار آغازین را اختصاص دهید. تدوینگر به مقدار نگاه کرده و به طور خودکار نوع دادهای مناسبی برای آن تعیین خواهد کرد. چند اعلام نمونه را در زیر میبینید:
const
Thousand = 1000;
Pi = 3.14;
AuthorName = 'Marco Cantù';
دلفی نوع ثابت را بر اساس مقدار آن تعیین میکند. در مثال بالا, فرض میشود که ثابت Thousand از نوع SmallInt است, که کوچکترین نوع عدد صحیح است که میتواند آن را در خود نگه دارد. اگر بخواهید که دلفی از نوع دادهای خاصی استفاده کند, کافی است که نوع داده را هم در اعلام بگنجانید, مانند:
const
Thousand: Integer = 1000;
زمانی که یک ثابت تعریف میکنید, تدوینگر به اختیار خود ممکن است محل خاص از حافظه را برای آن اختصاص دهد, و یا اینکه ممکن است هر بار از ثابت استفاده میشود, مقدار را بازسازی کند. روش دوم بالاخص برای ثابتهای ساده مناسب است.
توجه: نسخهی 16 بیتی دلفی به شما اجازه میدهد که مقدار یک ثابت نوعدار را در زمان اجرا, مانند یک متغیر, تغییر دهید. نسخهی 32 بیتی هم به خاطر سازگاری با گذشته وقتی که فرمان تدوینگر $J را فعال کرده باشید, و یا کار معادل آن را که تیک زدن گزینهی Assignable Typed Constants در صفحهی تدوینگر (Compiler Page) از پنجرهی گفتگوی گزینههای پروژه (Project Options) است, انجام دهید, اجازهی این کار را میدهد. گرچه این رفتار به طور پیشفرض فعال است, ولی شدیداً به شما توصیه میکنیم که از این حیله به عنوان یک فن معمول برنامهنویسی استفاده نکنید. اختصاص دادن مقدار جدید به یک ثابت تمام بهینهسازیهای تدوینگر در مورد ثابتها را غیرفعال میسازد. در چنین موردی بهتر است به جای ثابت از یک متغیر استفاده کنید.
ثابتهای رشتهی منبع
هنگام تعریف یک ثابت رشتهای, به جای نوشتن:
const
AuthorName = 'Marco Cantù';
از دلفی 3 به بعد میتوانید بنویسید:
resourcestring
AuthorName = 'Marco Cantù';
در هر دو حالت یک ثابت ایجاد میشود؛ یعنی مقداری که در حین اجرای برنامه غیرقابل تغییر است. تفاوت فقط در چگونگی پیادهسازی است. رشتهی ثابتی که با فرمان resourcestring تعریف میشود, در منابع برنامه (resources) در یک جدول رشته (string table) ذخیره میشود.
برای اینکه این قابلیت را در عمل ببینید, به مثال ResStr مراجعه کنید.در این مثال, دکمهای با کد زیر وجود دارد:
resourcestring
AuthorName = 'Marco Cantù';
BookName = 'Essential Pascal';
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage (BookName + #13 + AuthorName);
end;
خروجی دو رشته به خاطر نویسهی سطر جدید (که با مقدار عددی آن به صورت نویسهی ثابت #13 نشان داده شده است), در دو سطر جداگانه نمایش داده میشود.
نکتهی جالب در مورد این برنامه آن است که اگر با استفاده از یک کاوشگر منابع (resource explorer) به بررسی آن بپردازید (چنین برنامهای در میان نمونههایی که همراه دلفی عرضه میشود, وجود دارد), رشتههای جدید را در میان منابع خواهید دید. این بدان معنا است که رشتهها جزئی از برنامهی تدوین شده نیستند, بلکه در قسمت جداگانهای از پروندهی قابل اجرا (پروندهی EXE) ذخیره شدهاند.
توجه: به طور خلاصه, فواید استفاده از منابع شامل موارد زیر هستند: نخست مدیریت مؤثر حافظه توسط ویندوز, و دوم امکان ترجمهی برنامه (ترجمهی رشتهها به زبان دیگر) بدون نیاز به تغییر دادن متن برنامه.
انواع داده ها
در پاسکال چند نوع داده ای از پیش تعریف شده وجود دارند که میتوان آنها را به سه گروه تقسیم کرد: نوعهای ترتیبی, نوعهای حقیقی, و رشتهها. نوعهای ترتیبی و حقیقی در قسمتهای زیر مورد بحث قرار میگیرند, و در بارهی رشتهها بعداً در این فصل سخن خواهیم گفت. همچنین, چند نوع را که در کتابخانههای دلفی تعریف شدهاند (و از قبل به وسیلهی تدوینگر تعریف نشدهاند), و میتوان آنها را نیز نوعهای از پیش تعریف شده دانست, معرفی خواهیم کرد.
در دلفی داده های بدون نوع هم وجود دارند که به آنها تغییرگر میگویند. این نوع را در فصل 10 این کتاب بحث خواهیم کرد. عجیب این است که تغییرگرها نوعهایی هستند که وارسی نوع (type-checking) درستی روی آنها انجام نمیشود. این نوعها در دلفی 2 برای حل مسئلهی خودکارسازی OLE معرفی شدند.