الثوابت (Constants)
أحيانًا نحتاج إلى قيمة لا تتغيّر أثناء تشغيل البرنامج، وهذا بالضبط هو دور الثوابت (constants).
تساعد الثوابت في منع الأخطاء (مثل تغيير رقمٍ بالخطأ) وتجعل الكود أسهل في الفهم.
مثال: متغيّر عادي مقابل ثابت
#include <iostream>
using namespace std;
int main() {
int age = 15;
age = 16; // we can change it
const double PI = 3.14159;
// PI = 3.14; Error! cannot change a constant
cout << "PI is " << PI << endl;
return 0;
}المخرجات:
PI is 3.14159
لماذا نستخدم الثوابت؟
- لحماية القيم المهمة من التغيير غير المقصود.
- لجعل الكود أوضح وأسهل قراءة — المتغيّر
PIأكثر وضوحًا من الرقم3.14159. - لتسهيل التحديث — إذا تغيّرت قيمة
PI(وإن كان ذلك غير محتمل)، يمكن تعديلها في مكانٍ واحد فقط.
تعريف الثوابت
يتم إنشاء ثابت في C++ بإضافة الكلمة المفتاحية const قبل نوع البيانات:
const int DAYS_IN_WEEK = 7;
const double GRAVITY = 9.81;
const char GRADE = 'A';يجب أن تُعطى الثوابت قيمة لحظة تعريفها ولا يمكن تركها دون تهيئة.
الثوابت الحرفية (Literal Constants)
الثوابت الحرفية هي القيم التي تظهر مباشرةً في الكود، مثل:
int x = 5; // 5 is an integer literal
double pi = 3.14; // 3.14 is a double literal
char letter = 'A'; // 'A' is a character literal
string word = "Hi"; // "Hi" is a string literalهذه مجرّد قيم خام (raw values) تُكتب مباشرةً داخل الكود.
اللواحق الحرفية الشائعة (Common Literal Suffixes)
يمكنك أن تخبر C++ بنوع القيمة العددية باستخدام اللواحق (suffixes) التالية:
| القيمة الحرفية | النوع | المعنى |
|---|---|---|
5 |
int |
عدد صحيح افتراضي |
5U |
unsigned int |
عدد صحيح غير سالب |
5L |
long |
عدد صحيح طويل |
5LL |
long long |
عدد صحيح كبير جدًا |
3.14f |
float |
عدد عشري بدقة مفردة |
3.14 |
double |
النوع الافتراضي للأعداد العشرية |
3.14L |
long double |
عدد عشري بدقة عالية |
مثال:
float a = 3.14f;
long long b = 10000000000LL;
long double c = 3.1415926535L;إذا لم تُضِف لاحقة، فإن C++ تفترض النوع int للأعداد الصحيحة وdouble للأعداد العشرية.
الثوابت باستخدام #define (الطريقة القديمة)
قبل ظهور الكلمة المفتاحية const، كان المبرمجون يستخدمون #define لتعريف الثوابت:
#define PI 3.14159
#define GREETING "Hello"ما زالت هذه الطريقة تعمل، ولكن const تُعَدّ أكثر أمانًا ومُفضّلة في C++ الحديثة.
جدول المراجعة
| الطريقة | المثال | هل يمكن التغيير؟ | متى تُستخدم |
|---|---|---|---|
const |
const int x = 5; |
لا | دائمًا مع القيم الثابتة |
#define |
#define Z 15 |
لا | أسلوب قديم، يُفضّل تجنّبه في C++ الحديثة |
خلاصة سريعة
- استخدم
constمع القيم التي لا يجب أن تتغيّر. - استخدم اللواحق مثل
LLأوfلاختيار النوع العددي المناسب. - تجنّب
#defineللثوابت إلا عند قراءة كودٍ قديم.
باستخدام الثوابت، يصبح الكود أكثر أمانًا، وأوضح، وأسهل في الصيانة.