النصوص (Strings)

مقدمة

لقد سبق أن تحدثنا عن النصوص (strings) في درس أنواع البيانات في المستوى اﻹبتدائي، وشرحنا فيه الأساسيات، أيضاً تحدثنا عن دمج النصوص وبعض الأمور المرتبطة بالنصوص في دروس المستوى الإبتدائي، واﻵن سنتعمق أكثر في النصوص ونتعلم الدوال المرتبطة بها والعمليات عليها، وسنناقش بعض المشكلات البرمجية ونضع حلولاً لها

اﻵن أنت قد تعلمت الكثير من المبادئ البرمجية، لذلك أنت اﻵن قادر على دراسة وفهم التفاصيل المتقدمة عن كل نوع من أنواع البيانات والعمليات عليه

اﻹختلافات بين اللغات: تختلف هذه الدوال من لغة لأخرى، فهناك دوال موجودة في لغات وليست في اﻷخرى، لكننا سنتحدث عن الدوال والعمليات اﻷهم والمشتركة تقريباً بين كل لغات البرمجة.

ربما يختلف اسم بعض الدوال التي سنشرحها من لغة لأخرى، لكن تبقى الدالة نفسها وتؤدي نفس الغرض.

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

لماذا هذا الدرس؟

تعلمنا اﻷمور اﻷساسية عن النصوص، لكن في بعض اﻷحيان نحتاج لإجراء عمليات أكثر على النصوص لحل مشكلات برمجية معينة، تأمل معي المشكلات التالية:

  • لدينا نص عبارة عن كلمة سر المستخدم، ونريد أن نتحقق من طول كلمة السر فإذا كان طولها أقل من 6 نطلب منه أن يقوم بكتابة كلمة سر أقوى
  • نريد أن نستبدل نص معين بنص آخر، مثلاً لدينا نص طويل ونريد تصحيح اﻷخطاء فيه، مثلاً نريد أن نبحث عن "انشاء الله" ونستبدلها بـ "إن شاء الله"

طول النص length

يمكننا معرفة عدد حروف النص (طول النص) باستخدام الخاصية length كالتالي:

var name = "Mohammed";
console.log(name.length);
ناتج التشغيل 8

حل مشكلة طول كلمة السر

يمكننا حل المشكلة التي ذكرناها باﻷعلى وهي:

لدينا نص عبارة عن كلمة سر المستخدم، ونريد أن نتحقق من طول كلمة السر فإذا كان طولها أقل من 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);
ناتج التشغيل I like coding

الدالة replaceAll()

ﻷن الدالة replace() تقوم بإستبدال الكلمة اﻷولى فقط، أول كلمة تجدها، فهناك دالة أخرى replaceAll() مهمتها استبدال كل الكلمات التي تجدها في النص مهما كان عددها

var text = "I like programming and programming is my hobby";
var newText = text.replaceAll("programming", "coding");
console.log(newText);
ناتج التشغيل I like coding and coding is my hobby

لو جربت المثال السابق باستخدام الدالة 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
test

الدالة trim()

دالة تقوم بحذف أي مسافات في أول النص أو آخره، مثلاً " test " تصبح `"test"

var before = "      Test text   ";
var after = before.trim();
console.log(before);
console.log(after)
ناتج التشغيل       Test text   
Test text

تكرار النص .repeat()

var text = "Test ";
console.log(text.repeat(4));
ناتج التشغيل Test Test Test Test

الوصول لأحرف النص

النص عبارة عن سلسلة من اﻷحرف وبالتالي لكل حرف من هذه اﻷحرف ترتيب يمكن استخدامه في الوصول للحرف، فمثلاً النص "ABC" فيه ثلاثة أحرف، الحرف "A" ترتيبه 0 والحرف "B" ترتيبه 1 والحرف "C" ترتيبه 2 وهكذا.

الوصول لحرف بترتيبه

يمكننا استخدام الدالة charAt() للوصول للحرف عن طريق ترتيبه

var text = "ABCD";
console.log(text.charAt(0));
console.log(text.charAt(2));
ناتج التشغيل A
C

اﻷحرف الخاصة

عندما نقوم بإنشاء نص جديد نستخدم علامات التنصيص "" لكن ماذا لو أردنا أن نكتب داخل النص علامة تنصيص؟ يعني مثلاً نطبع: يمكننا تخطي "اﻷحرف الخاصة" بسهولة ويكون بداخل النص المطبوع نفسه علامة تنصيص!

لنجري تجربة سريعة:

var text = "يمكننا تخطي "اﻷحرف الخاصة" بسهولة";
console.log(text);
ناتج التشغيل Unexpected identifier

لماذا ظهر خطأ؟

ببساطة ﻷن المفسر يعتبر علامة التنصيص التي كتبتها جزء من الكود البرمجي، وبالتالي يحدث هذا التعارض الذي يظهر في الكود، ولكن كيف يمكننا تخطي وحل المشكلة؟

تخطي اﻷحرف الخاصة

يمكننا أن نضع العلامة المائلة المقلوبة \ قبل الحرف الخاص لنخبر المفسر أننا نريده أن يتخطى هذا الحرف الخاص، أن يعتبره حرف عادي وليس جزء من الكود البرمجي.

بدلاً من أن نكتب " سنكتب \"

العلامة المائلة المقلوبة \ أو كما نسميها (backslash) توجد في لوحة المفاتيح أعلى أو يسار زر Enter

لاحظ أن العلامة \ توضع قبل الحرف الخاص وليس بعده، ستجدها مع اللغة العربية على يمينه ومع الإنجليزية على يساره ﻷن اتجاه كتابة اللغتين مختلف، لكن اﻷهم أنها قبل الحرف الخاص.

var text = "يمكننا تخطي \"اﻷحرف الخاصة\" بسهولة";
console.log(text);
ناتج التشغيل يمكننا تخطي "اﻷحرف الخاصة" بسهولة

قائمة اﻷحرف الخاصة

الحرف الخاصطريقة التخطيناتج التخطي
"\""
'\''
\\\\

المساهمين

وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github