القائمة الرئيسية

الصفحات

تعلم البرمجه تعلم لغه البرمجه Javaالدرس الثالث 3


لم البرمجه من الصفر حتى الختراف

تعلم البرمجه  تعلم لغه البرمجه الجافا الدرس الثالث 3


Java
العوامل في جافا

مفهوم العوامل
عامل: تعني operator في اللغة الإنجليزية, و العامل عبارة عن رمز له معنى محدد في جافا.
يمكننا تصنيف العوامل في جافا إلى 5 مجموعات أساسية و هي:

Arithmetic Operators
Comparison Operators
Logical Operators
Bitwise Operators
Assignment Operators

هناك أيضاً عوامل أخرى, سنراها في آخر الدرس.

العوامل التي تستخدم في العمليات الحسابية (Arithmetic Operators)
إسم العامل رمزه مثال شرح الكود
Assignment = a = b أعطي a قيمة b
Addition + a + b أضف قيمة b على قيمة a
Subtraction - a - b إطرح قيمة b من قيمة a
Unary plus + +a أضرب قيمة a بالعامل +
Unary minus - -a أضرب قيمة a بالعامل -
Multiplication * a * b أضرب قيمة a بقيمة b
Division / a / b أقسم قيمة a على قيمة b
Modulo % a % b للحصول على آخر رقم يبقى عندما نقسم قيمة a على قيمة b
Increment ++ a++ لإضافة 1 على قيمة a و تستخدم في الحلقات
Decrement -- a-- لإنقاص 1 من قيمة a و تستخدم في الحلقات

هنا وضعنا مثال لكل عامل موجود في الجدول شاهد الأمثلة »

العوامل التي تستخدم في المقارنات (Comparison Operators)
إسم العامل رمزه مثال شرح الكود
Equal to == (a == b) هل قيمة a تساوي قيمة b ؟
إذا كان الجواب نعم فإنها ترجع true
Not equal to != (a != b) هل قيمة a لا تساوي قيمة b ؟
إذا كان الجواب نعم فإنها ترجع true
Greater than > (a > b) هل قيمة a أكبر من قيمة b ؟
إذا كان الجواب نعم فإنها ترجع true
Less than < (a < b) هل قيمة a أصغر من قيمة b ؟
إذا كان الجواب نعم فإنها ترجع true
Greater than
or Equal to >= (a >= b) هل قيمة a أكبر أو تساوي قيمة b ؟
إذا كان الجواب نعم فإنها ترجع true
Less than
or Equal to <= (a <= b) هل قيمة a أصغر أو تساوي قيمة b ؟
إذا كان الجواب نعم فإنها ترجع true

هنا وضعنا مثال لكل عامل موجود في الجدول شاهد الأمثلة »

العوامل التي تستخدم في وضع شروط منطقية (Logical Operators)
إسم العامل رمزه مثال شرح الكود
AND && (a && b) هل قيمة a و b تساويان true ؟
هنا يجب أن يتم تحقيق الشرطين ليرجع true
OR || (a || b) هل قيمة a أو b أو كلاهما تساويان true ؟
هنا يكفي أن يتم تحقيق شرط واحد من الشرطين ليرجع true
NOT ! !a هل قيمة a لا تساوي true ؟
إذا كان الجواب نعم فإنها ترجع true

هنا وضعنا مثال لكل عامل موجود في الجدول شاهد الأمثلة »

العوامل التي تستخدم للتعامل مع الـ bits (Bitwise Operators)
إسم العامل رمزه مثال شرح الكود
Bitwise AND & a & b العامل & يحسب ناتج جمع البيتات المشتركة بين a و b
Bitwise OR | a | b العامل | يحسب ناتج جمع البيتات المشتركة و الغير مشتركة بين a و b
Bitwise XOR ^ a ^ b العامل ^ يحسب ناتج جمع البيتات الغير مشتركة بين a و b
Bitwise compliment OR ~ ~a العامل ~ يقلب البيتات التي تساوي 0 إلى 1 و يقلب البيتات التي تساوي 1 إلى 0,
ثم يضيف عليهم 1 و يحسب ناتج جمعهم, بعدها يضرب الجواب بالعامل ( - ) ثم يعطينا جواب سلبي.
Left shift << a << 2 العامل << يزيح البيتات من آخر اليسار إلى أول اليمين.
العدد 2 يعني أننا سنزيح آخر إثنين bits و نضعهم في الأول.
Right shift >> a >> 2 العامل >> يزيح البيتات من أول اليمين إلى آخر اليسار.
العدد 2 يعني أننا سنزيح أول إثنين bits و نضعهم في الأخير.
Zero fill right shift >>> a >>> 2 العامل >>> يزيح البيتات من أول اليمين ثم يبدلهم بأصفار و يضعهم في آخر اليسار.
العدد 2 يعني أننا سنمسح أول إثنين bits و نضع بدالهم صفرين في الأخير.

هنا وضعنا مثال لكل عامل موجود في الجدول شاهد الأمثلة »

العوامل التي تستخدم لإعطاء قيم للمتغيرات (Assignment Operators)
إسم العامل رمزه مثال شرح الكود
Basic Assignment = a = b ضع قيمة b في a.
Add AND Assignment += a += b أضف قيمة a على قيمة b و خزن الناتج في a
Susbtract AND Assignment -= a -= b أنقص قيمة a من قيمة b و خزن الناتج في a
Multiply AND Assignment *= a *= b أضرب قيمة a بقيمة b و خزن الناتج في a
Divide AND Assignment /= a /= b أقسم قيمة a على قيمة b و خزن الناتج في a
Modulo AND Assignment %= a %= b أقسم قيمة a على قيمة b و خزن آخر رقم يبقى من عملية القسمة في a
Left shift AND Assignment <<= a <<= 2 أزح آخر إثنين bits و ضعهم في الأول ثم خزن الناتج في a
Right shift AND Assignment >>= a >>= 2 أزح أول اثنين bits و ضعهم في الآخر ثم خزن الناتج في a
Bitwise AND Assignment &= a &= b أحسب ناتج جمع البيتات المشتركة بين a و b و خزن الناتج في a
Bitwise exclusive OR and Assignment ^= a ^= b أحسب ناتج جمع البيتات الغير مشتركة بين a و b و خزن الناتج في a
Bitwise inexclusive OR and Assignment |= a |= b أحسب ناتج جمع البيتات المشتركة و الغير مشتركة بين a و b و خزن الناتج في a

