النصوص (Strings)
مقدمة
لقد سبق أن تحدثنا عن النصوص (strings) في درس أنواع البيانات في المستوى اﻹبتدائي، وشرحنا فيه الأساسيات، أيضاً تحدثنا عن دمج النصوص وبعض الأمور المرتبطة بالنصوص في دروس المستوى الإبتدائي، واﻵن سنتعمق أكثر في النصوص ونتعلم الدوال المرتبطة بها والعمليات عليها، وسنناقش بعض المشكلات البرمجية ونضع حلولاً لها
اﻵن أنت قد تعلمت الكثير من المبادئ البرمجية، لذلك أنت اﻵن قادر على دراسة وفهم التفاصيل المتقدمة عن كل نوع من أنواع البيانات والعمليات عليه
اﻹختلافات بين اللغات: تختلف هذه الدوال من لغة لأخرى، فهناك دوال موجودة في لغات وليست في اﻷخرى، لكننا سنتحدث عن الدوال والعمليات اﻷهم والمشتركة تقريباً بين كل لغات البرمجة.
ربما يختلف اسم بعض الدوال التي سنشرحها من لغة لأخرى، لكن تبقى الدالة نفسها وتؤدي نفس الغرض.
الجدير بالذكر أن هذه الدوال ستساعدك بشكل كبير جداً لاحقاً في تنفيذ أي خوارزمية أو حل أي مشكلة برمجية.
لماذا هذا الدرس؟
تعلمنا اﻷمور اﻷساسية عن النصوص، لكن في بعض اﻷحيان نحتاج لإجراء عمليات أكثر على النصوص لحل مشكلات برمجية معينة، تأمل معي المشكلات التالية:
- لدينا نص عبارة عن كلمة سر المستخدم، ونريد أن نتحقق من طول كلمة السر فإذا كان طولها أقل من 6 نطلب منه أن يقوم بكتابة كلمة سر أقوى
- نريد أن نستبدل نص معين بنص آخر، مثلاً لدينا نص طويل ونريد تصحيح اﻷخطاء فيه، مثلاً نريد أن نبحث عن "انشاء الله" ونستبدلها بـ "إن شاء الله"
length
طول النص يمكننا معرفة عدد حروف النص (طول النص) باستخدام الخاصية length
كالتالي:
var name = "Mohammed";
console.log(name.length);
حل مشكلة طول كلمة السر
يمكننا حل المشكلة التي ذكرناها باﻷعلى وهي:
لدينا نص عبارة عن كلمة سر المستخدم، ونريد أن نتحقق من طول كلمة السر فإذا كان طولها أقل من 6 نطلب منه أن يقوم بكتابة كلمة سر أقوى
الخوارزمية
- نجلب طول كلمة السر
- نتحقق باستخدام الشروط هل طول كلمة السر أقل من 6
- نقوم بطباعة "كلمة السر قصيرة جداً"
- غير ذلك نطبع "كلمة السر قوية"
كود الحل
var password = "12345";
if (password.length < 6){
console.log("كلمة السر قصيرة جداً");
}else{
console.log("كلمة السر قوية");
}
جرب في المثال السابق تغيير قيمة المتغير
password
إلى "1234567"
استبدال النصوص
يمكننا استخدام الدالة replace()
لاستبدال نص بنص أخر
تأخذ الدالة مُدخلين، اﻷول هو النص الذي تريد استبداله، والثاني هو النص الجديد، وتقوم الدالة بإرجاع ناتج اﻹستبدال.
var text = "I like programming";
var newText = text.replace("programming", "coding");
console.log(newText);
replaceAll()
الدالة ﻷن الدالة replace()
تقوم بإستبدال الكلمة اﻷولى فقط، أول كلمة تجدها، فهناك دالة أخرى replaceAll()
مهمتها استبدال كل الكلمات التي تجدها في النص مهما كان عددها
var text = "I like programming and programming is my hobby";
var newText = text.replaceAll("programming", "coding");
console.log(newText);
لو جربت المثال السابق باستخدام الدالة
replace()
سيكون الناتج استبدال الكلمة اﻷولى فقط كالتالي: "I like coding and programming is my hobby"
تصحيح اﻷخطاء اﻹملائية
يمكننا حل المشكلة التي ذكرناها باﻷعلى:
نريد أن نستبدل نص معين بنص آخر، مثلاً لدينا نص طويل ونريد تصحيح اﻷخطاء فيه، مثلاً نريد أن نبحث عن "انشاء الله" ونستبدلها بـ "إن شاء الله"
var text = "انشاء الله هو مُصطلح شائع بين المُسلمين";
var replaceText = "انشاء";
var replaceBy = "إن شاء";
var newText = text.replaceAll(replaceText, replaceBy);
console.log(newText);
واﻵن أصبح لدينا متغير آخر
newText
فيه النص بعد تصحيح الخطأ واستبدال "انشاء" بـ "إن شاء"
دوال أخرى للنصوص
في كل لغة برمجة هناك دوال مُدمجة مع اللغة (Built in) يمكنك استخدامها لإجراء عمليات مختلفة على النصوص سريعاً، وذكرنا بعض هذه الدوال باﻷعلى، الجدير بالذكر أن هذه الدوال ستساعدك بشكل كبير جداً لاحقاً في تنفيذ أي خوارزمية أو حل أي مشكلة برمجية.
ليس من المهم أن تحفظ أسماء هذه الدوال، لكن المهم أن تعرف أن هناك دالة يمكنها أن تساعدك في كذا، وجرب كل دالة على اﻷقل مرة، فعندما تحتاج لها في حل أي مشكلة برمجيا مستقبلاً يمكنك البحث عنها بسهولة وإيجاد اسمها، سواء من المراجع أو الدروس التي تعلمت منها أو البحث على جوجل، والحفظ سيأتي بكثرة اﻹستخدام فقط.
الدالة | وصف الدالة |
---|---|
.toUpperCase() | تحويل كل حروف النص إلى حروف كبيرة (Capital) |
.toLowerCase() | تحويل كل حروف النص إلى حروف صغيرة (small) |
.trim() | دالة تقوم بحذف أي مسافات في أول النص أو آخره، مثلاً " test " تصبح "test" |
.repeat() | تكرار النص بعدد محدد من المرات |
هذه الدوال لا تقوم بتغيير قيمة المتغير اﻷصلي، هي فقط تقوم بإرجاع القيمة الجديدة، لكن يبقى المتغير الذي نجري على قيمته العملية كما هو بدون تغيير.
دوال اﻷحرف الكبيرة والصغيرة
var test = "Test";
console.log(test.toUpperCase());
console.log(test.toLowerCase());
test
trim()
الدالة دالة تقوم بحذف أي مسافات في أول النص أو آخره، مثلاً " test "
تصبح `"test"
var before = " Test text ";
var after = before.trim();
console.log(before);
console.log(after)
Test text
.repeat()
تكرار النص var text = "Test ";
console.log(text.repeat(4));
الوصول لأحرف النص
النص عبارة عن سلسلة من اﻷحرف وبالتالي لكل حرف من هذه اﻷحرف ترتيب يمكن استخدامه في الوصول للحرف، فمثلاً النص "ABC"
فيه ثلاثة أحرف، الحرف "A"
ترتيبه 0 والحرف "B"
ترتيبه 1 والحرف "C"
ترتيبه 2 وهكذا.
الوصول لحرف بترتيبه
يمكننا استخدام الدالة charAt()
للوصول للحرف عن طريق ترتيبه
var text = "ABCD";
console.log(text.charAt(0));
console.log(text.charAt(2));
C
اﻷحرف الخاصة
عندما نقوم بإنشاء نص جديد نستخدم علامات التنصيص ""
لكن ماذا لو أردنا أن نكتب داخل النص علامة تنصيص؟ يعني مثلاً نطبع: يمكننا تخطي "اﻷحرف الخاصة" بسهولة ويكون بداخل النص المطبوع نفسه علامة تنصيص!
لنجري تجربة سريعة:
var text = "يمكننا تخطي "اﻷحرف الخاصة" بسهولة";
console.log(text);
لماذا ظهر خطأ؟
ببساطة ﻷن المفسر يعتبر علامة التنصيص التي كتبتها جزء من الكود البرمجي، وبالتالي يحدث هذا التعارض الذي يظهر في الكود، ولكن كيف يمكننا تخطي وحل المشكلة؟
تخطي اﻷحرف الخاصة
يمكننا أن نضع العلامة المائلة المقلوبة \
قبل الحرف الخاص لنخبر المفسر أننا نريده أن يتخطى هذا الحرف الخاص، أن يعتبره حرف عادي وليس جزء من الكود البرمجي.
بدلاً من أن نكتب "
سنكتب \"
العلامة المائلة المقلوبة
\
أو كما نسميها (backslash) توجد في لوحة المفاتيح أعلى أو يسار زر Enter
لاحظ أن العلامة \
توضع قبل الحرف الخاص وليس بعده، ستجدها مع اللغة العربية على يمينه ومع الإنجليزية على يساره ﻷن اتجاه كتابة اللغتين مختلف، لكن اﻷهم أنها قبل الحرف الخاص.
var text = "يمكننا تخطي \"اﻷحرف الخاصة\" بسهولة";
console.log(text);
قائمة اﻷحرف الخاصة
الحرف الخاص | طريقة التخطي | ناتج التخطي |
---|---|---|
" | \" | " |
' | \' | ' |
\ | \\ | \ |
المساهمين
وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github