1. ما هي الثوابت (Constants)؟
🔸️ الثوابت هي قيم ثابتة لا يمكن تغييرها أثناء تنفيذ البرنامج.
🔸️ تُستخدم الثوابت لتخزين القيم التي لا تتغير، مثل القيم الرياضية (π = 3.14) أو الإعدادات الثابتة.
2. طرق تعريف الثوابت في C++
1️⃣ الطريقة الأولى:
🔰 استخدام #define
▪︎ #define
هي تعليمة للمعالج المسبق (Preprocessor) تُستخدم لتعريف ثوابت نصية (Macros).
💎 صيغة الاستخدام:
⚠️ ملاحظات:
• لا تحتاج إلى تحديد نوع البيانات.
• يتم استبدال اسم الثابت بالقيمة في جميع أنحاء الكود قبل الترجمة.
🔮 مثال:
2️⃣ الطريقة الثانية:
🔰 استخدام كلمة const
▪︎ const
هي كلمة مفتاحية تُستخدم لتعريف ثوابت ذات نوع محدد.
💎 صيغة الاستخدام:
⚠️ ملاحظات:
• يجب تحديد نوع البيانات.
• يتم التحقق من نوع البيانات أثناء الترجمة، مما يجعلها أكثر أمانًا من #define.
🔮 مثال:
3. الفرق بين #define و const
🔸️ الميزة : نوع البيانات
• الثابت (#define): لا يحتاج إلى تحديد نوع البيانات.
• الثابت (const) : يجب تحديد نوع البيانات.
🔹️ الميزة : التحقق من النوع
• الثابت (#define): لا يتم التحقق من النوع.
• الثابت (const) : يتم التحقق من النوع أثناء الترجمة.
🔸️ الميزة : النطاق (Scope)
• الثابت (#define): يعمل على مستوى الملف ككل.
• الثابت (const) : يعمل ضمن النطاق الذي تم تعريفه فيه.
🔹️ الميزة : الأمان
• الثابت (#define): أقل أمانًا بسبب عدم التحقق من النوع.
• الثابت (const) : أكثر أمانًا بسبب التحقق من النوع
🔸️ الميزة : الاستخدام الشائع
• الثابت (#define): يُستخدم للقيم البسيطة والنصوص.
• الثابت (const) : يُستخدم للثوابت ذات النوع المحدد.
🔰 4. أمثلة عملية لإستخدام الثوابت
🔮 مثال 1: استخدام #define
🔮 مثال 2: استخدام Const
5. نصائح لاستخدام الثوابت
1️⃣ اختيار الأسماء الوصفية:
▪︎ مثال: TAX_RATE أفضل من TR
2️⃣ استخدام const بدلاًمن #define عند الإمكان:
▪︎ يعتبر const أكثر أمانًا بسبب التحقق من نوع البيانات.
3️⃣ تجنب تغيير قيمة الثوابت:
▪︎ الثوابت يجب أن تبقى كما هي طوال فترة تنفيذ البرنامج.
6. الخلاصة العامة من درس الثوابت
• الثوابت تُستخدم لتخزين القيم الثابتة التي لا تتغير أثناء تنفيذ البرنامج.
• يمكن تعريف الثوابت باستخدام #define
أو const.
• يُفضل استخدام const بسبب التحقق من نوع البيانات وزيادة الأمان.
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الثامن_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
🔸️ الثوابت هي قيم ثابتة لا يمكن تغييرها أثناء تنفيذ البرنامج.
🔸️ تُستخدم الثوابت لتخزين القيم التي لا تتغير، مثل القيم الرياضية (π = 3.14) أو الإعدادات الثابتة.
2. طرق تعريف الثوابت في C++
1️⃣ الطريقة الأولى:
🔰 استخدام #define
▪︎ #define
هي تعليمة للمعالج المسبق (Preprocessor) تُستخدم لتعريف ثوابت نصية (Macros).
💎 صيغة الاستخدام:
#define اسم_الثابت القيمة
⚠️ ملاحظات:
• لا تحتاج إلى تحديد نوع البيانات.
• يتم استبدال اسم الثابت بالقيمة في جميع أنحاء الكود قبل الترجمة.
🔮 مثال:
#include <iostream>
using namespace std;
#define PI 3.14159
#define MAX_VALUE 100
int main() {
cout << "Value of PI: " << PI << endl;
cout << "Max Value: " << MAX_VALUE << endl;
return 0;
}
2️⃣ الطريقة الثانية:
🔰 استخدام كلمة const
▪︎ const
هي كلمة مفتاحية تُستخدم لتعريف ثوابت ذات نوع محدد.
💎 صيغة الاستخدام:
const نوع_البيانات اسم_الثابت = القيمة;
⚠️ ملاحظات:
• يجب تحديد نوع البيانات.
• يتم التحقق من نوع البيانات أثناء الترجمة، مما يجعلها أكثر أمانًا من #define.
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
const double PI = 3.14159;
const int MAX_VALUE = 100;
cout << "Value of PI: " << PI << endl;
cout << "Max Value: " << MAX_VALUE << endl;
return 0;
}
3. الفرق بين #define و const
🔸️ الميزة : نوع البيانات
• الثابت (#define): لا يحتاج إلى تحديد نوع البيانات.
• الثابت (const) : يجب تحديد نوع البيانات.
🔹️ الميزة : التحقق من النوع
• الثابت (#define): لا يتم التحقق من النوع.
• الثابت (const) : يتم التحقق من النوع أثناء الترجمة.
🔸️ الميزة : النطاق (Scope)
• الثابت (#define): يعمل على مستوى الملف ككل.
• الثابت (const) : يعمل ضمن النطاق الذي تم تعريفه فيه.
🔹️ الميزة : الأمان
• الثابت (#define): أقل أمانًا بسبب عدم التحقق من النوع.
• الثابت (const) : أكثر أمانًا بسبب التحقق من النوع
🔸️ الميزة : الاستخدام الشائع
• الثابت (#define): يُستخدم للقيم البسيطة والنصوص.
• الثابت (const) : يُستخدم للثوابت ذات النوع المحدد.
🔰 4. أمثلة عملية لإستخدام الثوابت
🔮 مثال 1: استخدام #define
#include <iostream>
using namespace std;
#define TAX_RATE 0.15
#define COMPANY_NAME "Tech Pro3dev"
int main() {
double salary = 5000.0;
double tax = salary * TAX_RATE;
cout << "Company: " << COMPANY_NAME << endl;
cout << "Salary: " << salary << endl;
cout << "Tax: " << tax << endl;
return 0;
}
🔮 مثال 2: استخدام Const
#include <iostream>
using namespace std;
int main() {
const double TAX_RATE = 0.15;
const string COMPANY_NAME = "Tech Pro3dev";
double salary = 5000.0;
double tax = salary * TAX_RATE;
cout << "Company: " << COMPANY_NAME << endl;
cout << "Salary: " << salary << endl;
cout << "Tax: " << tax << endl;
return 0;
}
5. نصائح لاستخدام الثوابت
1️⃣ اختيار الأسماء الوصفية:
▪︎ مثال: TAX_RATE أفضل من TR
2️⃣ استخدام const بدلاًمن #define عند الإمكان:
▪︎ يعتبر const أكثر أمانًا بسبب التحقق من نوع البيانات.
3️⃣ تجنب تغيير قيمة الثوابت:
▪︎ الثوابت يجب أن تبقى كما هي طوال فترة تنفيذ البرنامج.
6. الخلاصة العامة من درس الثوابت
• الثوابت تُستخدم لتخزين القيم الثابتة التي لا تتغير أثناء تنفيذ البرنامج.
• يمكن تعريف الثوابت باستخدام #define
أو const.
• يُفضل استخدام const بسبب التحقق من نوع البيانات وزيادة الأمان.
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الثامن_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
👍2
1. ما هي التعليقات (Comments)؟
🔸️ التعليقات هي نصوص يُضيفها المبرمج إلى الكود لتوضيح كيفية عمل البرنامج أو لتقديم ملاحظات.
🔹️ يتم تجاهل التعليقات تمامًا من قبل المترجم (Compiler) ولا تؤثر على تنفيذ البرنامج.
2. أنواع التعليقات في C++
1️⃣ التعليقات ذات السطر الواحد (Single-Line Comments)
• تبدأ بعلامة // وتنتهي بنهاية السطر.
🔰 صيغة الاستخدام:
🔮 مثال:
2️⃣ التعليقات متعددة الأسطر (Multi-Line Comments)
• تبدأ بعلامة /* وتنتهي بعلامة */.
🔰 صيغة الاستخدام:
🔮 مثال:
3. أهمية التعليقات في لغة ++C
🔹️ توضيح الكود
• التعليقات تساعد في توضيح الغرض من الكود وكيفية عمله.
🔮 مثال:
🔸️ تسهيل الصيانة
• التعليقات تجعل الكود أكثر قابلية للقراءة والفهم، مما يسهل صيانته وتحديثه لاحقًا.
🔮 مثال:
🔹️ التواصل مع المطورين الآخرين
• التعليقات تساعد المطورين الآخرين على فهم الكود بسرعة، خاصة في المشاريع الكبيرة.
🔮 مثال:
🔸️ تعطيل أجزاء من الكود (Debugging)
• يمكن استخدام التعليقات لتعطيل أجزاء من الكود مؤقتًا أثناء عملية التصحيح (Debugging).
🔮 مثال:
4. نصائح لكتابة التعليقات
▪︎ كن واضحًا وموجزًا:
• اكتب تعليقات واضحة وموجزة دون إطالة غير ضرورية.
▪︎تجنب التعليقات الواضحة (المفصلة):
• لا تكتب تعليقات توضح ما هو واضح من الكود.
🔮 مثال سيء:
▪︎ استخدم التعليقات لشرح "لماذا" وليس "ماذا":
• ركز على شرح سبب كتابة الكود بهذه الطريقة بدلاً من وصف ما يفعله الكود.
🔮 مثال جيد:
▪︎ تحديث التعليقات عند تغيير الكود:
• تأكد من تحديث التعليقات عند تعديل الكود لتجنب التضارب.
5. أمثلة عملية
🔮 مثال 1: توضيح الكود
🔮 مثال 2: تعطيل أجزاء من الكود
6. الخلاصة العامة لإستخدام التعليقات
• التعليقات تُستخدم لتوضيح الكود، تسهيل الصيانة، والمساعدة في عملية التصحيح.
• هناك نوعان من التعليقات في C++:
- تعليقات ذات سطر واحد (//)
- تعليقات متعددة الأسطر (/* ... */).
• كتابة تعليقات واضحة وموجزة يجعل الكود أكثر قابلية للقراءة والفهم.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_التاسع_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
🔸️ التعليقات هي نصوص يُضيفها المبرمج إلى الكود لتوضيح كيفية عمل البرنامج أو لتقديم ملاحظات.
🔹️ يتم تجاهل التعليقات تمامًا من قبل المترجم (Compiler) ولا تؤثر على تنفيذ البرنامج.
2. أنواع التعليقات في C++
1️⃣ التعليقات ذات السطر الواحد (Single-Line Comments)
• تبدأ بعلامة // وتنتهي بنهاية السطر.
🔰 صيغة الاستخدام:
// هذا تعليق على سطر واحد
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
// هذا تعليق يوضح أن المتغير age سيخزن العمر
int age = 25;
cout << "Age: " << age << endl; // طباعة العمر
return 0;
}
2️⃣ التعليقات متعددة الأسطر (Multi-Line Comments)
• تبدأ بعلامة /* وتنتهي بعلامة */.
🔰 صيغة الاستخدام:
/*
هذا تعليق
يمكن أن يمتد على عدة أسطر
*/
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
/*
هذا تعليق متعدد الأسطر
يوضح أن المتغيرات التالية تخزن
العمر والراتب
*/
int age = 25;
double salary = 1500.75;
cout << "Age: " << age << ", Salary: " << salary << endl;
return 0;
}
3. أهمية التعليقات في لغة ++C
🔹️ توضيح الكود
• التعليقات تساعد في توضيح الغرض من الكود وكيفية عمله.
🔮 مثال:
int result = a + b; // جمع القيمتين a و b وتخزين النتيجة في result
🔸️ تسهيل الصيانة
• التعليقات تجعل الكود أكثر قابلية للقراءة والفهم، مما يسهل صيانته وتحديثه لاحقًا.
🔮 مثال:
// حساب مساحة الدائرة
double area = PI * radius * radius;
🔹️ التواصل مع المطورين الآخرين
• التعليقات تساعد المطورين الآخرين على فهم الكود بسرعة، خاصة في المشاريع الكبيرة.
🔮 مثال:
// هذا الكود يحسب الضريبة بناءً على النسبة المحددة
double tax = salary * TAX_RATE;
🔸️ تعطيل أجزاء من الكود (Debugging)
• يمكن استخدام التعليقات لتعطيل أجزاء من الكود مؤقتًا أثناء عملية التصحيح (Debugging).
🔮 مثال:
// cout << "Debugging: " << x << endl; // تم تعطيل هذا السطر للتصحيح
4. نصائح لكتابة التعليقات
▪︎ كن واضحًا وموجزًا:
• اكتب تعليقات واضحة وموجزة دون إطالة غير ضرورية.
▪︎تجنب التعليقات الواضحة (المفصلة):
• لا تكتب تعليقات توضح ما هو واضح من الكود.
🔮 مثال سيء:
int x = 5; // تعيين القيمة 5 للمتغير x
▪︎ استخدم التعليقات لشرح "لماذا" وليس "ماذا":
• ركز على شرح سبب كتابة الكود بهذه الطريقة بدلاً من وصف ما يفعله الكود.
🔮 مثال جيد:
// استخدام خوارزمية سريعة بسبب حجم البيانات الكبير
sort(data, data + size);
▪︎ تحديث التعليقات عند تغيير الكود:
• تأكد من تحديث التعليقات عند تعديل الكود لتجنب التضارب.
5. أمثلة عملية
🔮 مثال 1: توضيح الكود
#include <iostream>
using namespace std;
int main() {
// تعريف متغيرات لتخزين العمر والراتب
int age = 25;
double salary = 1500.75;
// حساب الضريبة بناءً على النسبة المحددة
const double TAX_RATE = 0.15;
double tax = salary * TAX_RATE;
// طباعة النتائج
cout << "Age: " << age << endl;
cout << "Salary: " << salary << endl;
cout << "Tax: " << tax << endl;
return 0;
}
🔮 مثال 2: تعطيل أجزاء من الكود
#include <iostream>
using namespace std;
int main() {
int x = 10;
int y = 20;
// cout << "x: " << x << endl; // تم تعطيل هذا السطر للتصحيح
cout << "y: " << y << endl;
return 0;
}
6. الخلاصة العامة لإستخدام التعليقات
• التعليقات تُستخدم لتوضيح الكود، تسهيل الصيانة، والمساعدة في عملية التصحيح.
• هناك نوعان من التعليقات في C++:
- تعليقات ذات سطر واحد (//)
- تعليقات متعددة الأسطر (/* ... */).
• كتابة تعليقات واضحة وموجزة يجعل الكود أكثر قابلية للقراءة والفهم.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_التاسع_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
1. ما هو الكائن cin؟
• الكائن cin هو كائن الإدخال (Input Object) المُعرَّف في مكتبة <iostream>.
• يُستخدم لقراءة البيانات من المستخدم عبر لوحة المفاتيح (Standard Input).
• يعمل مع أنواع البيانات المختلفة مثل int, double, char, string, إلخ.
2. صيغة استخدام cin
💎 الصيغة العامة:
• العامل << هو عامل الاستخراج (Extraction Operator) ويُستخدم لقراءة البيانات من cin وتخزينها في المتغير.
3. قراءة أنواع البيانات المختلفة باستخدام cin
🔸️ 1. قراءة الأعداد الصحيحة (int)
🔹️ 2. قراءة الأعداد العشرية (double)
🔸️ 3. قراءة الحروف (char)
🔹️ 4. قراءة النصوص (string)
4. قراءة عدة مدخلات في سطر واحد
يمكنك قراءة عدة مدخلات في سطر واحد باستخدام cin مع عامل الاستخراج >> عدة مرات.
🔮 مثال:
5. مشكلة cin مع النصوص التي تحتوي على مسافات
❌ المشكلة في cin :
مشكلة الكائن cin يتوقف عند أول مسافة، مما يعني أنه لا يمكنه قراءة النصوص التي تحتوي على مسافات.
🔮 مثال:
✅ الحل: استخدام getline
الدالة getline تستخدم لقراءة سطر كامل من النص، بما في ذلك المسافات.
🔮 مثال:
6. تنظيف (Buffer) بعد استخدام cin
❌ المشكلة:
بعد استخدام cin، قد يتبقى حرف السطر الجديد (n\) فيBuffer ، مما يؤثر على getline.
✅ الحل: استخدام cin.ignore()
الجملة cin.ignore() تُستخدم لتجاهل الأحرف المتبقية فيBuffer.
🔮 مثال:
7. أمثلة عملية لفهم الكائن cin
🔮 مثال 1: برنامج بسيط لحساب مجموع عددين
🔮 مثال 2: برنامج لقراءة وعرض بيانات المستخدم
• الكائن cin هو كائن الإدخال (Input Object) المُعرَّف في مكتبة <iostream>.
• يُستخدم لقراءة البيانات من المستخدم عبر لوحة المفاتيح (Standard Input).
• يعمل مع أنواع البيانات المختلفة مثل int, double, char, string, إلخ.
2. صيغة استخدام cin
💎 الصيغة العامة:
cin >> متغير;
• العامل << هو عامل الاستخراج (Extraction Operator) ويُستخدم لقراءة البيانات من cin وتخزينها في المتغير.
3. قراءة أنواع البيانات المختلفة باستخدام cin
🔸️ 1. قراءة الأعداد الصحيحة (int)
#include <iostream>
using namespace std;
int main() {
int age;
cout << "Enter your age: ";
cin >> age; // قراءة العمر من المستخدم
cout << "You are " << age << " years old." << endl;
return 0;
}
🔹️ 2. قراءة الأعداد العشرية (double)
#include <iostream>
using namespace std;
int main() {
double salary;
cout << "Enter your salary: ";
cin >> salary; // قراءة الراتب من المستخدم
cout << "Your salary is: " << salary << endl;
return 0;
}
🔸️ 3. قراءة الحروف (char)
#include <iostream>
using namespace std;
int main() {
char grade;
cout << "Enter your grade: ";
cin >> grade; // قراءة الحرف من المستخدم
cout << "Your grade is: " << grade << endl;
return 0;
}
🔹️ 4. قراءة النصوص (string)
#include <iostream>
using namespace std;
int main() {
string name;
cout << "Enter your name: ";
cin >> name; // قراءة الاسم من المستخدم
cout << "Hello, " << name << "!" << endl;
return 0;
}
4. قراءة عدة مدخلات في سطر واحد
يمكنك قراءة عدة مدخلات في سطر واحد باستخدام cin مع عامل الاستخراج >> عدة مرات.
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
int age;
double salary;
string name;
cout << "Enter your name, age, and salary: ";
cin >> name >> age >> salary; // قراءة الاسم، العمر، والراتب في سطر واحد
cout << "Name: " << name << ", Age: " << age << ", Salary: " << salary << endl;
return 0;
}
5. مشكلة cin مع النصوص التي تحتوي على مسافات
❌ المشكلة في cin :
مشكلة الكائن cin يتوقف عند أول مسافة، مما يعني أنه لا يمكنه قراءة النصوص التي تحتوي على مسافات.
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
string fullName;
cout << "Enter your full name: ";
cin >> fullName; // سيقرأ فقط الجزء الأول من الاسم
cout << "Your full name is: " << fullName << endl;
return 0;
}
✅ الحل: استخدام getline
الدالة getline تستخدم لقراءة سطر كامل من النص، بما في ذلك المسافات.
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
string fullName;
cout << "Enter your full name: ";
getline(cin, fullName); // قراءة الاسم الكامل
cout << "Your full name is: " << fullName << endl;
return 0;
}
6. تنظيف (Buffer) بعد استخدام cin
❌ المشكلة:
بعد استخدام cin، قد يتبقى حرف السطر الجديد (n\) فيBuffer ، مما يؤثر على getline.
✅ الحل: استخدام cin.ignore()
الجملة cin.ignore() تُستخدم لتجاهل الأحرف المتبقية فيBuffer.
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
int age;
string name;
cout << "Enter your age: ";
cin >> age;
cin.ignore(); // تنظيف
cout << "Enter your name: ";
getline(cin, name);
cout << "Age: " << age << ", Name: " << name << endl;
return 0;
}
7. أمثلة عملية لفهم الكائن cin
🔮 مثال 1: برنامج بسيط لحساب مجموع عددين
#include <iostream>
using namespace std;
int main() {
int num1, num2;
cout << "Enter the first number: ";
cin >> num1;
cout << "Enter the second number: ";
cin >> num2;
int sum = num1 + num2;
cout << "Sum: " << sum << endl;
return 0;
}
🔮 مثال 2: برنامج لقراءة وعرض بيانات المستخدم
#include <iostream>
using namespace std;
int main() {
string name;
int age;
double height;
cout << "Enter your name: ";
getline(cin, name);
cout << "Enter your age: ";
cin >> age;
cout << "Enter your height (in meters): ";
cin >> height;
cout << "Name: " << name << ", Age: " << age << ", Height: " << height << " meters" << endl;
return 0;
}
🔥2
9. نصائح لاستخدام cin
🔰 استخدام endl أو n\ لإدخال سطر جديد:
▪︎ endl
يُفضل استخدامه لأنه يفرغ (Buffer) أيضًا.
▪︎ \n
أسرع ولكن لا يفرغ Buffer.
🔰 تجنب استخدام cin و getline معًا دون تنظيف buffer:
▪︎ بعد استخدام cin، قد يتبقى حرف السطر الجديد (n\) في buffer، مما يؤثر على getline.
🔸️ الحل:
▪︎ استخدام cin.ignore() لتنظيف Buffer
8. الخلاصة العامة لإستخدام الكائن cin
▪︎ الكائن cin يُستخدم لقراءة المدخلات من المستخدم.
▪︎ يمكن استخدامه مع أنواع البيانات المختلفة مثل int, double, char, string.
▪︎ الدالة getline تُستخدم لقراءة النصوص الكاملة التي تحتوي على مسافات.
▪︎ الجملة cin.ignore() يُستخدم لتنظيف Buffer بعد استخدام cin.
▪︎ كتابة كود واضح ومنظم مع استخدام التعليقات يجعل البرنامج أكثر قابلية للقراءة والصيانة
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_العاشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
🔰 استخدام endl أو n\ لإدخال سطر جديد:
▪︎ endl
يُفضل استخدامه لأنه يفرغ (Buffer) أيضًا.
▪︎ \n
أسرع ولكن لا يفرغ Buffer.
🔰 تجنب استخدام cin و getline معًا دون تنظيف buffer:
▪︎ بعد استخدام cin، قد يتبقى حرف السطر الجديد (n\) في buffer، مما يؤثر على getline.
🔸️ الحل:
▪︎ استخدام cin.ignore() لتنظيف Buffer
8. الخلاصة العامة لإستخدام الكائن cin
▪︎ الكائن cin يُستخدم لقراءة المدخلات من المستخدم.
▪︎ يمكن استخدامه مع أنواع البيانات المختلفة مثل int, double, char, string.
▪︎ الدالة getline تُستخدم لقراءة النصوص الكاملة التي تحتوي على مسافات.
▪︎ الجملة cin.ignore() يُستخدم لتنظيف Buffer بعد استخدام cin.
▪︎ كتابة كود واضح ومنظم مع استخدام التعليقات يجعل البرنامج أكثر قابلية للقراءة والصيانة
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_العاشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
👍3❤1
1. ما هو الكائن cout؟
• الكائن cout هو كائنالإخراج (Output Object) المُعرَّف في مكتبة <iostream>.
• يُستخدم لإرسال البيانات إلى الشاشة (Standard Output).
• يعمل مع أنواع البيانات المختلفة مثل int, double, char, string, إلخ.
2. صيغة استخدام cout
💎 الصيغة العامة:
• العامل >> هو عامل الإرسال (Insertion Operator) ويُستخدم لإرسال البيانات إلى cout.
3. إخراج أنواع البيانات المختلفة باستخدام cout
🔸️ 1. إخراج الأعداد الصحيحة (int)
🔹️ 2. إخراج الأعداد العشرية (double)
🔸️ 3. إخراج الحروف (char)
🔹️ 4. إخراج النصوص (string)
4. إخراج عدة مدخلات في سطر واحد
يمكنك إخراج عدة بيانات في سطر واحد باستخدام cout مع عامل الإرسال >> عدة مرات.
🔮 مثال:
5. استخدام endl و n\ لإدخال سطر جديد
▪︎ endl
ال endl يُستخدم لإدخال سطر جديد (New Line) ويفرغ (Buffer) أيضًا.
🔮 مثال
▪︎\n
ال \n يُستخدم لإدخال سطر جديد دون تفريغ.
🔮 مثال
6. تنسيق الإخراج
🔹️ . تحديد عدد الأرقام العشرية
يمكنك استخدام fixed و setprecision من مكتبة <iomanip> لتحديد عدد الأرقام العشرية.
🔮 مثال:
🔹️ محاذاة النصوص
يمكنك استخدام setw من مكتبة <iomanip> لتحديد عرض الحقل.
🔮 مثال:
7. أمثلة عملية لفهم الكائن cout
🔮 مثال 1: برنامج بسيط لعرض معلومات الطالب
🔮 مثال 2: برنامج لحساب مساحة الدائرة
8. الخلاصة العامة لإستخدام الكائن cout
• الكائن cout يُستخدم لإخراج البيانات إلى الشاشة.
• يمكن استخدامه مع أنواع البيانات المختلفة مثل int, double, char, string.
ال endl و n\ يُستخدمان لإدخال سطر جديد.
• يمكن تنسيق الإخراج باستخدام مكتبة <iomanip>.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الحادي_عشر_سي_بلس_بلس
#المستوى_الأول
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
• الكائن cout هو كائنالإخراج (Output Object) المُعرَّف في مكتبة <iostream>.
• يُستخدم لإرسال البيانات إلى الشاشة (Standard Output).
• يعمل مع أنواع البيانات المختلفة مثل int, double, char, string, إلخ.
2. صيغة استخدام cout
💎 الصيغة العامة:
cout << بيانات_للإخراج;
• العامل >> هو عامل الإرسال (Insertion Operator) ويُستخدم لإرسال البيانات إلى cout.
3. إخراج أنواع البيانات المختلفة باستخدام cout
🔸️ 1. إخراج الأعداد الصحيحة (int)
#include <iostream>
using namespace std;
int main() {
int age = 25;
cout << "Age: " << age << endl; // طباعة العمر
return 0;
}
🔹️ 2. إخراج الأعداد العشرية (double)
#include <iostream>
using namespace std;
int main() {
double salary = 1500.75;
cout << "Salary: " << salary << endl; // طباعة الراتب
return 0;
}
🔸️ 3. إخراج الحروف (char)
#include <iostream>
using namespace std;
int main() {
char grade = 'A';
cout << "Grade: " << grade << endl; // طباعة الحرف
return 0;
}
🔹️ 4. إخراج النصوص (string)
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl; // طباعة جملة "Hello, World!"
return 0;
}
4. إخراج عدة مدخلات في سطر واحد
يمكنك إخراج عدة بيانات في سطر واحد باستخدام cout مع عامل الإرسال >> عدة مرات.
🔮 مثال:
#include <iostream>
using namespace std;
int main() {
int age = 25;
double salary = 1500.75;
string name = "Ali";
cout << "Name: " << name << ", Age: " << age << ", Salary: " << salary << endl;
return 0;
}
5. استخدام endl و n\ لإدخال سطر جديد
▪︎ endl
ال endl يُستخدم لإدخال سطر جديد (New Line) ويفرغ (Buffer) أيضًا.
🔮 مثال
#include <iostream>
using namespace std;
int main() {
cout << "Line 1" << endl;
cout << "Line 2" << endl;
return 0;
}
▪︎\n
ال \n يُستخدم لإدخال سطر جديد دون تفريغ.
🔮 مثال
#include <iostream>
using namespace std;
int main() {
cout << "Line 1\n";
cout << "Line 2\n";
return 0;
}
6. تنسيق الإخراج
🔹️ . تحديد عدد الأرقام العشرية
يمكنك استخدام fixed و setprecision من مكتبة <iomanip> لتحديد عدد الأرقام العشرية.
🔮 مثال:
#include <iostream>
#include <iomanip> // لتضمين مكتبة التنسيق
using namespace std;
int main() {
double pi = 3.141592653589793;
cout << "Pi: " << fixed << setprecision(2) << pi << endl; // طباعة pi بدقة منزلتين عشريتين
return 0;
}
🔹️ محاذاة النصوص
يمكنك استخدام setw من مكتبة <iomanip> لتحديد عرض الحقل.
🔮 مثال:
#include <iostream>
#include <iomanip> // لتضمين مكتبة التنسيق
using namespace std;
int main() {
cout << setw(10) << "Name" << setw(10) << "Age" << endl;
cout << setw(10) << "Ali" << setw(10) << 25 << endl;
cout << setw(10) << "Ahmed" << setw(10) << 30 << endl;
return 0;
}
7. أمثلة عملية لفهم الكائن cout
🔮 مثال 1: برنامج بسيط لعرض معلومات الطالب
#include <iostream>
using namespace std;
int main() {
string name = "Ali";
int age = 20;
double gpa = 3.75;
cout << "Student Information:" << endl;
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "GPA: " << gpa << endl;
return 0;
}
🔮 مثال 2: برنامج لحساب مساحة الدائرة
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
const double PI = 3.14159;
double radius;
cout << "Enter the radius of the circle: ";
cin >> radius;
double area = PI * radius * radius;
cout << "Area of the circle: " << fixed << setprecision(2) << area << endl;
return 0;
}
8. الخلاصة العامة لإستخدام الكائن cout
• الكائن cout يُستخدم لإخراج البيانات إلى الشاشة.
• يمكن استخدامه مع أنواع البيانات المختلفة مثل int, double, char, string.
ال endl و n\ يُستخدمان لإدخال سطر جديد.
• يمكن تنسيق الإخراج باستخدام مكتبة <iomanip>.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الحادي_عشر_سي_بلس_بلس
#المستوى_الأول
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
❤3👍1
1. ما هي std::string؟
• نعتبر std::string على أنها فئة (Class) في لغة C++ والتي تُستخدم لتمثيل النصوص والتعامل معها.
• تُعتبر بديلاً أكثر مرونة وأمانًا لمصفوفات الأحرف ([]char) التي تُستخدم في لغة C.
2. تضمين مكتبة std::string
لاستخدام std::string، يجب تضمين مكتبة <string> في البرنامج.
3. تعريف النصوص (Strings)
🔰 صيغة التعريف:
🔮 أمثلة:
4. العمليات الأساسية على النصوص
1️⃣ القراءة من المستخدم
يمكن استخدام cin أو getline لقراءة النصوص من المستخدم.
🔸️ مثال باستخدام cin:
🔸️ مثال باستخدام getline:
2️⃣ التخصيص (Assignment)
يمكن تعيين نص جديد للمتغير باستخدام عامل التخصيص =
3️⃣ التسلسل (Concatenation)
يمكن دمج نصوص باستخدام عامل الجمع +
4️⃣ المقارنة (Comparison)
يمكن مقارنة نصوص باستخدام العوامل العلائقية مثل ==, !=, <, >, إلخ.
5️⃣ الوصول إلى الأحرف (Accessing Characters)
يمكن الوصول إلى الأحرف الفردية في النص باستخدام الأقواس المربعة [].
6️⃣ طول النص (Length)
يمكن الحصول على طول النص باستخدام الدالة ()length أو ()size.
7️⃣ البحث في النص (Searching)
يمكن البحث عن نص فرعي (Substring) باستخدام الدالة ()find.
8️⃣ استبدال النص (Replacing)
يمكن استبدال جزء من النص باستخدام الدالة ()replace.
📟 النتيجة على الشاشة:
• نعتبر std::string على أنها فئة (Class) في لغة C++ والتي تُستخدم لتمثيل النصوص والتعامل معها.
• تُعتبر بديلاً أكثر مرونة وأمانًا لمصفوفات الأحرف ([]char) التي تُستخدم في لغة C.
2. تضمين مكتبة std::string
لاستخدام std::string، يجب تضمين مكتبة <string> في البرنامج.
#include <string>
3. تعريف النصوص (Strings)
🔰 صيغة التعريف:
std::string اسم_المتغير = "النص";
🔮 أمثلة:
#include <iostream>
#include <string> // تضمين مكتبة النصوص
using namespace std;
int main() {
string name = "Ali"; // تعريف نص
cout << "Name: " << name << endl;
return 0;
}
4. العمليات الأساسية على النصوص
1️⃣ القراءة من المستخدم
يمكن استخدام cin أو getline لقراءة النصوص من المستخدم.
🔸️ مثال باستخدام cin:
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "Enter your name: ";
cin >> name; // قراءة النص (يتوقف عند أول مسافة)
cout << "Hello, " << name << "!" << endl;
return 0;
}
🔸️ مثال باستخدام getline:
#include <iostream>
#include <string>
using namespace std;
int main() {
string fullName;
cout << "Enter your full name: ";
getline(cin, fullName); // قراءة النص الكامل (بما في ذلك المسافات)
cout << "Hello, " << fullName << "!" << endl;
return 0;
}
2️⃣ التخصيص (Assignment)
يمكن تعيين نص جديد للمتغير باستخدام عامل التخصيص =
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello";
cout << "Original Text: " << text << endl;
text = "World"; // تعيين نص جديد
cout << "Updated Text: " << text << endl;
return 0;
}
3️⃣ التسلسل (Concatenation)
يمكن دمج نصوص باستخدام عامل الجمع +
#include <iostream>
#include <string>
using namespace std;
int main() {
string firstName = "Ali";
string lastName = "Ahmed";
string fullName = firstName + " " + lastName; // دمج النصوص
cout << "Full Name: " << fullName << endl;
return 0;
}
4️⃣ المقارنة (Comparison)
يمكن مقارنة نصوص باستخدام العوامل العلائقية مثل ==, !=, <, >, إلخ.
#include <iostream>
#include <string>
using namespace std;
int main() {
string text1 = "apple";
string text2 = "banana";
if (text1 == text2) {
cout << "The texts are equal." << endl;
} else {
cout << "The texts are not equal." << endl;
}
return 0;
}
5️⃣ الوصول إلى الأحرف (Accessing Characters)
يمكن الوصول إلى الأحرف الفردية في النص باستخدام الأقواس المربعة [].
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello";
cout << "First character: " << text[0] << endl; // الوصول إلى الحرف الأول
cout << "Last character: " << text[text.length() - 1] << endl; // الوصول إلى الحرف الأخير
return 0;
}
6️⃣ طول النص (Length)
يمكن الحصول على طول النص باستخدام الدالة ()length أو ()size.
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
cout << "Length of text: " << text.length() << endl; // طول النص
cout << "Size of text: " << text.size() << endl; // نفس النتيجة
return 0;
}
7️⃣ البحث في النص (Searching)
يمكن البحث عن نص فرعي (Substring) باستخدام الدالة ()find.
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
size_t pos = text.find("World"); // البحث عن "World"
if (pos != string::npos) {
cout << "Found at position: " << pos << endl;
} else {
cout << "Not found." << endl;
}
return 0;
}
8️⃣ استبدال النص (Replacing)
يمكن استبدال جزء من النص باستخدام الدالة ()replace.
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
text.replace(7, 5, "C++"); // استبدال "World" بـ "C++"
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:
Updated Text: Hello, C++!
9️⃣ . استخراج النص الفرعي (Substring)
يمكن استخراج جزء من النص باستخدام الدالة ()substr.
📟 النتيجة على الشاشة:
5. أمثلة عملية
🔮 مثال 1: برنامج لتحويل النص إلى أحرف كبيرة (Uppercase)
🔮 مثال 2: برنامج لعكس النص (Reverse)
6. الخلاصة العامة لإستخدام string
• الكلاس std::string تُستخدم لتمثيل النصوص والتعامل معها في C++.
• تدعم العديد من العمليات مثل القراءة، الكتابة، التسلسل، المقارنة، الوصول إلى الأحرف، البحث، الاستبدال، واستخراج النصوص الفرعية.
• استخدام std::string يجعل التعامل مع النصوص أكثر مرونة وأمانًا مقارنة بمصفوفات الأحرف.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الثاني_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
@artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
يمكن استخراج جزء من النص باستخدام الدالة ()substr.
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
string sub = text.substr(7, 5); // استخراج "World"
cout << "Substring: " << sub << endl;
return 0;
}
📟 النتيجة على الشاشة:
Substring: World
5. أمثلة عملية
🔮 مثال 1: برنامج لتحويل النص إلى أحرف كبيرة (Uppercase)
#include <iostream>
#include <string>
#include <algorithm> // لتضمين transform
using namespace std;
int main() {
string text = "hello, world!";
transform(text.begin(), text.end(), text.begin(), ::toupper); // تحويل النص إلى أحرف كبيرة
cout << "Uppercase Text: " << text << endl;
return 0;
}
🔮 مثال 2: برنامج لعكس النص (Reverse)
#include <iostream>
#include <string>
#include <algorithm> // لتضمين reverse
using namespace std;
int main() {
string text = "Hello, World!";
reverse(text.begin(), text.end()); // عكس النص
cout << "Reversed Text: " << text << endl;
return 0;
}
6. الخلاصة العامة لإستخدام string
• الكلاس std::string تُستخدم لتمثيل النصوص والتعامل معها في C++.
• تدعم العديد من العمليات مثل القراءة، الكتابة، التسلسل، المقارنة، الوصول إلى الأحرف، البحث، الاستبدال، واستخراج النصوص الفرعية.
• استخدام std::string يجعل التعامل مع النصوص أكثر مرونة وأمانًا مقارنة بمصفوفات الأحرف.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الثاني_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
@artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
1. الدوال الشائعة للتعامل مع النصوص
🔰 الدالة ()length أو ()size
🔸️ الهدف: الحصول على طول النص (عدد الأحرف).
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()empty
🔸️ الهدف: التحقق مما إذا كان النص فارغًا.
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()clear
🔸️ الهدف: مسح محتوى النص.
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()append
🔸️ الهدف : إضافة نص إلى النهاية.
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰الدالة ()compare
🔸️ الهدف: مقارنة نصين.
🔹️ الصيغة:
▪︎النتيجة:
• قيمة صفر 0 إذا كان النصان متساويين.
• قيمة سالبة إذا كان text1 أصغر من text2.
• قيمة موجبة إذا كان text1 أكبر من text2
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()find
🔸️ الهدف : البحث عن نص فرعي (Substring) داخل النص.
🔹️ الصيغة:
▪︎ النتيجة: موقع النص الفرعي إذا تم العثور عليه، أو string::npos إذا لم يتم العثور عليه.
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()replace
🔸️ الهدف : استبدال جزء من النص بنص آخر.
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()substr
🔸️ الهدف : استخراج جزء من النص (Substring).
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()length أو ()size
🔸️ الهدف: الحصول على طول النص (عدد الأحرف).
🔹️ الصيغة:
int length = text.length();
int size = text.size();
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
cout << "Length: " << text.length() << endl; // 13
cout << "Size: " << text.size() << endl; // 13
return 0;
}
📟 النتيجة على الشاشة:👇
Length: 13
Size: 13
🔰 الدالة ()empty
🔸️ الهدف: التحقق مما إذا كان النص فارغًا.
🔹️ الصيغة:
bool isEmpty = text.empty();
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "";
if (text.empty()) {
cout << "The text is empty." << endl;
} else {
cout << "The text is not empty." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
The text is empty.
🔰 الدالة ()clear
🔸️ الهدف: مسح محتوى النص.
🔹️ الصيغة:
text.clear();
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
cout << "Before clear: " << text << endl;
text.clear();
cout << "After clear: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Before clear: Hello, World!
After clear:
🔰 الدالة ()append
🔸️ الهدف : إضافة نص إلى النهاية.
🔹️ الصيغة:
text.append("additional text");
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello";
text.append(", World!");
cout << "Appended Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Appended Text: Hello, World!
🔰الدالة ()compare
🔸️ الهدف: مقارنة نصين.
🔹️ الصيغة:
int result = text1.compare(text2);
▪︎النتيجة:
• قيمة صفر 0 إذا كان النصان متساويين.
• قيمة سالبة إذا كان text1 أصغر من text2.
• قيمة موجبة إذا كان text1 أكبر من text2
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text1 = "apple";
string text2 = "banana";
int result = text1.compare(text2);
if (result == 0) {
cout << "The texts are equal." << endl;
} else if (result < 0) {
cout << "text1 is less than text2." << endl;
} else {
cout << "text1 is greater than text2." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
text1 is less than text2.
🔰 الدالة ()find
🔸️ الهدف : البحث عن نص فرعي (Substring) داخل النص.
🔹️ الصيغة:
size_t pos = text.find("substring");
▪︎ النتيجة: موقع النص الفرعي إذا تم العثور عليه، أو string::npos إذا لم يتم العثور عليه.
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
size_t pos = text.find("World");
if (pos != string::npos) {
cout << "Found at position: " << pos << endl;
} else {
cout << "Not found." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
Found at position: 7
🔰 الدالة ()replace
🔸️ الهدف : استبدال جزء من النص بنص آخر.
🔹️ الصيغة:
text.replace(start, length, "new text");
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
text.replace(7, 5, "C++"); // استبدال "World" بـ "C++"
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, C++!
🔰 الدالة ()substr
🔸️ الهدف : استخراج جزء من النص (Substring).
🔹️ الصيغة:
string sub = text.substr(start, length);
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
string sub = text.substr(7, 5); // استخراج "World"
cout << "Substring: " << sub << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Substring: World
👍1
🔰 الدالة ()insert
🔸️ الهدف : إدراج نص في موضع محدد.
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 الدالة ()erase
🔸️ الهدف : حذف جزء من النص.
🔹️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
2. أمثلة عملية لمختلف دوال النصوص
🔮 مثال 1: برنامج لتحويل النص إلى أحرف كبيرة (Uppercase)
📟 النتيجة على الشاشة:👇
🔮 مثال 2: برنامج لعكس النص (Reverse)
📟 النتيجة على الشاشة:👇
3. الخلاصة العامة لإستخدام دوال النصوص
▪︎ كلاس std::string توفر العديد من الدوال الشائعة للتعامل مع النصوص مثل length(), empty(), clear(), append(), compare(), find(), re٠place(), substr(), insert(), و erase().
▪︎ هذه الدوال تجعل التعامل مع النصوص أكثر مرونة وسهولة في C++.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الثالث_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
🔸️ الهدف : إدراج نص في موضع محدد.
🔹️ الصيغة:
text.insert(position, "text to insert");
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, !";
text.insert(7, "World"); // إدراج "World" في الموضع 7
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, World!
🔰 الدالة ()erase
🔸️ الهدف : حذف جزء من النص.
🔹️ الصيغة:
text.erase(start, length);
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
text.erase(7, 5); // حذف "World"
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, !
2. أمثلة عملية لمختلف دوال النصوص
🔮 مثال 1: برنامج لتحويل النص إلى أحرف كبيرة (Uppercase)
#include <iostream>
#include <string>
#include <algorithm> // لتضمين transform
using namespace std;
int main() {
string text = "hello, world!";
transform(text.begin(), text.end(), text.begin(), ::toupper); // تحويل النص إلى أحرف كبيرة
cout << "Uppercase Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Uppercase Text: HELLO, WORLD!
🔮 مثال 2: برنامج لعكس النص (Reverse)
#include <iostream>
#include <string>
#include <algorithm> // لتضمين reverse
using namespace std;
int main() {
string text = "Hello, World!";
reverse(text.begin(), text.end()); // عكس النص
cout << "Reversed Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Reversed Text: !dlroW ,olleH
3. الخلاصة العامة لإستخدام دوال النصوص
▪︎ كلاس std::string توفر العديد من الدوال الشائعة للتعامل مع النصوص مثل length(), empty(), clear(), append(), compare(), find(), re٠place(), substr(), insert(), و erase().
▪︎ هذه الدوال تجعل التعامل مع النصوص أكثر مرونة وسهولة في C++.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الثالث_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
👍1
🔰 مقارنة النصوص
1️⃣ استخدام عامل المقارنة (==, !=, <, >, <=, >=)
يمكن مقارنة نصوص باستخدام العوامل العلائقية مباشرة.
🔮 مثال:
📟 النتيجة على الشاشة:👇
2️⃣ استخدام الدالة ()compare
توفر كلاس std::string الدالة ()compare لمقارنة نصوص بدقة أكبر.
🔸️ الصيغة:
🔹️ النتيجة:
• القيمة 0 إذا كان النصان متساويين.
• قيمة سالبة إذا كان text1 أصغر من text2.
• قيمة موجبة إذا كان text1 أكبر من text2.
🔮 مثال:
📟 النتيجة على الشاشة:👇
🔰 تعديل النصوص
1️⃣ إضافة نص (append() أو +=)
يمكن إضافة نص إلى النهاية باستخدام append() أو عامل الإضافة +=.
🔮 مثال:
📟 النتيجة على الشاشة:👇
2️⃣ إدراج نص (()insert)
يمكن إدراج نص في موضع محدد باستخدام الدالة ()insert.
🔸️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
3️⃣ استبدال نص (()replace)
يمكن استبدال جزء من النص بنص آخر باستخدام الدالة ()replace.
🔸️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
4️⃣ حذف نص (()erase)
يمكن حذف جزء من النص باستخدام الدالة ()erase
🔸️ الصيغة:
🔮 مثال:
📟 النتيجة على الشاشة:👇
5️⃣ تحويل النص إلى أحرف كبيرة أو صغيرة
يمكن تحويل النص إلى أحرف كبيرة (Uppercase) أو صغيرة (Lowercase) باستخدام الدوال ()toupper و ()tolower من مكتبة <algorithm>.
🔮 مثال:
📟 النتيجة على الشاشة:👇
1️⃣ استخدام عامل المقارنة (==, !=, <, >, <=, >=)
يمكن مقارنة نصوص باستخدام العوامل العلائقية مباشرة.
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text1 = "apple";
string text2 = "banana";
if (text1 == text2) {
cout << "The texts are equal." << endl;
} else if (text1 < text2) {
cout << "text1 is less than text2." << endl;
} else {
cout << "text1 is greater than text2." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
text1 is less than text2.
2️⃣ استخدام الدالة ()compare
توفر كلاس std::string الدالة ()compare لمقارنة نصوص بدقة أكبر.
🔸️ الصيغة:
int result = text1.compare(text2);
🔹️ النتيجة:
• القيمة 0 إذا كان النصان متساويين.
• قيمة سالبة إذا كان text1 أصغر من text2.
• قيمة موجبة إذا كان text1 أكبر من text2.
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text1 = "apple";
string text2 = "banana";
int result = text1.compare(text2);
if (result == 0) {
cout << "The texts are equal." << endl;
} else if (result < 0) {
cout << "text1 is less than text2." << endl;
} else {
cout << "text1 is greater than text2." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
text1 is less than text2.
🔰 تعديل النصوص
1️⃣ إضافة نص (append() أو +=)
يمكن إضافة نص إلى النهاية باستخدام append() أو عامل الإضافة +=.
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello";
text.append(", World!"); // إضافة نص باستخدام append
text += " How are you?"; // إضافة نص باستخدام +=
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, World! How are you?
2️⃣ إدراج نص (()insert)
يمكن إدراج نص في موضع محدد باستخدام الدالة ()insert.
🔸️ الصيغة:
text.insert(position, "text to insert");
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, !";
text.insert(7, "World"); // إدراج "World" في الموضع 7
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, World!
3️⃣ استبدال نص (()replace)
يمكن استبدال جزء من النص بنص آخر باستخدام الدالة ()replace.
🔸️ الصيغة:
text.replace(start, length, "new text");
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
text.replace(7, 5, "C++"); // استبدال "World" بـ "C++"
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, C++!
4️⃣ حذف نص (()erase)
يمكن حذف جزء من النص باستخدام الدالة ()erase
🔸️ الصيغة:
text.erase(start, length);
🔮 مثال:
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
text.erase(7, 5); // حذف "World"
cout << "Updated Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Updated Text: Hello, !
5️⃣ تحويل النص إلى أحرف كبيرة أو صغيرة
يمكن تحويل النص إلى أحرف كبيرة (Uppercase) أو صغيرة (Lowercase) باستخدام الدوال ()toupper و ()tolower من مكتبة <algorithm>.
🔮 مثال:
#include <iostream>
#include <string>
#include <algorithm> // لتضمين transform
using namespace std;
int main() {
string text = "Hello, World!";
// تحويل النص إلى أحرف كبيرة
transform(text.begin(), text.end(), text.begin(), ::toupper);
cout << "Uppercase Text: " << text << endl;
// تحويل النص إلى أحرف صغيرة
transform(text.begin(), text.end(), text.begin(), ::tolower);
cout << "Lowercase Text: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Uppercase Text: HELLO, WORLD!
Lowercase Text: hello, world!
👍3
🔰 أمثلة عملية
🔮 مثال 1: برنامج لمقارنة نصوص وإظهار النتيجة
📟 النتيجة على الشاشة:👇
🔮 مثال 2: برنامج لتعديل نص (إضافة، إدراج، استبدال، حذف)
📟 النتيجة على الشاشة:👇
🔰 الخلاصة
▪︎ مقارنة النصوص: يمكن استخدام العوامل العلائقية (==, !=, <, >, <=, >=) أو الدالة ()compare.
▪︎ تعديل النصوص: يمكن إضافة (()append أو +=)، إدراج (()insert)، استبدال (()replace)، حذف (()erase)، وتحويل النص إلى أحرف كبيرة أو صغيرة (()transform).
▪︎ هذه العمليات تجعل التعامل مع النصوص في C++ أكثر مرونة وسهولة.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الرابع_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
🔮 مثال 1: برنامج لمقارنة نصوص وإظهار النتيجة
#include <iostream>
#include <string>
using namespace std;
int main() {
string text1, text2;
cout << "Enter the first text: ";
getline(cin, text1);
cout << "Enter the second text: ";
getline(cin, text2);
if (text1 == text2) {
cout << "The texts are equal." << endl;
} else if (text1 < text2) {
cout << "text1 is less than text2." << endl;
} else {
cout << "text1 is greater than text2." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
Enter the first text: pro3dev
Enter the second text: learn c++
text1 is greater than text2.
🔮 مثال 2: برنامج لتعديل نص (إضافة، إدراج، استبدال، حذف)
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = "Hello, World!";
// إضافة نص
text.append(" How are you?");
cout << "After append: " << text << endl;
// إدراج نص
text.insert(7, "Beautiful ");
cout << "After insert: " << text << endl;
// استبدال نص
text.replace(7, 9, "Wonderful");
cout << "After replace: " << text << endl;
// حذف نص
text.erase(7, 9);
cout << "After erase: " << text << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
After append: Hello, World! How are you?
After insert: Hello, Beautiful World! How are you?
After replace: Hello, Wonderful World! How are you?
After erase: Hello, World! How are you?
🔰 الخلاصة
▪︎ مقارنة النصوص: يمكن استخدام العوامل العلائقية (==, !=, <, >, <=, >=) أو الدالة ()compare.
▪︎ تعديل النصوص: يمكن إضافة (()append أو +=)، إدراج (()insert)، استبدال (()replace)، حذف (()erase)، وتحويل النص إلى أحرف كبيرة أو صغيرة (()transform).
▪︎ هذه العمليات تجعل التعامل مع النصوص في C++ أكثر مرونة وسهولة.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الرابع_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
👍4❤1
1. مقدمة عن العمليات الحسابية والمنطقية
🔰 العمليات الحسابية (Arithmetic Operations)
العمليات الحسابية هي العمليات الأساسية التي نستخدمها في الرياضيات مثل الجمع، الطرح، الضرب، والقسمة.
في البرمجة، تُستخدم العمليات الحسابية لإجراء حسابات رياضية على البيانات، مثل حساب المجموع، الفرق، الناتج، أو النسبة.
🔸️ أهميتها في البرمجة:
• تُستخدم في حل المشكلات الرياضية والعلمية.
• تُستخدم في تطبيقات مثل الحسابات المالية، الرسوم البيانية، والمحاكاة.
• تُعتبر أساسًا للعديد من الخوارزميات والهياكل البرمجية.
🔰 العمليات المنطقية (Logical Operations)
العمليات المنطقية هي عمليات تُستخدم لاتخاذ القرارات بناءً على شروط معينة.
في البرمجة، تُستخدم العمليات المنطقية لفحص الشروط واتخاذ القرارات، مثل التحقق من صحة شرط ما أو مقارنة قيم متغيرات.
🔸️ أهميتها في البرمجة:
• تُستخدم في بناء الشروط (if-else) والحلقات (loops).
• تُستخدم في التحقق من صحة البيانات واتخاذ القرارات بناءً على النتائج.
• تُعتبر أساسًا للبرمجة الشرطية والتحكم في تدفق البرنامج.
2. الفرق بين العمليات الحسابية والمنطقية
🔸️ الميزة : الهدف
▪︎العمليات الحسابية : إجراء حسابات رياضية.
▪︎العمليات المنطقية : اتخاذ قرارات بناءً على شروط
🔹️ الميزة : الأمثلة
▪︎العمليات الحسابية : الجمع (+)، الطرح (-)، الضرب (*)، القسمة (/).
▪︎العمليات المنطقية : AND (&&)، OR (
🔸️ الميزة : نوع النتيجة
▪︎العمليات الحسابية : عدد (صحيح أو عشري).
▪︎العمليات المنطقية : قيمة منطقية (true أو false).
🔹️ الميزة : الإستخدام الشائع
▪︎العمليات الحسابية : الحسابات الرياضية.
▪︎العمليات المنطقية : الشروط، الحلقات، التحقق من البيانات
3. أهمية العمليات الحسابية والمنطقية في البرمجة
🔰 العمليات الحسابية
• حل المشكلات الرياضية: مثل حساب المساحات، الأطوال، النسب، وغيرها.
• تطبيقات علمية: مثل المحاكاة، الرسوم البيانية، والتحليل العددي.
• تطبيقات مالية: مثل حساب الفوائد، الضرائب، والميزانيات.
🔰 العمليات المنطقية
• اتخاذ القرارات: مثل التحقق من صحة بيانات المستخدم أو اختيار مسار معين في البرنامج.
• التحكم في بلوكات البرنامج: مثل استخدام الشروط (if-else) والحلقات (for, while).
• التحقق من الشروط: مثل التحقق من تسجيل الدخول، التحقق من صحة الإدخال، وغيرها.
4. أمثلة توضيحية
🔮 مثال 1: استخدام العمليات الحسابية
📟 النتيجة على الشاشة:👇
📟 النتيجة على الشاشة:👇
5. الخلاصة العامة لإستخدام العمليات الحسابية و المنطقية
▪︎ العمليات الحسابية: تُستخدم لإجراء حسابات رياضية مثل الجمع، الطرح، الضرب، والقسمة.
▪︎ العمليات المنطقية: تُستخدم لاتخاذ قرارات بناءً على شروط، مثل التحقق من صحة بيانات أو اختيار مسار معين في البرنامج.
▪︎ كلاهما أساسي في البرمجة ويُستخدم في حل المشكلات وبناء التطبيقات.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الخامس_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
🔰 العمليات الحسابية (Arithmetic Operations)
العمليات الحسابية هي العمليات الأساسية التي نستخدمها في الرياضيات مثل الجمع، الطرح، الضرب، والقسمة.
في البرمجة، تُستخدم العمليات الحسابية لإجراء حسابات رياضية على البيانات، مثل حساب المجموع، الفرق، الناتج، أو النسبة.
🔸️ أهميتها في البرمجة:
• تُستخدم في حل المشكلات الرياضية والعلمية.
• تُستخدم في تطبيقات مثل الحسابات المالية، الرسوم البيانية، والمحاكاة.
• تُعتبر أساسًا للعديد من الخوارزميات والهياكل البرمجية.
🔰 العمليات المنطقية (Logical Operations)
العمليات المنطقية هي عمليات تُستخدم لاتخاذ القرارات بناءً على شروط معينة.
في البرمجة، تُستخدم العمليات المنطقية لفحص الشروط واتخاذ القرارات، مثل التحقق من صحة شرط ما أو مقارنة قيم متغيرات.
🔸️ أهميتها في البرمجة:
• تُستخدم في بناء الشروط (if-else) والحلقات (loops).
• تُستخدم في التحقق من صحة البيانات واتخاذ القرارات بناءً على النتائج.
• تُعتبر أساسًا للبرمجة الشرطية والتحكم في تدفق البرنامج.
2. الفرق بين العمليات الحسابية والمنطقية
🔸️ الميزة : الهدف
▪︎العمليات الحسابية : إجراء حسابات رياضية.
▪︎العمليات المنطقية : اتخاذ قرارات بناءً على شروط
🔹️ الميزة : الأمثلة
▪︎العمليات الحسابية : الجمع (+)، الطرح (-)، الضرب (*)، القسمة (/).
▪︎العمليات المنطقية : AND (&&)، OR (
)، NOT (!
).🔸️ الميزة : نوع النتيجة
▪︎العمليات الحسابية : عدد (صحيح أو عشري).
▪︎العمليات المنطقية : قيمة منطقية (true أو false).
🔹️ الميزة : الإستخدام الشائع
▪︎العمليات الحسابية : الحسابات الرياضية.
▪︎العمليات المنطقية : الشروط، الحلقات، التحقق من البيانات
3. أهمية العمليات الحسابية والمنطقية في البرمجة
🔰 العمليات الحسابية
• حل المشكلات الرياضية: مثل حساب المساحات، الأطوال، النسب، وغيرها.
• تطبيقات علمية: مثل المحاكاة، الرسوم البيانية، والتحليل العددي.
• تطبيقات مالية: مثل حساب الفوائد، الضرائب، والميزانيات.
🔰 العمليات المنطقية
• اتخاذ القرارات: مثل التحقق من صحة بيانات المستخدم أو اختيار مسار معين في البرنامج.
• التحكم في بلوكات البرنامج: مثل استخدام الشروط (if-else) والحلقات (for, while).
• التحقق من الشروط: مثل التحقق من تسجيل الدخول، التحقق من صحة الإدخال، وغيرها.
4. أمثلة توضيحية
🔮 مثال 1: استخدام العمليات الحسابية
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 5;
int sum = a + b; // جمع
int difference = a - b; // طرح
int product = a * b; // ضرب
double quotient = (double)a / b; // قسمة
cout << "Sum: " << sum << endl;
cout << "Difference: " << difference << endl;
cout << "Product: " << product << endl;
cout << "Quotient: " << quotient << endl;
return 0;
}
📟 النتيجة على الشاشة:👇
Sum: 15🔮 مثال 2: استخدام العمليات المنطقية
Difference: 5
Product: 50
Quotient: 2
#include <iostream>
using namespace std;
int main() {
int age = 20;
bool isStudent = true;
if (age >= 18 && isStudent) { // استخدام AND (`&&`)
cout << "You are an adult student." << endl;
} else {
cout << "You are not an adult student." << endl;
}
return 0;
}
📟 النتيجة على الشاشة:👇
You are an adult student
5. الخلاصة العامة لإستخدام العمليات الحسابية و المنطقية
▪︎ العمليات الحسابية: تُستخدم لإجراء حسابات رياضية مثل الجمع، الطرح، الضرب، والقسمة.
▪︎ العمليات المنطقية: تُستخدم لاتخاذ قرارات بناءً على شروط، مثل التحقق من صحة بيانات أو اختيار مسار معين في البرنامج.
▪︎ كلاهما أساسي في البرمجة ويُستخدم في حل المشكلات وبناء التطبيقات.
#برمجة_و_تطوير
#دورة_سي_بلس_بلس
#C_plus_plus
#الدرس_الخامس_عشر_سي_بلس_بلس
#المستوى_الأول
✅ الرجاء متابعة قناتنا 👇
https://t.me/artificial_AI_intelligence
🥰 قال رسول الله ﷺ << إذا مات ابن آدم؛ انقطع عمله إلا من ثلاث: صدقة جارية، أو علم ينتفع به، أو ولد صالح يدعو له >> رواه مسلم.
🤗 اذا إستفدت من الدرس لا تنسى الدعاء لنا 🤲
✏ مبادئ الكود النظيف Clean Code
في عالم البرمجة، يعد كتابة كود نظيف من الأمور الأساسية التي يجب أن يتقنها كل مطور. إن الكود النظيف لا يعني فقط أن يكون الكود خالياً من الأخطاء، بل يتعدى ذلك ليشمل تنظيمه، وضوحه، وسهولة صيانته. في هذه المقالة، سنتناول مبادئ الكود النظيف، مع التركيز على مبادئ SOLID التي تعد من الركائز الأساسية لتطوير البرمجيات الحديثة.
في عالم البرمجة، يعد كتابة كود نظيف من الأمور الأساسية التي يجب أن يتقنها كل مطور. إن الكود النظيف لا يعني فقط أن يكون الكود خالياً من الأخطاء، بل يتعدى ذلك ليشمل تنظيمه، وضوحه، وسهولة صيانته. في هذه المقالة، سنتناول مبادئ الكود النظيف، مع التركيز على مبادئ SOLID التي تعد من الركائز الأساسية لتطوير البرمجيات الحديثة.
🔰 ما هو الكود النظيف؟
الكود النظيف هو مصطلح يشير إلى كتابة كود برمجي يتمتع بعدة خصائص، مثل الوضوح، والسهولة في الفهم، والقدرة على التعديل. إن كتابة كود نظيف تسهل على المطورين الآخرين فهم الكود والتفاعل معه، مما يقلل من الأخطاء ويزيد من كفاءة العمل. الكود النظيف هو أساس البرمجيات القابلة للصيانة والتطوير على المدى الطويل.
🔰 أهمية مبادئ SOLID
مبادئ SOLID هي مجموعة من المبادئ التي تهدف إلى تحسين تصميم البرمجيات. هذه المبادئ تساعد المطورين على كتابة كود أكثر قابلية للصيانة والتوسع. دعونا نستعرض هذه المبادئ بالتفصيل.
1️⃣ مبدأ المسؤولية الواحدة (Single Responsibility Principle - SRP)
ينص هذا المبدأ على أن كل كلاس أو ميثود يجب أن تكون لها مسؤولية واحدة فقط. بمعنى آخر، يجب أن يكون هناك سبب واحد فقط يدفعك لتعديل الكلاس أو الميثود. على سبيل المثال، إذا كان لديك كلاس يمثل طلباً في متجر إلكتروني، يجب أن يتعامل هذا الكلاس فقط مع تفاصيل الطلب، مثل حساب المجموع أو إدارة العناصر الموجودة فيه. إذا كنت بحاجة إلى تنفيذ عملية دفع، يجب أن تكون هناك كلاس منفصلة للتعامل مع الدفع.
2️⃣ مبدأ الانفتاح والإغلاق (Open/Closed Principle - OCP)
يقول هذا المبدأ إن الكود يجب أن يكون مفتوحًا للإضافة، لكن مغلقًا للتعديل. بمعنى آخر، يمكنك إضافة ميزات جديدة دون الحاجة إلى تعديل الكود القديم. لتحقيق ذلك، يمكنك استخدام الأنماط البرمجية مثل الوراثة أو الواجهات، مما يضمن أن الكود القديم لا يتأثر بالتغييرات الجديدة.
3️⃣ مبدأ استبدال ليسكوف (Liskov Substitution Principle - LSP)
هذا المبدأ ينص على أنه يجب أن تكون الكائنات من الفئات المشتقة قابلة للاستبدال بكائنات من الفئة الأساسية دون التأثير على صحة البرنامج. بمعنى آخر، إذا كان لديك كلاس يمثل طائر، يجب أن تستطيع استبدال كائن طائر بكائن بطريق دون أن يتسبب ذلك في حدوث أخطاء في البرنامج.
4️⃣ مبدأ تقسيم الواجهات (Interface Segregation Principle - ISP)
هذا المبدأ يشير إلى أنه يجب عدم إجبار الكلاسات على تنفيذ واجهات لا تحتاج إليها. بدلاً من ذلك، يجب تقسيم الواجهات الكبيرة إلى واجهات أصغر وأكثر تخصصًا. يساعد ذلك في تقليل التعقيد ويسهل على المطورين فهم الكود.
5️⃣ مبدأ عكس الاعتماديات (Dependency Inversion Principle - DIP)
ينص هذا المبدأ على أن الكود يجب أن يعتمد على التجريدات وليس على الكلاسات المحددة. بمعنى آخر، يجب أن تعتمد الكلاسات العليا على الواجهات أو الكلاسات المجردة، مما يسمح بفصل الكود عن التفاصيل. هذا يعزز من مرونة الكود ويسهل من اختباره.
🔮 مميزات تطبيق مبادئ SOLID
تطبيق مبادئ SOLID يؤدي إلى عدة مميزات، منها:
* تحسين جودة الكود وسهولة صيانته.
* زيادة القدرة على التوسع وإضافة ميزات جديدة.
* تقليل التعقيد وتقليل الأخطاء البرمجية.
* تعزيز التعاون بين المطورين من خلال كتابة كود مفهوم وواضح.
✅ التحديات في كتابة كود نظيف
رغم أهمية كتابة كود نظيف، إلا أن هناك تحديات تواجه المطورين، منها:
* عدم وجود وقت كافٍ لتطبيق المبادئ أثناء الضغط الزمني.
* صعوبة في فهم المبادئ بشكل صحيح من قبل المطورين الجدد.
* الاعتماد على أنماط برمجية قديمة قد لا تتماشى مع المبادئ الحديثة.
💎 كيفية تحسين جودة الكود
لتحسين جودة الكود، يمكن اتباع بعض الخطوات العملية:
1. استثمر في التعلم المستمر حول مبادئ الكود النظيف.
2. قم بإجراء مراجعات دورية على الكود مع الزملاء لتحسين الجودة.
3. استخدم أدوات تحليل الكود للكشف عن الأخطاء والمشاكل المحتملة.
4. قم بتطبيق اختبارات الوحدة لضمان أن الكود يعمل كما هو متوقع.
5. كن مرنًا في تعديل الكود حسب الحاجة دون التفريط في المبادئ الأساسية.
📋 الخلاصة العامة لمبادئ الكود النظيف
إن كتابة كود نظيف ليس مجرد خيار، بل هو ضرورة في عالم البرمجة الحديث. من خلال تطبيق مبادئ SOLID، يمكن للمطورين تحسين جودة الكود، مما يسهل عليهم العمل على المشاريع الحالية والمستقبلية. لذا، إذا كنت مطورًا، فلا تتردد في استثمار الوقت والجهد في تعلم هذه المبادئ وتطبيقها في عملك اليومي.
تذكر، الكود النظيف هو كود يتمتع بالوضوح، القابلية للصيانة، والمرونة. ابدأ اليوم في تحسين كودك وكن جزءًا من مجتمع المبرمجين الذين يسعون دائمًا نحو التميز.
الكود النظيف هو مصطلح يشير إلى كتابة كود برمجي يتمتع بعدة خصائص، مثل الوضوح، والسهولة في الفهم، والقدرة على التعديل. إن كتابة كود نظيف تسهل على المطورين الآخرين فهم الكود والتفاعل معه، مما يقلل من الأخطاء ويزيد من كفاءة العمل. الكود النظيف هو أساس البرمجيات القابلة للصيانة والتطوير على المدى الطويل.
🔰 أهمية مبادئ SOLID
مبادئ SOLID هي مجموعة من المبادئ التي تهدف إلى تحسين تصميم البرمجيات. هذه المبادئ تساعد المطورين على كتابة كود أكثر قابلية للصيانة والتوسع. دعونا نستعرض هذه المبادئ بالتفصيل.
1️⃣ مبدأ المسؤولية الواحدة (Single Responsibility Principle - SRP)
ينص هذا المبدأ على أن كل كلاس أو ميثود يجب أن تكون لها مسؤولية واحدة فقط. بمعنى آخر، يجب أن يكون هناك سبب واحد فقط يدفعك لتعديل الكلاس أو الميثود. على سبيل المثال، إذا كان لديك كلاس يمثل طلباً في متجر إلكتروني، يجب أن يتعامل هذا الكلاس فقط مع تفاصيل الطلب، مثل حساب المجموع أو إدارة العناصر الموجودة فيه. إذا كنت بحاجة إلى تنفيذ عملية دفع، يجب أن تكون هناك كلاس منفصلة للتعامل مع الدفع.
2️⃣ مبدأ الانفتاح والإغلاق (Open/Closed Principle - OCP)
يقول هذا المبدأ إن الكود يجب أن يكون مفتوحًا للإضافة، لكن مغلقًا للتعديل. بمعنى آخر، يمكنك إضافة ميزات جديدة دون الحاجة إلى تعديل الكود القديم. لتحقيق ذلك، يمكنك استخدام الأنماط البرمجية مثل الوراثة أو الواجهات، مما يضمن أن الكود القديم لا يتأثر بالتغييرات الجديدة.
3️⃣ مبدأ استبدال ليسكوف (Liskov Substitution Principle - LSP)
هذا المبدأ ينص على أنه يجب أن تكون الكائنات من الفئات المشتقة قابلة للاستبدال بكائنات من الفئة الأساسية دون التأثير على صحة البرنامج. بمعنى آخر، إذا كان لديك كلاس يمثل طائر، يجب أن تستطيع استبدال كائن طائر بكائن بطريق دون أن يتسبب ذلك في حدوث أخطاء في البرنامج.
4️⃣ مبدأ تقسيم الواجهات (Interface Segregation Principle - ISP)
هذا المبدأ يشير إلى أنه يجب عدم إجبار الكلاسات على تنفيذ واجهات لا تحتاج إليها. بدلاً من ذلك، يجب تقسيم الواجهات الكبيرة إلى واجهات أصغر وأكثر تخصصًا. يساعد ذلك في تقليل التعقيد ويسهل على المطورين فهم الكود.
5️⃣ مبدأ عكس الاعتماديات (Dependency Inversion Principle - DIP)
ينص هذا المبدأ على أن الكود يجب أن يعتمد على التجريدات وليس على الكلاسات المحددة. بمعنى آخر، يجب أن تعتمد الكلاسات العليا على الواجهات أو الكلاسات المجردة، مما يسمح بفصل الكود عن التفاصيل. هذا يعزز من مرونة الكود ويسهل من اختباره.
🔮 مميزات تطبيق مبادئ SOLID
تطبيق مبادئ SOLID يؤدي إلى عدة مميزات، منها:
* تحسين جودة الكود وسهولة صيانته.
* زيادة القدرة على التوسع وإضافة ميزات جديدة.
* تقليل التعقيد وتقليل الأخطاء البرمجية.
* تعزيز التعاون بين المطورين من خلال كتابة كود مفهوم وواضح.
✅ التحديات في كتابة كود نظيف
رغم أهمية كتابة كود نظيف، إلا أن هناك تحديات تواجه المطورين، منها:
* عدم وجود وقت كافٍ لتطبيق المبادئ أثناء الضغط الزمني.
* صعوبة في فهم المبادئ بشكل صحيح من قبل المطورين الجدد.
* الاعتماد على أنماط برمجية قديمة قد لا تتماشى مع المبادئ الحديثة.
💎 كيفية تحسين جودة الكود
لتحسين جودة الكود، يمكن اتباع بعض الخطوات العملية:
1. استثمر في التعلم المستمر حول مبادئ الكود النظيف.
2. قم بإجراء مراجعات دورية على الكود مع الزملاء لتحسين الجودة.
3. استخدم أدوات تحليل الكود للكشف عن الأخطاء والمشاكل المحتملة.
4. قم بتطبيق اختبارات الوحدة لضمان أن الكود يعمل كما هو متوقع.
5. كن مرنًا في تعديل الكود حسب الحاجة دون التفريط في المبادئ الأساسية.
📋 الخلاصة العامة لمبادئ الكود النظيف
إن كتابة كود نظيف ليس مجرد خيار، بل هو ضرورة في عالم البرمجة الحديث. من خلال تطبيق مبادئ SOLID، يمكن للمطورين تحسين جودة الكود، مما يسهل عليهم العمل على المشاريع الحالية والمستقبلية. لذا، إذا كنت مطورًا، فلا تتردد في استثمار الوقت والجهد في تعلم هذه المبادئ وتطبيقها في عملك اليومي.
تذكر، الكود النظيف هو كود يتمتع بالوضوح، القابلية للصيانة، والمرونة. ابدأ اليوم في تحسين كودك وكن جزءًا من مجتمع المبرمجين الذين يسعون دائمًا نحو التميز.
👍3