هنا وضعنا مثال لكل عامل موجود في الجدول شاهد الأمثلة »

عوامل أخرى مهمة في جافا
إسم العامل رمزه إستخدامه
Conditional :? يطلق عليه أيضاً إسم Ternary Operator لأنه يأخذ ثلاث عناصر ليعمل.
يمكن إستعماله بدل جمل الشرط if و else في حال كنت تريد إعطاء قيمة للمتغير.
Instance Of instanceof يستخدم لمعرفة إذا كان الكائن هو نسخة لكلاس معين أم لا.
إذا كان نسخة منه فإنه يرجع true إذا لم يكن منه فإنه يرجع false

هنا وضعنا مثال لكل عامل موجود في الجدول شاهد الأمثلة »

في الدرس التالي سنتعرف على الحلقات الموجودة في جافا.

Java
الحلقات في جافا

مفهوم الحلقات
حلقة: تعني Loop في اللغة الإنجليزية. نستخدم الحلقات لعدم تكرار نفس الكود عدة مرات, إذاً أي كود نريده أن يتنفذ عدة مرات, نقوم بكتابته داخل حلقة فتقوم هي بإعادة تنفيذ الكود قدر ما شئنا ضمن شروط معينة نقوم نحن بتحديدها.


طريقة تنفيذ الأوامر و الحلقات في الذاكرة

الأوامر في العادة تتنفذ بتسلسل وراء بعضها, و لكن الحلقات تجعل سهم تنفيذ الأوامر يقف عندها فيقوم بتنفيذ الأوامر التي بداخلها عدة مرات, و بعد أن يخرج من الحلقة يعود و يكمل تنفيذ باقي الأوامر التي تليها, كما في الصورة التالية :


عندما تتنفذ الحلقة فإن الأوامر الموضوعة فيها تنفذ بشكل منفصل عن باقي الأوامر الموجودة في البرنامج, أي يمكنك إعتبار أن جميع أوامر الحلقة توضع في مكان خاص في الذاكرة, هذا المكان يسمى scope.

بعد أن تتنفذ جميع أوامر الحلقة في هذا الـ scope, يتم مسح هذا الـ scope كلياً من الذاكرة و هذه العملية تسمى Destroy.

أنواع الحلقات
إسم الحلقة دواعي الإستخدام
For Loop تستخدم لتنفيذ الكود عدة مرات محددة.
تابع القراءة »
While Loop تستخدم لتنفيذ الكود عدة مرات غير محددة و يتوقف التنفيذ إذا تحقق شرط معين, لأن هذه الحلقة يتم توقيفها إذا تحقق الشرط الذي نضعه بين القوسين.
تابع القراءة »
Do While Loop تستخدم لتنفيذ الكود عدة مرات غير محددة و يتوقف التنفيذ إذا تحقق شرط معين, لأن هذه الحلقة يتم توقيفها إذا تحقق الشرط الذي نضعه بين القوسين.
الفرق الوحيد بينها و بين الحلقة while أنها تتنفذ مرة واحدة على الأقل.
تابع القراءة »
جمل التحكم في الحلقات
جمل التحكم تعني Control Statements بالإنجليزية, و نستخدمهم للتحكم في سير تنفيذ الحلقات و مع جملة الشرط switch.


جملة التحكم تعريفها
Break Statement تستخدم في الحلقات و في الجملة switch.
بمجرد ان تنفذ الجملة break فإنها توقف الـ scope بأكمله و تخرج منه و تمسحه من الذاكرة ثم تنتقل للكود الذي يليه في البرنامج.
تابع القراءة »
Continue Statement تستخدم مع الحلقات فقط.
نستخدمها لتجاوز تنفيذ كود معين في الحلقة, إذاً نستخدمها لتجاوز جزء من كود الـ scope.
تابع القراءة »

ملاحظة: سنشرح الجملة break مع الجملة switch في الدرس التالي.

Java
الشروط في جافا

مفهوم الشروط
شروط: تعني conditions في اللغة الإنجليزية. و نستخدم الشروط لتحديد طريقة عمل البرنامج.
كما أنه يمكنك وضع العدد الذي تريده من الشروط في البرنامج الواحد, تستطيع وضع الشروط بداخل بعضها البعض أيضاً.

لا تقلق ستفهم كل شيء من الأمثلة.

أنواع جمل الشرط
إسم الجملة دواعي الإستخدام
if - else - else if statements نستخدمهم إذا كنا نريد تنفيذ كود معين في حال تحقق الشرط أو مجموعة من الشروط التي وضعناها.
تابع القراءة »
switch statement نستخدمها إذا كنا نريد إختبار قيمة متغير معين مع لائحة من الإحتمالات نقوم نحن بوضعها, و إذا تساوت هذه القيمة مع أي إحتمال وضعناه ستتنفذ الأوامر التي وضعناها في هذا الإحتمال فقط.
تابع القراءة »
أفكار و أساليب أخرى لوضع الشروط
طرق وضع الشروط عديدة و متنوعة, و يمكننا وضع شروط بداخل بعضها و يسمى ذلك Nested Conditional.
كما يمكننا وضع أكثر من شرط بداخل جمل الشرط if أو else if باستخدام العوامل المنطقية.

