بسم الله الرحمن الرحيم في آخر المحاضرة الماضية
بدأنا في جزئية جديدة لموضوع الـ String أو بمعنى آخر
كيفية التعامل مع النصوص في البرمجة أنواع ال
variables اللي تكلمنا عليهم في المحاضرات السابقة
كانت بتتكلم عن ال primitive types وكانت بتركز على
التعامل مع الأرقام سواء كانت الأرقام صحيحة أو
floating point أو ال character أو البولين هذه كانت
ال primitive types أو الأنواع الأساسية لأن في
أنواع ثانية اسمها ال class type باختصار شديد ال
class type هي أنواع أكثر تعقيدا مركبة لأنها
فعليا تتضمن أو تستخدم داخلها ال primitive types من
ضمن الأنواع المركبة من ضمنها اللي هي نوع اسمه ال
string بداية المحاضرة الماضية أريكم كيف ننشأ String
جديد طريقة إنشاء String زي ما تنشأ متغير كيف تنشأ
متغير تضع ال data type وبعدين فراغ اسم المتغير أو
ال identifier وممكن تعطله قيمة لل String نفس
الحاجة تضع ال data type تبعها اللي هو بنسميه
String ويكون capital عكس ل primitive types كانت
small لهذا الـ String Capital إذا حط اسم الـ
String البداكية مثلا اسم المتغير name تمام، هيك
أنا عرفت String ممكن تعطيله قيمة يساوي مثلا أحمد
طلع القيمة بين double quotation هذا طريق التعريف
String الطريقة الثانية أنك تقوله new String
وتعطيله قيمة بالشكل هذا يعني يا الطريقة هذه يا إما
ممكن مباشرة أنك تحط فيه القيمة طيب
شفنا كمان أن انت ممكن تعمل يعني تنشئ string ثانية
last name
و string
ثالثة full name
you saw name plus last name لأن
زي ما نتعامل مع integer أو variable من نوع integer و
نعمل assignment state من نوع البيانات من variable
ل variable برضه نفس الحاجة ممكن نعملها بال string
هنا فعليا أنا بعمل string جديد اسمها full name
بتاخد القيمة الموجودة في ال name و ال last name بس
ايش بتعمل بينهم جمع طبعا هذه ليست عملية جمع هيسميها
ربط إذا كنت تستخدم ما بين الـ strings فبنسميها
عملية ربط طبعا ممكن أنت تربط مثلا تحط هنا مسافة
طبعا لو حطيت هنا رقم ايش بيصير؟ هيربط مع ال string
رقم عادي هيربط معاه هيحول الرقم ايش؟ String ويربط
معاه شفنا هذا الكلام لما عملنا system dot out لما
جربناها كنا نحط ال string مع أرقام يربط للرقم و
يحاولوا ضمنيا لل string طيب
نيجي
الآن لبعض
الأمور الجديدة اللي لو أنا جيت على name وعملت dot
هيطلع لي قائمة شايفين القائمة اللي طلعت يا جماعة طيب
هذه القائمة ما كانت تطلع لما كنت أنا أعرف primitive
type وليكن مثلا integer x يساوي خمسة لو جيت وعملت
x dot ما يطلع لي شيء طبعا لكن عند ال name لو
ضغط dot هيطلع لي قائمة كبيرة ايش
القائمة هذه الموجودة هذه يا جماعة احنا بنسميها
methods أو دوال أو ايش هي كلمة method بالإنجليزية
طريقة صح ولا لأ بس هنا الترجمة الحرفية بتاعتها
بالعربي بنسميها دالة أو وظيفة معينة تمام method
يعني وظيفة فعليا هذا ال method بنلاقيهش في
الأنواع ال primitive بنلاقيها في الأنواع المركبة
لأن هم عاملين نوع مركب وعاملين بعض الدوال اللي
بتساعدني في تنفيذ بعض المهام شائعة الاستخدام طب
خلينا نفهم أو نطلع الدوال هذه أول دالة أو إذا إذا
طلعت أنت على كل الدوال الدالة تتكون من حاجتين اسم
الدالة تمام وفي عندنا قوسين وبين القوسين في عندنا
قيمة معينة اسم الدالة وفيه قوسين وبين القوسين ممكن
يكون في عنده قيمة ممكن تكون بين القوسين فاضي طيب
اشهد ليش مرات بيكون فاضي يعني هذه وهذه مثلا
القوسين مالهم فاضي هذه وهذه في بينهم قيم معينة
طيب اشهد خلينا الآن عشان نفهم هذا الكلام ناخد أول
method طبعا الآن هذه عاملة زي أن انت لما تكتب بيعمل
filtering بناء على الكلام اللي بتكتبه مثلا المهام
اللي موجودة بتبدأ هذه كلها بحرف ال C شايفينها و
بعدين أبجديا لو أنت كتبت حرف ال L مثلا هيجيب لك كل
المهام اللي بتبدأ بحرف ال L بدي أخد أنا مهمة أول
مهمة بدي أتكلم عنها اللي هي اسمها length شايفينها
يا جماعة length طب ايش يعني كلمة length الطول طبعا
ال length هذه باختصار شديد بتجيب لي طول ال string
طول ال string يعني النص اللي أنا كتبته قد ايش طوله طب
من اسمها length طيب
بين
القوسين ايش مكتوب؟ فاضي طيب أصلا ايش فايدة القوسين؟
الآن بعض المهام يا جماعة بعض المهام عشان تشتغل
بلزمها input مثلا system.out.println println
بتذكرين كيف كنا نكتبها كنا نكتب println ونفتح قوسين
صح ولا لا وايه كنا نكتب بين القوسين الحاجة اللي بدك
تطبعها صح ولا لا لو ما كتبتش أي حاجة بين القوسين ايش
هيطلع عليك؟ هيطلع عليك error أصلا بيقول لك لازم تحط
حاجة فالآن هذا ال println لازمها input لأن أنت
بتقول له اطبع اطبع ايش لازم تعطيله حاجة الآن هذا ال
method ما يحتاج input ليش لأن هي بده تحسب طول أي
string اللي أنت name بالضبط أنا مش هادي تابع ال
length تابع لمين ل name يعني name ضد length هيحسب
لطول النص الموجود وين في name هل لازمها مدخلات
أخرى عشان تحسب أو عشان تعمل العملية المطلوبة لأ
فهذه method مدام القوسين فاضيين معناه أنه مش لازمها
أي مدخلات في method الثاني هنشوفهم الآن بلزمهم
مدخلات
لسة ما خلصناش يبقى ال method لها اسم لها مدخل
المدخل هنا في الحالة هذه في ال link فاضي لها حاجة
ثانية هنا شايفينها ايش مكتوب هنا أنت ايش هذا ال
أنت لأ هذا ال int القيمة المرجعة من الوظيفة هذه
القيمة المرجعة ايش يعني يعني الآن ال link هذه
هتحسب لك طول النص ايش هترجع لك رقم صح ولا لأ هيكون
نوع ايش int اكيد لازم ترجع رقم مش أنا بقول طول
النص برجع رقم في method ثانية ممكن ترجع حاجات
مختلفة ممكن ترجع نص تمام ممكن ترجع .. ما ترجعش حاجة
حد قلت هنجرب يبقى أي method يا جماعة اللي لها تلت
مكونات أساسية اسمها والمدخل لها والمخرج منها
تمام هذا ال method اسمها link مدخلها ولا حاجة
المخرج منها integer طب تعال نجربها طب أنا كتبت
هيك name dot length انتبه ثاني كمان أن ال method
دايما بتنفذ على مين على النص اللي بتستدعيها على ال
string اللي بتستدعيها يعني اللي أنا لو عندي string
ثانية اسمها x بتقول لي x dot length هينفذ ال length
على ال x طبعا هذا name dot length
طيب الآن ماشي أنا بدي أخد القيمة وأطبعها مثلا
name.length لو أنا اجيت بين القوسين هنا وقلت له
system.out.println وكتبت هذا كله ما بين القوسين
شايفين كيف name.length كلها حاطيتها ما بين القوسين
هو ايش هيعملها يا جماعة هيجي يحسب أو يقول name
.length ايش بترجع هذه كلها بترجع integer هيطبع على
قيمة ال integer فأنا الآن لو جيت قلت له run هيطبع له
خمسة خمسة هذا تقول النص تعال على النص هنا وقوله
ايش هيطبع
على تسعة ليش تسعة لأن الفاضي هذا اكتب character
طيب نرجع
لـ name.length مثلًا لأن أنا قلت إن الـ length هذه
بترجع رقم تمام؟ ممكن عشان نحفظ الرقم هذا و نستخدمه
بعدين أن نيجي هنا في الأول قبل الـ name.length و
نعرف integer N مثلا أو X يساوي name.length هذه
assignment statement صح ولا؟ و احنا بنعرف ال
assignment statement بحسب اللي موجود على اليمين و
بحطه في الشمال لأن أنا عرفت لما استخدمت name dot
length أن الـ length بترجع integer فحطيت عليها
الشمال متغير عشان المرجع من الـ length ينحط وين في
الـ N فاهمين ليش أنا عرفت الـ N هذا لأن أنا عرفت أن
الـ length بترجع قيمة فانا حطيت على شمالها متغير N
عشان ياخد القيمة اللي هترجع من الـ length الآن system
.out.println ايه طبع
ليه 9 طيب شوف الآن مثال هذا string
first
name
طيب مين يقول لي إيش الـ code هذا بيعمل؟
بيجيب
طول الـ string الأولى و طول الـ string الثانية و
بيجمعهم مع بعض و بحط الناتج في متغير اسمه length و
بطبع عليه length تبقى معايا يا جماعة هنا أنا كم
string عندي في البرنامج هذا؟ ما هو متغيرين الـ String
ما هي في هذا variable الـ first name variable نوعه
String طب هذا الـ String الأولى و هذا الثانية لأن
هذه الـ assignment statement قلنا في الأول بنعمل اللي
على اليمين إيش عملت أنا هنا قلت الـ first name dot
dot length هذه نتيجة إيش integer صح ولا زائد قلت
الـ last name dot length هذه برضه بترجع integer اللي
هو قيمته كمية تلاتة و تلاتة ستة ثمانية تمام فالآن
هيجمع التلاتة زائد الثمانية خمسة
زائد ثمانية تلت عشر الناتج هيحط وين في متغير اسم
الـ length طبعًا دلوقتي هذا متغير هذا integer غير الـ
length هذه هذا method تمام و هبقى يقول لي نفس الاسم
لأ هذه ده لا و هذا متغير حتى ممكن عشان ما تخبطوش
يسميه إيش X
هذه الناتج 13 طيب
واضح يا جماعة إيش الـ length هذه هذي بتجيب لك طول
النص واحد بيقول طب إيش هذي بنستفيد منها لها
تطبيقات كتير الآن في كتير من البرامج الـ editing
الكتابة بحدد لك حجم معين للنص شفته مثلا في الـ SMS
بيصير يعد كام message بتكتب مرات في الـ email كام
نص مرات في نماذج على الـ web بتلاقي بيحدد لك مثلا
لازم تكتب 100 حرف أو 500 حرف أو وانت بتكتب ويعد لك
كام حرف أنت قاعد تكتب كيف أنا بدي أجيب حجم النص
اللي أنا بكتبه باستخدام الـ method length
طيب تعال نشوف دالة تانية كيف بستخدم الدوال لازم
أكتب اسم الـ string في الأول اللي هو إيش اسم الـ
string first name و بعمل dot الدوال ما بتطلعش يا
جماعة إني لما أكتب اسم المتغير طيب جربنا احنا دالة
اسمها length اللي هبقى نجرب دالة تانية اسمها to
to lower case و to upper case هذي شايفينها to
lower case من اسمها ايه شان الـ to lower case الآن
بالضبط احرف صغيرة الآن احرف الكتابة يا جماعة يا
إما lower case يا إما upper case يا إما capital يا
إما small فلما أقول to lower case بروح للنص كله
بيخليه كله small letter لما أقوله to uppercase بروح
للنص كله و بيخليه كله capital طيب سواء lowercase
أو uppercase أطلع على الدالة أو الـ method اسم
الدالة to lowercase طبعًا و لاحظ دائمًا يا جماعة
لحتى الآن أسماء الدول تبدأ بـ small ولا capital
small هو غالبًا أسماء الدول تبدأ بـ small زي
المتغيرات طيب الدالة هذه to lowercase بتاخد input
لا تاخد input مش لازمها input لأن هي بتشتغل عاملين
على محتوى الـ first name صح أو لا مش لازمها مدخل
إضافي طب إيش مخرجها مخرجها نص النص المعدل يعني
منطقيًا هو مسك الدالة وعمل to uppercase عمل to
uppercase عاملين على النص طني نص جديد يعني هذه بترجع
نص جديد عشان هيك المخرج تبعها نص تعالوا نجربها أنا
روحت عليها خلينا نقول to upper case to upper أو
lower الاتنين نفس الحاجة هي هالدالة ما بتاخدش حاجة
و بترجع الـ string الآن هدا بترجع الـ string مدام ها
بترجع يبقى بده احط على شمالها متغير الـ String عشان
يحفظ النتيجة المرجعة من الـ method فبدا أجه هنا
أقول له String result يساوي زي هيك تعال
نشوف النتيجة، إيش بدنا نعمل؟ بدنا نطبع الـ result
system.out.println result تمام،
هي النتيجة، شايفين النتيجة؟ إيش مكتوب؟ أحمد كلها
capital
الآن سؤالي لو أنا حطيت هنا integer بمشي الحال ولا
لا؟ بمشي ولا بمشيش؟ لماذا؟
بمشي ولا بمشيش؟ المخرج تبع الـ to upper case ايه
إيش قلنا؟ string بنفع الـ string اللي بحطها في
integer؟ ولا أمرها صح أو لا يا جماعة الـ string لا
يمكنني أن أضعه في integer فبدون أن أقوم بإزالة الـ
comment لكي نرى النتيجة فهو يقول لي غلط اضغط
المؤشر على هذا هو لحاله يكتب لي جملة أنتم مش
شايفينها هنا اسمها incompatible types غير
متوافقة مهم يا جماعة تفهم الـ error أنا عشان هيك
أفرجك الـ error عشان لو مر عليك بعد هيك ما تقولش ولا
طالع أحمر و أنا مش عارف ليش و فضلك ساعة تجرب عشان
تشيل الأحمر بينما أنت لو قرأت هو بيقول لك إيش نوع
الخطأ اللي طالع Incompatible types يعني هذه لازم
تكون string طيب بدي أجرب تجربة تانية بدي أقول
system.out.println firstname يعني أنا بطبع الآن الـ
result وإيش؟ و الـ first name تعالوا نشوف إيش اللي
هييطبع ليه على الشاشة طيب
الـ result إيش طبعها؟ اللي هي في الأول أحمد كبلر الـ
first name زي ما هي إيش بنستنتج من هذه؟ بنستنتج إن
الـ method بتعدلش على الـ string الأساسية بترجع لك
string جديدة طبعًا لماذا بتعدل؟ لأنه بيكون عارف إن
أنت ممكن تكون النص الأساسي ماله محتاجه و بدك تحتفظ
فيه فهي الـ to upper case تاخد نسخة من الـ string بتعدل
عليها و بترجع لك string جديدة واضح هذه يا جماعة؟
طيب تجربة تانية
طب أنا هنا إيش عملت؟ إيش اختلفت عن المرة الماضية؟
ايوا طيب
احنا حكينا يا جماعة إن to upper case ما بتغيرش على
first name صح؟ بتاخد نسخة منها و بتعمل لك إلى
capital لأن أنا إيش عملت؟ النتيجة اللي طلعت ارجعت
حطيتها هوين في الـ first name عشان أعدل على قيمة الـ
first name يعني باختصار شديد هيك طبعًا لو وجدت طبع
هاي طبعة لك أحمد أو الـ first name صارت كلها
capital
هذه عاملة يا جماعة زي احنا لما كنا إيش نعمل كنا
نقوله x يساوي x زائد خمسة مثلا أنا هنا لما .. لما
ضفت خمسة على الـ X تتخزنش .. والنتيجة كلها راحت ..
خزنتها تانية على الـ X عشان أعدل قيمة الـ X تمام؟
يعني أنا ما أعدلش على قيمة المتغير إلا لما يكون موجود
على الشمال تمام؟ أنا هنا حطيت الـ first name على
الشمال على أساس نتيجة الـ lower case و upper case
ترجع تنحط في الـ string نفسها
طيب زي الـ to uppercase فيها نموذج التاني اسمها to
lower case إيش بتعمل؟ بتجيب كلها small letter واحد
بيقول هي أصلا small letter بيضلها small letter
هنا الحرف الأول capital فيصير small فانا روحت على
الـ first name عملت لها two lower case هذه رجعتلي
الـ string small letter و الناتج حطيته ثاني الـ
first name تعالى نشوف النتيجة الآن هذه طبعا لأحمد
كلها small letter طبعا
الآن كم دالة أخذنا؟ 10-10 الـ length و to lower
case و to upper case كل الدوال اللي احنا شفناها
تاخدش أي قيمة هل بتاخد input؟ لأ على ايش بتشتغل؟
على الـ string اللي استدعت الدالة الدالة بترجع بيانات
من أنواع مختلفة الـ length بترجع integer الـ to
lower و الـ to upper بترجع string طب تعالى نجرب
أمثلة أخرى لأن
first name و تعالى اعمل dot تعالى لأن نشوف دالة
جديدة اسمها char at
char at هذه الدالة اسمها char at بتاخد ايش integer
بترجع ايش char بتاخد integer و بترجع character طب ايش
هذه الدالة char at طلعوا معايا يا جماعة عشان نفهم
هذا
جملة hello كيف الـ string هذه بتخزن في الذاكرة لأن احنا
حكينا يا جماعة أنه الـ string هذا مش نوع primitive
فعليا هذا الـ string أنا لما أنشئها بروح بخزنها
كمجموعة من characters في الذاكرة قلنا إن كل
الأنواع المعقدة أو المركبة في النهاية تترجم لـ
primitive types في الذاكرة يعني فعليا الـ string
هذه شكلها في الذاكرة كالتالي لو فرضنا إن هذه
الذاكرة، مش هيك برسمها كذا في المقدمة؟ مقسمة ايش؟
أقسام، sales، كل sale إليها address مش هيك أخذته؟
لأن فعليا هذا الـ hello كل sale تاخد حرف واحد HELLO
هيك شكل تخزينها في الذاكرة الآن
أيضا هو ايش في
الـ Java أحيانا بيلزمني أمر على الحروف يعني أنا
أنشأت الـ string طب افرض أنا محتاج الحرف الأول
الحرف الثاني الحرف الأخير ليش بيلزمني أجيب الأحرف؟
عشان مثلا أبحث عنها مثلا أنت بدك تعمل بكرة أحد
الواجبات اللي هيكون معنا برنامج بطلب من المستخدم
يدخل password جديدة لأن الـ password مرات بيكون
عليها قيود أنه لازم مثلا ما تبدأش برقم أكثر من ثمان
حروف يكون فيها capital و small يكون فيها رمز من
الرموز صح ولا أنت لما تعمل برنامج زي هيك لازم
تخليه يمر على الحروف حرف حرف عشان تفحص عشان تشوف
يتحقق فيه الأمور هذه ولا لأ فلأن احنا كيف بدنا نمر
على الحروف هذه عشان نقرأها الـ java بتوفر لمثل
اسمها char at من اسمها ايش يعني char at الحرف
الموجود فيه ايش يعني at فيه الحرف فيه لأن هذه
الدالة بدها بيانات ليش بدها بيانات لأن أنت طالب
حرف أي حرف بدك بدها رقم الحرف مين الحرف اللي أنت
بدك هي ايش بترجع char
واضحة يا جماعة؟ شوفوا كيف الـ methods الـ input و
الـ output بيختلف بناءً على وظيفة الـ method الـ
length بدهاش حاجة لأنها بتحسب طول النص اللي
بتستدعي عليه الـ method صح؟ و بترجع لك طول النص اللي
هو integer to upper case و to lower case برضه
بدهاش أي input لأنها بتشتغل على النص نفسه تمام؟
بتحوله كله upper أو كله lower و بترجع لك نص جديد في
التغيير الجديد هذا الـ method char at أنت بتقول طلبني
حرف أي حرف بدك لازم تحدد له ايش بترجع الحرف اللي
أنت طلبته طيب ايش محطوط بين القوسين هنا integer ايه
يعني هذا بتفهم أنه ايش نوع البيانات اللي بدها
إياها integer ايش هو الـ integer المطلوب شوف لما تنشأ أي
string بيرقم الحروف بتاعتها ابتداء من صفر من صفر
يعني أول حرف ماذا يكون؟ لا نقول رقمه في حاجة يسميها
بالانجليزي index index يعني مثل مؤشر تمام فمؤشر
الحرف الأول دائما ببدأ من رقم صفر الثاني واحد
اثنين ثلاثة أربعة دائما يا جماعة في الكمبيوتر العد
ببدأ من واحد زي ما احنا تعلمنا الكمبيوتر دائما
ببدأ العد فيه من صفر تمام فأول حرف رقمه صفر آخر
حرف ايش رقمه؟
بالضبط طوله ناقص واحد يعني لو أنا عندي النص خمس
حروف آخر حرف رقمه أربعة صح ولا يا جماعة طيب الآن لو
أنا مثلا عندي أسماء بدي ارتبهم لازم أعرف أول حرف صح
ولا يا جماعة كيف الترتيب الـ الـ الـ الـ
الـ الـ الـ الـ الـ الـ الـ الـ الـ
الـ الـ الـ الـ الـ الف مثلا هذه أحد التطبيقات أنك
تجيب أول حرف مثلا هذه لازم لك للترتيب لأن نجي لـ الـ
first name أن نجيب أول حرف موجود فيه نقول char at
هو لحاله كتب صفر لأن أنا لو ما كتبتش حاجة بيطلع
الإنذار بيقول هذه بدها input أنت ما أعطيت الـ input
المطلوب فتعالى حط صفر مثلا أه تمام الآن لاحظ هذا
النص معلمه بالأصفر ايش هنا كلمة أصفر؟ ايش فرق
التعليم بالأحمر عن التعليم بالأصفر؟ هذا شغل IDE
الأحمر خطأ بيمشي البرنامج بدونه الأصفر حاجة مش خطأ
لأ ولا في أصح منها تمام بس مش منطقية مش خطأ معناه
البرنامج بيشتغل تمام هي مقبولة بالنسبة للكمبايلر لكن
منطقيا ممكن تكون مش مقبولة كأيش يعني مش مقبولة أن
أنت بتقوله جبت الحرف الأول طب ايش عملت فيه لا أنت
طبعته ولا أنت أخذته خزنته في متغير عشان تستخدمه
ما عملتش فيه حاجة هذه زي اللي جبت أنت كارت و رميته
في الهواء هل استفدنا من الـ character اللي جبناه؟
هل طبعناه؟ هل خزنّاه في متغير؟ ما عملناش حاجة ممكن
تبقى ليه شروط؟ ماشي لو خزنّاه خلاص بكون أنا هو
زي بينبهني بقول أنت استدعت method لكن مخرجها
ما استفدتش منه تعال أنت حط حط الماوس على السهم
هذه تمام؟ هو بيكتب لك كلام تعال نقرأ ايش بيقول لك
should check the method return value check the
method بتاعك ايش يعني افحص أو يعني انتبه على
القيمة المرجعة أنت هنا ما استخدمتهاش لأن أنت
خيارين ايش القيمة المرجعة نوعها حكينا character
فايش بنعمل بنعرف متغير على الشمال من نوع القيمة
المرجعة ايش نوع القيمة المرجعة character و تعال
الآن قل له system.out.println واكتب هنا C
فاهمين الحاجة يا جماعة تعال اعمل run هاي طبع ليه؟
طبع ليه ايه؟
char b firstname.char at 1 لحظة
شوية اشوف هنا
وهو الـ insert طيب هاي الـ system بدي أقوم بطباعة
في نفس الـ
ايش أنا قاعد بطبع؟ C فاصلة B هاي
الطبعة لـ A فاصلة H واضحة جمال أنا قاعد بطبع
الحروف بتاعة الـ الجملة طيب
char firstname
.char at 10
في أصلا حرف مكانه عشرة؟ لأ تعال اعمل run طلع لك
error كتب لك بالأحمر error تمام تعال نقرأ الـ error
جالك
في exception جالك هنا نوع الـ error هي اسمه string
index out of bound كويس أنه نفهم الخطأ string
index out of range قلنا أن الـ index هو عبارة عن
ايش؟ المؤشر out of range خارج النطاق كلها فأنت
حاطط مكان مش موجود أصلا عشان هيك طلع لك خطأ واضحة
يا جماعة الـ char at؟ طبعا احنا حكينا يا جماعة أن أنت
ممكن تحط القيمة المرجعة في متغير و تطبعها و ممكن
كمان مباشرة أنك تاخد استدعاء الدالة و تحطه داخل الـ
system.out يعني هنا ايش اللي بيصير بين القوسين هو
أول حاجة بنفذ اللي موجود بين القوسين بروح لاسم ال
string و بنفذ كأنه مرجع للحرف الأول و بطبعه هنا
طبعًا ايش عملت؟ أنا ما أخذتهاش في متغير و طبعت المتغير
لأ حطيت استدعاء الدالة داخل ال system.out.println
واحد بيقول لي هذا أضمن أحسن هذا ولا اللي قبله؟
ما فيش حاجة أضمن من اللي .. لأن أنا اللي قبل أرتب
لأنه أنا بأخذ في متغير و ممكن أستفيد منه بعد هيك و
أستخدمه تمام؟ هنا لو أنت مش محتاج متغير خلاص
النتيجة بتتطبع زي ما هي تستخدم الطريقة هذه تخيل
طبعتها ليه؟ الـ A طيب شوف الآن الفكرة هذه لو أنا قلت
يا جماعة بضطبع الحرف الأخير ايش بنعمل؟ الحرف
الأخير إذا كان بيقول car C بقوله بروح ل first name
و بقوله طب أنا طول النص عندي قداش؟ خمسة صح؟ الحرف
الأخير ايش بيكون رقمه؟ أربعة car at أربعة
و بعدين نقول System.out.println C طبعًا
للدي صح طبعًا لو حطيت خمسة ايش بيكون الحل غلط error
فاش حرف ما كانوا خمسة تمام لأنه بيبدأ العد من صفر
طيب افرض أن أنا غيرت النص هذا نص طويل اه علي مثلًا
عمر عبدالله هكذا أنا غيرت النص هذا هلجت هيطلع لي
error ليش أربعة مش موجودة في النطاق هذا تمام أيوة
تمام
ممتاز هي زميلكم حلها قال لك أنا النص هذا ممكن يتغير
ممكن أفرض هذا النص بداخل المستخدم ممكن يدخل اسم
كبير أو صغير فكيف أنا البرنامج بتخليه يتعامل مع
النص بغض النظر كم طول الاسم اسمالكم يقول فكر شوية
احنا أخذنا تو ميثود بتجيب طول النص فبروح بعرف ايش
اسم الـ method first name dot length هذه بتجيب طول
النص وبعدين بجي بعرف متغير هنا اسمه L مثلًا أو N
بخزن فيه طول النص الآن بجي بقوله طبعًا ممكن تقوله
هنا L يساوي L ناقص واحد زي ما أخذنا ايش هذه بعمل
أنا هنا بنقص الـ L بواحد أو ممكن تقوله بمشي الحلم و
بمشيش أو L ناقص يساوي 1 بمشي الحلو أو لا أنا جبت
طول النص بعدين طرحت منه واحد ليش طرحت منه واحد
عشان يجيب مكان آخر حرف في فرق ما بين طول النص و مكان
آخر حرف طول النص عشرة بس مكان آخر حرف تسعة تمام
بعدين بقول char at صح
يا جماعة تمام و بعدين أقبع هذا طبعًا لأ غير الناس
ايش ما يكون هاي
عبدالله اعمل run هاي طبعًا لك اتش واضحة
تهدأ يا جماعة كيف شوف كيف أنا استفدت من مخرج
method كمدخل لـ method ثاني تمام يعني أنا في الأول جبت
الطول والنص أنا قلت بدي أطبع آخر حرف نتعلم يا
جماعة التفكير المنطقي قبل ما نكتب code لازم نفكر
أنا قلت بدي مكان آخر حرف بدي أفكر دائمًا في الدوال
اللي بتساعدني آخر حرف أو احنا درسنا أنه عشان تجيب
حرف بتستخدم الـ method char at طب char at بديها ايش
بديها مكان آخر حرف طب كيف نجيب مكان آخر حرف؟ النص
مختلف ممكن يكون نص كبير و نص صغير لكن احنا بنعرف
أن مكان آخر حرف هو طول النص ناقص واحد و احنا أخذنا
دالة بتجيب طول النص اللي هي الـ length فروحت استدعيت
الـ length عشان يجيب طول النص و طرحت منها واحد عشان
يجيب مكان آخر حرف و بعدين قلت له char at و أعطيته
مكان آخر حرف واضح؟
نأخذ دالة ثانية تعال نشوف دالة ثانية first
name dot
طيب هذه دالة كويسة تعالوا يا جماعة نشوف النص هذا
طيب
بدك تكتب نص هال gate و النص هذا يا جماعة الـ method
اللي بناخدها الـ gate اسمها طبعًا في text هال gate
text nano فاضيفي ميثود اسمها text.replaceAll
replace all ايش هي كلمة replace بالإنجليزي ايش هي
كلمة replace استبدل ايش بتتوقع هذا الـ method بتعمل
بتبدل نص مكان نص هي هتطلع ايش .. ايش بتاخذ بتاخذ
حاجتين النص اللي بدك تشيله و النص اللي بدك تحطه
مكانه تمام؟ واِيش بترجع؟ النص الجديد بعد التعديل
تعالوا ناخذ مثال سريع
طب هذا النص Jerusalem is the capital of Israel and
Israel is an independent state هذا النص بدنا نعمل
فيه استبدال لايش لإسرائيل بنحط بدلها Palestine طب
على هذا الاستبدال احنا بلزمنا في حالات كثير صح و
لا يا جماعة افرض أنا بيجي عند نص بده اشيل منه
كلمات معينة تغيير كلمات في نص معين أو مرات مثلًا في
برامج تشات بتلاقي الكلمات الخارجة عن النص ايش
بيعمل؟ حط بدالها نجل مثلًا أو بشيلها هذا استبدال
لأن هذا النص بدأ استبدل في كلمة إسرائيل
بالفلسطين ما عليك إلا تيجي للنص text بتعمل dot
تستدعي الـ method اسمها replaceAll تعطلوا النص
اللي بدوا يستبدله وبعدين
تعطلوا النص الجديد
هيك هي استبدل كيف نعرف إن استبدل ولا لا system
.out.print للمين طب
ماشي تعال نطبع طلع النص استبدل مستبدلش ليش؟ من
يقول ليش؟ أيوة لأن أصلاً هذا النص لسه معلم لي
بالأصفر ايش بيقول لي؟ بيقول لي أنت النص المرجع ما
استخدمتهوش و قلنا يا جماعة أن أي method أنا
بستدعيها to lower case, to upper case, length,
replace ما بتعدلش عن النص الأصلي بترجع نص جديد
اه فتعال هنا تقوله string x مثلًا هيك أنت النص
المعدل هيتخزن وين؟ في الـ x ليش الـ x حطت الـ string؟
لأن هو حكى لي أن replaceAll بترجع الـ string ماشي
يا جماعة؟ فعشان ايك أنا حطيت الـ string x و الآن
بطبع الـ x
تعال اعمل run وهي النص المعدلة لو كان طول النص إن
شاء الله مليون صفحة و فيه الكلمة هذه هروح يستبدلها
من كلها ماشي
لحظة شوية الآن كنت هأعملها أنا هلجت أنا حطيت x
ممكن نحط بدل الـ x عشان نوفر متغير الـ text نفسه ايش
فارق يعني أنا بدل ما يكون عندي text و اعمل متغير
جديد x خليته ياخذ الـ text و يستبدل الكلمة و يرجع
لنص جديد و الناتج الجديد رجعت خزانته ثاني في الـ X
في الـ text ايش فارق عن قبل؟ ولا حاجة الفارق أن أنا
هنا عدلت عن نص الأساسي تمام؟ لكن في اللي قبل أنا
احتفظت في النص الأساسي و جبت نص جديد تمام؟ مين
أفضل هذه أو هذه حسب البرنامج مرات أنت بلزمك أنك
تحتفظ في النص الأساسي و تجيب نص معدل و مرات بلزمك
خلاص بلزمكاش النص الأساسي بتعدل عليه رجعت
أنا لـ أطبع text هيجرزن is the capital of Palestine
ممكن
استبدل هذه مثلًا مرات بقول أنا بتدمح كلمة من النص
تمام ولا حاجة شيء حط هذا فعض هيك ما فيش method
اسمها delete تمام بس الـ replace اسم بتنفع
ماشي .. ما هو .. زي ما قلت حسب اللي بدك اياه يعني
أنت أنا مرقت الـ scenario اللي بشرح لك إيّاه أو المثال مش
عامل كثير تمام؟ بس يعني في حين .. عشان تعرف أن الـ
delete مش موجود بس في replaceAll هيك هيستبدل كل
الكلمات بحاجة فاضية تمام؟ هاي النص الجديد شايفين
كيف شال الكلمة هذا فهذا للاستبدال أو مثلًا ممكن نحط
نجوم زي هيك
واضح يا جماعة؟ method أخيرة سهلة نخلص فيها طيب
في method x dot concat
هذه شايفين method هذه؟ اسمها Concatenate
Concatenate اختصارًا لكلمة Concatenate الكلمات يا
جماعة مهمة Concatenate
Concatenate معناها ربط أو اربط احنا
كيف تعلمنا أن نربط الجمال X زائد هذه نفس عمر
الزائد هي كونكات بطريقة أخرى يعني أنا لو قلت له X
concat طبعًا هذا الـ method إيش بتأخذ وإيش بترجع؟
بتأخذ string طب إيش الـ string اللي بتأخذها؟ ال
string اللي بتأخذها تربطها مع الـ string الأساسية
اللي استدعيتها عن طريقها الـ method أنا استدعيت ال
method عن طريق أي string X ومررت لها لما أقول كلمة
مررت لها إيش يعني إيه؟ يعني بعثت كمدخل للـ method
string Y استدعيت كونكات عن طريق الـ X ومررت لها Y
هيربط الـ Y في مين؟ في الـ X في آخر الـ X تمام؟ هاي
كونكات بحط هنا Y مرة ثانية كونكات إيش بترجع؟ string
جديدة ما هو أنا دائمًا .. يعني إيش النتيجة؟ بديهية
لما أربط two strings إيش الناتج؟ string جديدة فهاي
كونكات أعطله Y هيك معناها هي نفسها تمامًا تكافئ X زائد
Y ليش علمليها بالأصفر؟ لأ أنا ما استفدت منه تمام؟
string result و
بعدين أحكيله system dot out dot println
هذا أحمد عليه ربطهم في بعض ممكن تجي تعمل شيء زي
هيك إيش يعني ربط للـ X بمين بمسافة زائد Y يعني
ما هو المسافة زائد Y صارت هي كلها string
الكونكات كانت زي ما قلت ممكن ما تستخدمهاش ممكن
تستبدلها بإيش بـ X زائد Y بتمشي
تمام هي نفس الـ X زائد Y طيب نستكفل اليوم بالقدر
هذا اليوم أخذنا عدد من الـ methods على الـ string
المرة الجاية لسه هنكمل في الـ methods بتاعة ال
string