هنا وضعنا أمثلة تعلمك طريقة وضع أكثر من شرط في الجملة if أو else if باستخدام الـ Relational Operators.

Java
التعامل مع الأرقام في جافا


مفهوم الأرقام
أرقام: تعني numbers في اللغة الإنجليزية, و نحن عادةً ما نستخدم أنواع البيانات البدائية ( أي الـprimitive ) لتخزين الأرقام.
أي لتعريف متغير بهدف تخزين رقم, نعرفه كـ int أو float أو double إلخ..

مثال
int    a = 10;
short  b = 50;
float  c = 10.5f;
double d = 37.002;

أحياناً يضطر المبرمج أن يستخدم الكائن للنوع و ليس الشكل البدائي للنوع.
من أجل ذلك, جافا تقدم لنا wrapper classes.

ما معنى wrapper classes؟

كل نوع بيانات بدائي في جافا له كلاس يمثله, و يكون من نفس إسمه, أمثلة:

النوع int يمكن تمثيله بالكلاس Integer.
النوع float يمكن تمثيله بالكلاس Float.
النوع byte يمكن تمثيله بالكلاس Byte.
النوع double يمكن تمثيله بالكلاس Double.
النوع short يمكن تمثيله بالكلاس Short.
النوع long يمكن تمثيله بالكلاس Long.

إذاً الـwrapper classes هم كل الكلاسات التي تمثل أنواع البيانات البدائية.
هذه الصورة تظهر لك جميع الكلاسات التي تمثل الأرقام.


ما هي فائدة الـ wrapper classes؟

فكرة الـ wrapper classes جعلنا قادرين على معاملة هذه الأنواع ككائنات و بناء دوال خاصة لهم و لكن المبرمج العادي قد لا يتعامل بتاتاً مع الـ wrapper classes لأنه نادراً ما يحتاج لهم.


مصطلحات تقنية
عملية تحويل النوع البدائي لكائن من نفس النوع تسمى boxing.
عملية إرجاع قيمة الكائن إلى النوع البدائي لهذا الكائن تسمى unboxing.
مثال
Integer a = 10;     // int و ليس Integer هنا ستكون a لأن نوع القيمة التي خزنها المتغير boxing هذه العملية تسمى

int b = a + 15;     // 15 قبل إضافتها على int لأنه سيتم تحويل قيمته للنوع a بالنسبة للمتغير unboxing هذه العملية تسمى

شرح الكود
Integer a = 10
    a يمثل كائن نوعه Integer قيمته 10.

int b = a + 15
    هنا سيتم تحويل قيمة الكائن a إلى النوع int ثم إضافة 15 عليها و تخزين الناتج في المتغير b
دوال الكلاس Math
الكلاس Math هو كلاس جاهز في جافا, يحتوي على دوال تتعلق بالرياضيات, ذكرنا بعضها في هذا الجدول.

إسم الدالة تعريفها
abs() ترجع القيمة المطلقة للعدد الذي نضعه لها كـ argument.
تابع القراءة »
ceil() ترجع العدد الصحيح الأكبر أو الذي يساوي العدد الذي نضعه لها كـ argument.
تابع القراءة »
floor() ترجع العدد الصحيح الأصغر أو الذي يساوي العدد الذي نضعه لها كـ argument.
تابع القراءة »
rint() ترجع أقرب عدد صحيح للعدد الذي نضعه لها كـ argument.
تابع القراءة »
round() ترجع أقرب عدد صحيح للعدد الذي نضعه لها كـ argument.
تابع القراءة »
max() ترجع العدد الأكبر بين العددين الذين نضعهما لها كـ arguments.
تابع القراءة »
min() ترجع العدد الأصغر بين العددين الذين نضعهما لها كـ arguments.
تابع القراءة »
exp() ترجع قيمة الـ exponential للعدد الذي نضعه لها كـ argument.
تابع القراءة »
log() ترجع قيمة الـ logarithm للعدد الذي نضعه لها كـ argument.
تابع القراءة »
pow() ترجع قيمة الـ argument الأول مضاعف بقيمة الـ argument الثاني.
تابع القراءة »
sqrt() ترجع قيمة الـ square root للعدد الذي نضعه لها كـ argument.
تابع القراءة »
sin() ترجع قيمة الـ sine للعدد الذي نضعه لها كـ argument.
تابع القراءة »
cos() ترجع قيمة الـ cosine للعدد الذي نضعه لها كـ argument.
تابع القراءة »
tan() ترجع قيمة الـ tangent للعدد الذي نضعه لها كـ argument.
تابع القراءة »
asin() ترجع قيمة الـ arcsine للعدد الذي نضعه لها كـ argument.
تابع القراءة »
acos() ترجع قيمة الـ arccosine للعدد الذي نضعه لها كـ argument.
تابع القراءة »
atan() ترجع قيمة الـ arctangent للعدد الذي نضعه لها كـ argument.
تابع القراءة »
toDegrees() تحول قيمة العدد الذي نضعه لها كـ argument لـ Degrees.
تابع القراءة »
toRadians() تحول قيمة العدد الذي نضعه لها كـ argument لـ Radians.
تابع القراءة »
random() ترجع عدد عشوائي بين 0 و 1.
تابع القراءة »
ثوابت الكلاس Math
الكلاس Math يحتوي أيضاً على الثوابت التالية التي تتعلق بالرياضيات.

إسم الثابت تعريفه
E يحتوي على قيمة الـ Exponential.
PI يحتوي على قيمة الـ PI.
شاهد المثال »

دوال الأرقام التي تستخدم مع كائنات الـ wrapper classes

Java
التعامل مع الأحرف في جافا

مفهوم الأحرف
أحرف: تعني characters في اللغة الإنجليزية, و نحن عادةً ما نستخدم أنواع البيانات البدائية ( أي الـprimitive ) لتخزين الأحرف.
أي لتعريف متغير بهدف تخزين حرف, نعرفه كـ char أو int إذا كنا سنتعامل مع الملفات.

مثال
// a يحتوي على الحرف ch هنا المتغير
char ch = 'a';

// و الذي يعتبر حرف Ω يحتوي على الرمز unicode هنا المتغير
char unicode = '\u03A9';

// هنا قمنا بتعريف مصفوفة من الأحرف
char[] charArray = { 'a', 'b', 'c', 'd', 'e' };

أحياناً يضطر المبرمج أن يستخدم الكائن للنوع و ليس الشكل البدائي للنوع.
من أجل ذلك, جافا تقدم لنا الكلاس Character الذي يحتوي على مجموعة من الدوال الجاهزة للتعامل مع الأحرف.

لتخزين حرف ككائن من الكلاس Character, يمكنك إنشاء كائن من الكلاس Character و تمرير الحرف الذي تريد تخزينه فيه في الـ Constructor.

مثال
Character ch = new Character('a');

ملاحظة
في بعض الحالات يقوم المترجم في جافا بخلق كائن من الكلاس Character عنا. فمثلاً إذا قمنا بتمرير قيمة بدائية نوعها char في دالة تأخذ النوع object كباراميتر, يقوم المترجم في هذه الحالة بشكل تلقائي بتحويل النوع char للنوع Character , هذه الخاصية تسمى auto-boxing و عملية تحويل النوع لنوع بدائي من جديد تسمى unboxing.

مفهوم الـ Escape Sequences
Escape Sequence تعني مجموعة أحرف متتالية, إذا أتت وراء بعضها فإنها تشكل شيء معين.

لخلق Escape Sequence نستخدم الرمز \
إذاً, أي حرف مسبوق بالرمز \ هو عبارة عن Escape Sequence و يعني شيء معين في جافا.

في هذه اللائحة وضعنا لك جميع الـ Escape Sequences الموجودين في جافا.

Escape Sequence تعريفه
\t يضيف عدة مسافات في مكان وضعها.
\b يزيل الحرف الموجود قبلها.
\n يجعل المحتوى الذي يأتي بعدها ينزل على سطر جديد.
\r يجعل الكود يبدأ في التنفيذ من عندها.
\f يضع فاصل بين المحتوى (أي تقسم المحتوى).
ملاحظة: لن يظهر لك تأثيرها إلا إذا إستخدمتها مع الملفات.
\' لإضافة الرمز '  في مكان وضعها.
\" لإضافة الرمز "  في مكان وضعها.
\u يستخدم لإضافة أي حرف أو رمز من خلال الـ unicode.

هنا وضعنا مثال لكل Escape Sequence موجود في الجدول.

شاهد الأمثلة »

دوال الكلاس Character
الكلاس Character هو كلاس جاهز في جافا, يحتوي على دوال للتعامل مع الأحرف, ذكرنا لك بعضها في هذا الجدول.

إسم الدالة تعريفها
isLetter() تحدد إذا كانت قيمة كائن الـ Character عبارة عن حرف أم لا.
شاهد المثال »
isDigit() تحدد إذا كانت قيمة كائن الـ Character عبارة عن رقم أم لا.
شاهد المثال »
isWhitespace() تحدد إذا كانت قيمة كائن الـ Character عبارة عن مسافة فارغة أم لا.
شاهد المثال »
isUpperCase() تحدد إذا كانت قيمة كائن الـ Character عبارة عن حرف كبير أم لا.
شاهد المثال »
isLowerCase() تحدد إذا كانت قيمة كائن الـ Character عبارة عن حرف صغير أم لا.
شاهد المثال »
toUpperCase() تحول قيمة كائن الـ Character لحرف كبير و ترجعها.
شاهد المثال »
toLowerCase() تحول قيمة كائن الـ Character لحرف صغير و ترجعها.
شاهد المثال »
toString() تحول قيمة كائن الـ Character لقيمة نوعها String من حرف واحد و ترجعها.
شاهد المثال »

Java
التعامل مع النصوص في جافا

مفهوم النصوص
نص: تعني String في جافا, و الـ String عبارة عن مجموعة من الأحرف.
النوع String عبارة عن كلاس و لاحظ أنه يبدأ بحرف كبير مثل إسم أي كلاس في جافا.

إذاً عندما نقوم بتعريف String فنحن فعلياً نقوم بتعريف كائن, و لكننا نقول له متغير لأنه بشكل عام يسمح لنا بتخزين أي قيمة بداخله و لكنه في الأساس كائن نوعه String و ليس متغير عادي.

طريقة تعريف String
أبسط طريقة و الأكثر إستخداماً هي تعريفه مثل متغير عادي.

مثال
String greeting = "Hello world!";

تذكر أنك حتى لو قمت بتعريفه مثل متغير عادي, سيعتبره المترجم كائن.
و مثل أي كائن, تستطيع إنشاء كائن نوعه String من خلال الكلمة new و من خلال الكونستركتور, و ستفهم معنى هاتين الكلمتين في دروس لاحقة.

الكلاس String يحتوي على 13 كونستركتور يمكنك استخدامهم لوضع قيمة أولية في النص من خلال عدة مصادر, مثل من مصفوفة أحرف.

مثال
package strings;

public class Test {

    public static void main(String[] args) {

        // هنا قمنا بتعريف مصفوفة من الأحرف
        char[] helloArray = { 'h', 'e', 'l', 'l', 'o' };

        // من خلال الكونستركتور helloString هنا وضعنا محتوى مصفوفة الأحرف كنص للكائن
        String helloString = new String(helloArray);

        // helloString هنا قمنا بعرض قيمة الكائن
        System.out.println( helloString );

    }

}
•سنحصل على النتيجة التالية عند التشغيل.

hello


مفهوم الـ Concatenation
Concatenation تعني إضافة محتوى نص على نص, أي كأنك تنسخ نص و تلصقه في نهاية نص آخر.

يمكنك تطبيق الـ Concatenation في جافا بطريقتين:

بإستخدام العامل +
أو بإستدعاء الدالة concat() التي شرحناها لاحقاً في هذا الدرس.

مثال
•سنقوم بتعريف نصين و نعطيهم قيم, ثم سنعرف نص ثالث و نضع النصين السابقين فيه.

package strings;

public class Test {

    public static void main(String[] args) {

        String s1 = "welcome to ";     // هنا قمنا بتعريف النص الأول
        String s2 = "harmash.com";     // هنا قمنا بتعريف النص الثاني

        String s3 = s1 + s2;           // أضفنا قيمة النصين السابقين في النص الثالث
        System.out.println( s3 );      // هنا عرضنا قيمة النص الثالث لنتأكد إذا تمت عملية الإضافة كما نريد

    }

}
•سنحصل على النتيجة التالية عند التشغيل.

welcome to harmash.com
مصطلحات مهمة عليك معرفة معناها
لنفترض أننا قمنا بتعريف String إسمه welcome و أعطيناه قيمة.

مثال
String welcome = "welcome to harmash.com";

سيتم تخزين محتوى النص في الذاكرة حرفاً حرفاً و بالترتيب و يبدأ بترقيمهم من الرقم 0 كما في هذه الصورة.


مصطلحات تقنية
عدد أحرف الـ String يسمى length.
رقم الخانة يسمى index.
إذا قمنا بأخذ جزء من الـ String يسمى هذا الجزء substring.

أنت كمبرمج يمكنك إستغلال أرقام الخانات لتصل لمحتوى النص و تفعل به ما تشاء.
هناك دوال كثيرة جاهزة في جافا للتعامل مع النصوص, عليك فقط فهم طريقة عملها و استخدامها.

مثال

دوال الكلاس String
الكلاس String هو كلاس جاهز في جافا, يحتوي على دوال كثيرة للتعامل مع محتوى النصوص, سواء للبحث عن أحرف أو كلمات أو جمل, تجزيء النص, تغيير الـ Case للأحرف, دمج النصوص إلخ..


سنقسم دوال الكلاس String إلى 5 فئات أساسية كما في الجدول التالي:

دوال للبحث (Searching).
دوال للتجزيء (Substring).
دوال للتبديل (Replacing).
دوال للمقارنة (Comparison).
دوال للمعالجة (Manipulation).

ملاحظة
الكلاس String يعتبر Immutable class و هذا يعني أنك عندما تستدعي أي دالة على String, لن تعدل محتوى الـ String الذي قام باستدعائها, بل سترجع لك نسخة معدلة من هذا الـ String و سيبقى الـ String الأصلي كما هو.

دوال البحث الموجودة في الكلاس String
إسم الدالة تعريفها
charAt() ترجع الحرف الموجود على الـ index الذي نحدده في الـ argument للـ String الذي قام بإستدعائها.
شاهد المثال »
indexOf() تبحث عن أول index يوجد فيه الحرف الذي نضعه كـ argument في الـ String الذي قام بإستدعائها و ترجعه.
شاهد المثال »
lastIndexOf() تبحث عن آخر index يوجد فيه الحرف أو النص الذي نضعه كـ argument في الـ String الذي قام بإستدعائها و ترجعه.
شاهد المثال »
contains() ترجع true إذا كان الـ String الذي قام بإستدعائها يحتوي على الـ CharSequence الذي نضعه كـ argument.
شاهد المثال »
دوال التجزيء الموجودة في الكلاس String
إسم الدالة تعريفها
substring() ترجع String جديدة عبارة عن substring من الـ String الذي قام باستدعائها.
شاهد المثال »
subSequence() ترجع جزء نحدده من محتوى الـ String كمصفوفة نوعها CharSequence.
شاهد المثال »
split() تقسم الـ String إلى مصفوفة نوعها String و ترجعها.
شاهد المثال »
دوال التبديل الموجودة في الكلاس String
إسم الدالة تعريفها
replace() تأخذ إثنين arguments عبارة عن char أو CharSequence.
تبحث عن قيمة الـ argument الأول في كل محتوى الـ String الذي قام باستدعائها و تبدلها بقيمة الـ argument الثاني.
شاهد المثال »
replaceAll() تأخذ إثنين arguments عبارة عن String, الأول عبارة عن الجزء الذي نريده أن يتبدل في كل محتوى الـ String الذي قام باستدعائها, و الثاني عبارة عن الجزء الذي سيحل مكانه.
شاهد المثال »
replaceFirst() تأخذ إثنين arguments عبارة عن String, الأول عبارة عن الجزء الذي نريده أن يتبدل في أول مكان يتم إيجاده في الـ String الذي قام باستدعائها, و الثاني عبارة عن الجزء الذي سيحل مكانه.
شاهد المثال »
دوال المقارنة الموجودة في الكلاس String
إسم الدالة تعريفها
startsWith() تختبر قيمة الـ argument, إذا كانت موجودة في بداية الـ String الذي قام باستدعائها سترجع true.
شاهد المثال »
endsWith() تختبر قيمة الـ argument, إذا كانت موجودة في نهاية الـ String الذي قام باستدعائها سترجع true.
شاهد المثال »
equals() تقارن الـ String الذي قام باستدعائها مع أي كائن نضعه كـ argument.
شاهد المثال »
equalsIgnoreCase() تقارن الـ String الذي قام باستدعائها مع الـ String الذي نضعه كـ argument.
لا يهمها إذا كانت الأحرف كبير أو صغيرة.
شاهد المثال »
contentEquals() تقارن الـ String الذي قام باستدعائها مع الـ StringBuffer الذي نضعه كـ argument و ترجع true فقط في حال كانت جميع أحرفهم متطابقة.
شاهد المثال »
compareTo() تقارن الـ String مع أي كائن آخر نضعه كـ argument.
شاهد المثال »
compareToIgnoreCase() تقارن الـ String الذي قام باستدعائها مع الـ String الذي نضعه كـ argument.
و لا يهمها إذا كانت الأحرف كبير أو صغيرة.
شاهد المثال »
matches() تحدد إذا كان الـ String يطابق الشرط الموضوع أم لا.
شاهد المثال »
regionMatches() تحدد إذا كان إثنين String عندهم جزأين متساويان أم لا.
شاهد المثال »
دوال المعالجة الموجودة في الكلاس String
إسم الدالة تعريفها
concat() تضيف محتوى الـ argument في آخر الـ String الذي قام بإستدعائها.
شاهد المثال »
copyValueOf() تنسخ محتوى مصفوفة الأحرف التي نضعها كـ argument في String و ترجعها.
شاهد المثال »
getChars() تنسخ أحرف الـ String الذي قام باستدعائها بداخل مصفوفة من الأحرف نضعها كـ argument مع تحديد النطاق الذي نريد نسخه و المكان الذي نريد وضع الأحرف فيه.
شاهد المثال »
hashCode() ترجع hash code للـ String الذي قام باستدعائها.
شاهد المثال »
intern() تمنع وجود أكثر من String يحتوى على نفس المحتوى, لذلك هي مهمة جداً من أجل التخزين. فهي تسرع عمل المعالج و تحفظ مساحات الذاكرة.
شاهد المثال »
length() ترجع طول الـ String
شاهد المثال »
toCharArray() تحول الـ String لمصفوفة نوعها char و ترجعها.
شاهد المثال »
toLowerCase() تحول جميع أحرف الـ String لأحرف صغيرة.
شاهد المثال »
toUpperCase() تحول جميع أحرف الـ String لأحرف كبيرة.
شاهد المثال »
trim() ترجع نسخة من الـ String لا تحتوي على مسافات فارغة في بدايتها و نهايتها.
شاهد المثال »
valueOf() ترجع أي قيمة نضعها كـ argument كـ String
شاهد المثال »
إرشادات مهمة لمعالجة الأخطاء
في حال وضعت رقم index غير موجود سيظهر لك الخطأ التالي

java.lang.StringIndexOutOfBoundsException: String index out of range
هذا الخطأ يعني أنك طلبت إرجاع قيمة خانة في الـ String غير موجودة, أو أنك حاولت تبديل قيمة خانة في الـ Stringهي في الأساس غير موجودة.
في الحالتين هذا يعني أنك خرجت عن مساحة الـ String المحجوزة في الذاكرة.

إذاً في حال ظهر لك هذا الخطأ إعرف أنك إستخدمت رقم index أكبر من أرقام الـ index الموجودين في الـ String, أو قد يكون رقم أصغر من صفر.


مثال
package strings;

public class Test {

    public static void main(String[] args) {

        String s = "java is amazing";
        System.out.println( s.charAt(30) );

    }

}
•سنحصل على النتيجة التالية عند التشغيل.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 30
•هذا يعني أنك طلبت إرجاع قيمة خانة في الـ String غير موجودة, و أظهر لنا أن الخانة رقم 30 تحديداً غير موجودة.



Java
التعامل مع المصفوفات في جافا





تعريف مصفوفة
تعريف مصفوفة جديدة يسمى Declare Array

يمكنك تعريف مصفوفة جديدة بثلاث طرق:

// يمكنك تعريفها هكذا
datatype[] arrayRefVar;         // هذا الأسلوب المفضل في جافا

// أو هكذا
datatype []arrayRefVar;

// أو هكذا
datatype arrayRefVar[];

datatype: هو نوع المصفوفة التي سيتم تعريفها.
[]: هو من كم بعد تتألف المصفوفة.

أمثلة
// double هنا قمنا بتعريف مصفوفة ذات بعد واحد, نوعها
double[] doubleArray;

// int هنا قمنا بتعريف مصفوفة ذات بعدين, نوعها
int[][] intArray;

// String هنا قمنا بتعريف مصفوفة ذات بعد واحد, نوعها
String[] stringArray;
إنشاء مصفوفة
إنشاء مصفوفة جديدة يعني Create Array في اللغة الإنجليزية.

إذا أردت أن تعرف أي مصفوفة فعندك طريقتين:

تنشئ المصفوفة و تعطيها القيم لاحقاً.
تنشئ المصفوفة و تعطيها القيم مباشرةً عند تعريفها.


طريقة إنشاء مصفوفة و إعطائها القيم لاحقاً
arrayRefVar = new datatype[size];
:arrayRefVar: هو إسم المصفوفة التي يجب أن تكون معرفة سابقاً.
new: تقوم بتوليد قيم أولية لجميع عناصر المصفوفة, تعطيهم القيمة صفر كقيمة أولية.
datatype: هو نوع القيم الأولية التي سيتم توليدها.
size: هو عدد عناصر المصفوفة.


طريقة إنشاء مصفوفة و إعطائها قيم أولية مباشرةً عند إنشائها
arrayRefVar = { value0, value1, ..., valuek };
arrayRefVar: هو إسم المصفوفة التي يجب أن تكون معرفة سابقاً.
value0 و value1 و valuek: عبارة عن القيم التي نعطيها للمصفوفة.
تعريف مصفوفة و إعطاءها قيم أولية بكود أقل
يمكنك أن تفعل Declaring و Creating و Assigning لمصفوفة جديدة في جملة واحدة.
يمكنك تحديد عدد عناصرها فقط عند تعريفها, و عندها ستعطى القيمة صفر لجميع عناصرها كقيمة أولية.

datatype[] arrayRefVar = new datatype[size];

و يمكنك إعطائها قيم أولية مباشرةً عند تعريفها, و عندها تتخزن كل قيمة في عنصر, و هكذا يتحدد عدد عناصرها.

datatype[] arrayRefVar = { value0, value1, ..., valuek };

يمكنك الوصول لعناصر المصفوفة من خلال الـ index.
يتم تخزين عناصر المصفوفة إبتداءاً من الـ index رقم 0 إلى الـ index رقم length-1
بمعنى آخر العنصر الأول في المصفوفة يحمل الـ index رقم 0, و العنصر الآخير فيها يحمل index رقم length-1


ملاحظة
القيمة الإفتراضية صفر تعطى حسب نوع المصفوفة.
إذا كان نوع المصفوفة int أو longالقيمة الإفتراضية التي ستعطى لجميع عناصر المصفوفة هي 0.
إذا كان نوع المصفوفة double أو floatالقيمة الإفتراضية التي ستعطى لجميع عناصر المصفوفة هي 0.0.
إذا كان نوع المصفوفة String القيمة الإفتراضية التي ستعطى لجميع عناصر المصفوفة هي null.

شكل المصفوفة في الذاكرة
لنفترض الآن أننا قمنا بتعريف مصفوفة نوعها int, إسمها a, تتألف من 5 عناصر.

int[] a = { 10, 20, 30, 40, 50 };

يمكنك تصور شكل المصفوفة a في الذاكرة كالتالي.



بما أن المصفوفة تتألف من 5 عناصر, تم إعطاء العناصر أرقام index بالترتيب من 0 إلى 4.

إذاً هنا أصبح عدد عناصر المصفوفة يساوي 5 و هو ثابت لا يمكن تغييره لاحقاً في الكود.
و يمكنك إستخدام أرقام الـ index لتصل لجميع عناصر المصفوفة سواء لعرض القيم أو لتغييرها.


في المثال التالي, قمنا بتعريف مصفوفة, ثم غيرنا قيمة العنصر الأول, ثم عرضناها, من خلال الـ index الخاص بالعنصر.
بعدها, إستخدامنا الخاصية length الموجودة في جافا لطباعة عدد عناصر المصفوفة.

مثال
package arrays;

public class Test {

    public static void main(String[] args) {

        int[] a = { 10, 20, 30, 40, 50 };               // هنا قمنا بتعريف مصفوفة تتألف من 5 عناصر

        a[0] = 99;                                      // هنا قمنا بتغيير قيمة العنصر الأول

        System.out.println("a[0] = " + a[0]);           // هنا عرضنا قيمة العنصر الأول
        System.out.println("a.length = " + a.length);   // هنا عرضنا عدد عناصر المصفوفة

    }

}
•سنحصل على النتيجة التالية عند التشغيل

a[0] = 99
a.length = 5
مثال شامل حول التعامل مع المصفوفات
سنقوم الآن بكتابة برنامج شامل لكل المفاهيم التي ذكرناها في هذا الدرس.
الخطوات التي سنقوم بتنفيذها هي التالية:

تعريف مصفوفة فارغة نوعها int, إسمها numbers, تتألف من 5 عناصر.
عرض قيمها الأولية باستخدام حلقة.
إعطاء قيمة لكل عنصر فيها.
عرض جميع قيمها من جديد باستخام حلقة
مثال
package arrays;

public class Test {

    public static void main(String[] args) {

        // 1- هنا قمنا بتعريف المصفوفة
        int[] numbers = new int[5];

        // 2- هنا قمنا بعرض قيم جميع عناصرها
        for(int i=0; i<numbers.length; i++)
        {
            System.out.println("numbers[" + i + "]: " + numbers[i]);
        }

        // 3- هنا قمنا يتغيير قيم جميع عناصرها
        numbers[0] = 1000;
        numbers[1] = 2000;
        numbers[2] = 3000;
        numbers[3] = 4000;
        numbers[4] = 5000;

        System.out.println();

        // 4- هنا قمنا بعرض قيم جميع عناصرها
        for(int i=0; i<numbers.length; i++)
        {
            System.out.println("numbers[" + i + "]: " + numbers[i]);
        }

    }
}
•سنحصل على النتيجة التالية عند التشغيل

numbers[0]: 0 
numbers[1]: 0 
numbers[2]: 0 
numbers[3]: 0 
numbers[4]: 0 

numbers[0]: 1000 
numbers[1]: 2000 
numbers[2]: 3000 
numbers[3]: 4000 
numbers[4]: 5000
الحلقة foreach
إبتداءاً من الإصدار 1.5 في جافا, قدم لنا حلقة for جديدة إسمها foreach loop.
هذه الحلقة تسمح لك بالمرور على جميع عناصر المصفوفة دون الحاجة لتعريف عداد و تحديد أين يبدأ و أين ينتهي.


طريقة تعريف الحلقة foreach
في البداية نحن لا نكتب foreach بل نكتب for.
الإختلاف بين foreach و for التقليدية يظهر فقط بين القوسين, لاحظ الـ syntax.

for( element: array ) {
    // statements
}

element: هو متغير عادي نقوم بتعريفه بداخل الحلقة و نعطيه نفس نوع المصفوفة التي نضعها بعد النقطتين, لأنه في كل دورة سيقوم بتخزين قيمة عنصر من عناصرها, لذلك يجب وضع نوعه مثل نوعها.
array: هي المصفوفة التي نريد الوصول لجميع عناصرها.
statements: هي جميع الأوامر الموضوعة في الحلقة و هي تتنفذ في كل دورة.
إذاً هنا تقوم الحلقة بالمرور على جميع عناصر المصفوفة بالترتيب من العنصر الأول إلى العنصر الأخير, و في كل دورة تقوم بتخزين قيمة العنصر في المتغير الذي قمنا بتعريفه.


سنقوم الآن بكتابة برنامج بسيط يعرض قيم جميع عناصر مصفوفة باستخدام الحلقة foreach.

مثال
package arrays;

public class Test {

    public static void main(String[] args) {

        // هنا قمنا بتعريف المصفوفة
        int[] numbers = { 1000, 2000, 3000, 4000, 5000 };

        // element في المتغير numbers هنا في كل دورة سيتم تخزين قيمة عنصر من عناصر المصفوفة
        for(int element: numbers)
        {
            System.out.println(element);   // element هنا سيتم عرض القيمة التي تخزنت في المتغير
        }

    }

}
•سنحصل على النتيجة التالية عند التشغيل

1000
2000
3000
4000
5000
تعامل الدوال مع المصفوفات
سنتكلم الآن عن نقتطين أساسيتين:

تمرير المصفوفة كـ argument للدالة.
تعريف دالة ترجع مصفوفة.

تمرير المصفوفة كـ argument للدالة
سنقوم بتعريف دالة تأخذ مصفوفة كباراميتر, مهمة هذه الدالة ستكون فقط طباعة جميع قيم عناصر المصفوفة.
ثم سنقوم بإستدعاء هذه الدالة مرتين, لأننا سنعلمك طريقتين لتمرير مصفوفة كـ argument.

مثال
package arrays;

public class Test {

    public static void main(String[] args) {

        // 2- هنا قمنا بتعريف مصفوفة
        int[] numbers = { 1000, 2000, 3000, 4000, 5000 };

        // 3- هنا قمنا باستدعاء الدالة و مررنا لها المصفوفة
        printArray(numbers);

        System.out.println();

        // 4- هنا قمنا باستدعاء الدالة و أنشأنا مصفوفة بداخلها. ستفهم هذا الأسلوب في دروس لاحقة
        printArray(new int[] {11, 12, 13, 14, 15});

    }


    // 1- argument هنا قمنا بتعريف دالة تطبع محتوى أي مصفوفة نمررها لها كـ
    public static void printArray(int[] array) {
        for (int i=0; i<array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }

}
•سنحصل على النتيجة التالية عند التشغيل

1000 2000 3000 4000 5000
11 12 13 14 15


تعريف دالة ترجع مصفوفة
سنقوم بتعريف دالة تأخذ مصفوفة كباراميتر و ترجعها معكوسة, ثم سنقوم بإستدعاء هذه الدالة.
ستلاحظ أننا قمنا بتعريف عدادين في الحلقة for, لأننا أردننا أن نلفت إنتباهك أيضاً أنه بإمكانك تعريف أكثر من عداد بداخل الحلقةfor.

مثال
package arrays;

public class Test {

    public static void main(String[] args) {

        int[] numbers = { 1000, 2000, 3000, 4000, 5000 }; // 2- هنا قمنا بتعريف مصفوفة
        int[] reversedNumbers;                            // 3- بالمقلوب numbers هنا قمنا بتعريف مصفوفة فارغة, سنستخدمها لحفظ قيم المصفوفة

        reversedNumbers = reverseArray(numbers);          // 4- reversedNumbers هنا قمنا بتخزين المصفوفة المقلوبة التي سترجعها الدالة في المصفوفة

        for (int i=0; i<reversedNumbers.length; i++) {    // 5- للتأكد فقط reversedNumbers هنا بعرض قيم المصفوفة
            System.out.print(reversedNumbers[i] + " ");
        }

    }


    // 1- بالمقلوب argument هنا قمنا بتعريف دالة ترجع محتوى المصفوفة نمررها لها كـ
    public static int[] reverseArray(int[] array) {

        int[] result = new int[array.length];

        for (int i=0, j=result.length-1; i<array.length; i++, j--) {
            result[j] = array[i];
        }

        return result;
    }

}
•سنحصل على النتيجة التالية عند التشغيل

5000 4000 3000 2000 1000
دوال جاهزة للتعامل مع المصفوفات
الكلاس Arrays هو كلاس جاهز في جافا, يحتوي على دوال نوعها static تطبق على جميع أنواع البيانات البدائية و تستخدم للترتيب, البحث, المقارنة, و لإعطاء قيم لعناصر المصفوفة, ذكرنا لك بعضها في هذا الجدول.

إسم الدالة تعريفها
equals() تقارن المصفوفتين اللتين نضعهما كـ arguments و ترجع true إذا كانتا متساويتين في الحجم و المحتوى.
تابع القراءة »
sort() ترتب قيم المصفوفة التي نضعها كـ argument بشكل تصاعدي (ascending).
تابع القراءة »
fill() تأخذ إثنين arguments, الأول عبارة عن مصفوفة و الثاني عبارة عن قيمة سيتم وضعها بدل جميع قيم هذه المصفوفة.
تابع القراءة »

الكلاس System يحتوي أيضاً على دوال للتعامل مع المصفوفات, نذكر منها.

إسم الدالة تعريفها
arraycopy() تقوم بنسخ محتوى مصفوفة و تضعه في مصفوفة أخرى.



تعليقات