بعض الخصائص المفيدة للسلاسل الحرفية

الآن بعدما تعلمنا أساسيات السلاسل، دعنا نبدأ في التفكير وتجربة العمليات التي يمكننا القيام بها على هذه السلاسل، مثل إيجاد طول السلسلة، ربط السلاسل وأيضًا طريقة تقسيمها إلى أجزاء، ومعرفة كيفية استبدال حرف بآخر، وأشياء أخرى.

المتطلبات اﻷساسية: أساسيات استخدام الحاسوب ، فهم أساسيات HTML و CSS ، وفهم ماهية الجافاسكربت.
الهدف: فهم أن سلاسل الحروف strings هو عبارة عن كائنات ، وتعلم كيفية استخدام الطرق المتاحة لهذه الكائنات لمعالجة سلاسل الحروف strings .

السلاسل ككائنات

معظم اﻷشياء في الجافا سكريبت هي كائنات. فعند إنشاء سلسلة، على سبيل المثال بإستخدام :

let string = 'This is my string';

يصبح المتغير الخاص بك مثل كائن سلسلة، وبناءًا على ذلك يصبح لديه العديد من الخصائص والأساليب المتاحة له والتي يمكن تنفيذها عليه. يمكنك رؤية ذلك إذا انتقلت إلى صفحة الكائن String وألقيت نظرة على القائمة الموجودة في هذه الصفحة بالأسفل.

اﻵن وقبل أن يبدأ عقلك في التوهان أو التشتيت، لا تقلق! أنت لست بحاجة لمعرفة هذه اﻷشياء في وقت مبكر من رحلة تعلمك للجافا سكريبت. وهناك عدد قليل من الاحتمالات لإستخدامك هذا كثيرًا والذي سننظر إليه هنا في هذا المقال.

دعنا نجرب بعض اﻷمثلة داخل الكونسول الخاص بالمتصفح.

إيجاد طول السلسلة

هذا سهل للغاية — أنت ببساطة تستخدم هذه الخاصية لإيجاد طول السلسلة length حاول إتباع الأسطر التالية :

// هنا نقوم بإنشاء متغير يحتوي على سلسلة نصية
let browserType = 'العربية';

// هنا نقوم بكتابة اسم المتغير متبوعًا بالخاصية لمعرفة طول القيمة الموجودة داخل المتغير
browserType.length;

النتيجة ستكون 7, ﻷن كلمة "العربية" تحتوي على 7 أحرف. وهذه الخاصية مفيدة لعدة أسباب؛ على سبيل المثال، قد ترغب في العثور على أطول سلسلة نصية من اﻷسماء حتى تتمكن من عرضها بترتيب الطول، أو إخبار المستخدم أن اسم المستخدم الذي قام بإدخاله في حقل النموذج (حقل الإدخال) هو طويل جدًا. (في حالة تجاوز الاسم طول معين.)

استرجاع (استدعاء) حرف سلسلة معين

في ملاحظة ذات صلة،  يمكن إرجاع أي حرف داخل السلسلة باستخدام الاقواس المربعة — هذا يعني إدراج أو تضمين اﻷقواس المربعة ([]) في نهاية اسم المتغيرالخاص بك. وفي داخل اﻷقواس ستقوم بكتابة رقم الحرف الذي تريد إرجاعه،  لذا على سبيل المثال إذا كنت تريد إرجاع الحرف اﻷول فستقوم بإتباع الكود التالي:

browserType[0];

تذكر: الكمبيوتر يبدأ العد من 0 وليس1! ويمكنك استخدام هذا على سبيل المثال للعثور على الحرف اﻷول من السلسلة وترتيبها أبجديًا.

لكي نستدعي الحرف اﻷخير ﻷي سلسلة حروف ، سوف نستخدم السطر التالي , باﻹضافة إلى استخدام خاصية length  التي ذكرناها في اﻷعلى:

browserType[browserType.length-1];

إن طول  "mozilla" هو 7 حروف , ولكن ﻷن العد يبدأ من 0 , فإن موقع الحرف هو 6; باستخدام  length-1 يعطينا الحرف اﻷخير.

إيجاد سلسلة حروف فرعية داخل السلسلة الرئيسية واستخراجها

أحيانًا تريد أن تسدعي بعض الحروف الموجودة داخل السلسلة الكبيرة (نقول بشكل عام إذا كانت سلسلة فرعية موجودة داخل السلسلة اﻷم ). نستطيع فعل هذا بواسطة استخدام طريقة indexOf() , والتي تحتوي عامل  parameter — السلسلة الفرعية التي نريد أن نستدعيها.

  1. جرب هذا:
    browserType.indexOf('zilla');
    والنتيجة هي 2 , ﻷن سلسلة الحروف الفرعية  "zilla" تبدأ من الموقع 2 (0, 1, 2  — أي 3 حروف) بداخل "mozilla". مثل هذا الكود من الممكن أن يستخدم لفلترة السلاسل الحرفية. على سبيل المثال , لدينا قائمة بالعديد من عنواين الويب ونريد أن نستدعي فقط العنوان الذي يحتوي كلمة "mozilla" .
  1. هناك طريقة أخري لذلك , التي من الممكن أن تكون فعالة . جرب المثال التالي:
    browserType.indexOf('vanilla');
    يجب أن تكون النتيجة هي -1 — هذا ﻷن سلسلة الحروف التي نبحث عنها في هذه الحالة ,  'vanilla', غير موجودة في السلسلة الرئيسية.

    يمكن استخدام هذا ﻹيجاد كل حالات السلسلة  حيث ﻻ تحتوي السلسلة الفرعية  'mozilla',( أو فعل ذلك باستخدام عامل النفي ، !==) :
    if(browserType.indexOf('mozilla') === -1) {
      // do stuff with the string if the 'mozilla'
      // substring is NOT contained within it
    }
    
    if(browserType.indexOf('mozilla') !== -1) {
      // do stuff with the string if the 'mozilla'
      // substring IS contained within it
    }
  2. إذا علمت أين تبدأ السلسلة الفرعية داخل السلسلة الرئيسية , وتعلم الحرف اﻷخير الذي تريده ,فإن slice() تستخدم لاستدعاءه . جرب المثال التالي:
    browserType.slice(0,3);
    النتيجة هي "moz" — البرامتر اﻷولparameter يشير إلى موقع الحرف الذي نريد أن نبدأ البحث من عنده , البرامتر الثاني parameterيشير إلى موقع الحرف الذي يوجد بعد آخر حرف تم استدعاءه. لذلك التقطيع slice  يحدث بداية من الحرف اﻷول حتى الحرف اﻷخير لكنه ﻻ يشمل الحرف اﻷخير . في هذا المثال , من البداية 0 ، فإن البرامتر الثاني  يساوي طول السلسلة التي نريد استدعائها.
  3. أيضًا ، إذا أردت استدعاء كل الحروف المتبقية بعد حرف معين , فإننا ﻻ نحتاج البرامتر الثاني! بدلًا من ذلك نحتاج فقط موقع الحرف الذي نريد أن نستدعي الحروف المتبقية بعده. جرب المثال التالي:
    browserType.slice(2);
    والنتيجة هي "zilla" — وهذا ﻷن الحرف الذي رقمه 2 هو الحرف z ، وﻷننا لم نكتب البرامتر الثاني ، فإن النتيجة هي طباعة كل الحروف بعد هذا الحرف . 

ملاحظة : البرامتر الثاني  parameter للــ slice() هو اختياري : إذا لم نكتبه ، فإن النتيجة تكون حتى نهاية السلسلة الرئيسية.   أيضًا هناك خيار آخر ، راجع صفحة ;  slice()  للاطلاع على المزيد حول slice.

تغيير حالة الحروف

خاصية toLowerCase() و toUpperCase() تستخدم لتحويل الحروف لحروف صغيرة أو حروف كبيرة, على التوالي. وهذا مفيد حيث على سبيل المثال إذا أردنا تهيئة البيانات التي أدخلها المستخدم قبل حفظها في قاعدة البيانات . 

دعونا نجرب المثال التالي ونرى ما سيحدث:

let radData = 'My NaMe Is HeSHam';
radData.toLowerCase();
radData.toUpperCase();

تحديث أجزاء من السلسلة

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

هذه الخاصية لها 2 بارامتر ( الحروف الذي تريد استبدالها, والحروف الجديدة). جرب هذا المثال:

browserType.replace('moz','van');

والنتيجة هي طباعة كلمة "vanilla"  في الكونسول. ولكن إذا تفحصنا قيمة . browserType,فإنها ما تزال "mozilla" . لتحديث قيمة المتغير  browserType حقيقة, سوف نحتاج إلى تحديد قيمة المتغير للقيمة التي نتجت لدينا ؛ حيث أن قيمة المتغير ﻻ تتحدث تلقائيًا . لذلك نحن بحاجة لكتابة هذا الكود: 

browserType = browserType.replace('moz','van');

أمثلة عملية للتعلم

في هذا القسم سوف نتعلم كتابة كود لمعالجة السلاسل الحرفية. في كل مثال باﻷسفل , لدينا مصفوفة من العبارات ، و حلقات تكرارية لتنفيذ القيم في المصفوفة وعرضها في قائمة نقطية. ﻻ تحتاج إلى معرفة المصفوفات والحلقات التكرارية اﻵن ( سوف تُشرح في مقالات مستقبلية). كل ما تحتاجه في كل مثال هو كتابة الكود الذي سوف يعرض العبارات في الهيئة التي نريدها.

كل مثال يحتوي على زر "reset" حيث يمكن إرجاع الكود إلى حالته اﻷصلية في حالة الخطأ أو أن الحل لم يعمل جيدًا ، وهناك زر "Show solution" يمكن الضغط عليه لترى اﻹجابة المحتملة إذا واجهتك مشكلة بالفعل.

معالجة رسائل التهنئة

في أول تمرين سوف نبدأ بشيء بسيط — حيث لدينا مصفوفة من رسائل التهنئة ، ولكننا نريد أن نرتبها في قائمة مثل رسائل العيد. سوف نستخدم الحاﻻت الشرطية   if( ... )  ، لطباعة الجمل في قائمة إذا كانت رسائل تهنئة.

  1. نفكر أوﻻً حول كيفية معرفة رسائل التهنئة في كل عبارة. هل هذه العبارة موجودة في الرسائل ، وما هي الطريقة التي نستخدمها لمعرفة ذلك ؟
  2. سوف نحتاج إلى كتابة حالة شرطية .
  3. تلميح: في هذا المثال من الفيد اختبار الطريقة لمعرفة النتيجة الصحيحة.

إصلاح الحروف الكبيرة

في هذا التمرين لدينا أسماء المدن في المملكة المتحدة، ولكن الحروف الكبيرة مكتوبة بشكل عبثي . نريد منك تغييرها للحروف الصغيرة، ماعدا الحرف اﻷول يكون كبير . وأفضل طريق لعمل ذلك هو :

  1. حول كل كلمة في متغير  input  للحروف الصغيرة وخزنها في متغير جديد.
  2. اقتنص الحرف اﻷول من كل كلمة في هذا المتغير الجديد وخزنه في متغير آخر.
  3. استخدم المتغير اﻷخير لاستبدال الحرف اﻷول من الكلمة بحرف كبير. وخزن نتيجة عملية الاستبدال لمتغير جديد آخر.
  4. غيِّر قيمة متغير result لتساوي النتيجة النهائية.

ملحوظة: البرامتر الخاص بالطريقة المستخدمة ليس فقط الحروف ، بل يمكن أن يكون متغير أيضًا .

عمل عبارة جديدة من العبارة اﻷصلية

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

MAN675847583748sjt567654;Manchester Piccadilly

نريد استخراج كود المحطة والاسم ، ووضعهم جميعًا في عبارة واحدة بالهيئة التالية:

MAN: Manchester Piccadilly

نقترح أن تتبع هذه الخطوات:

  1. استخرج الثلاثة أحرف لكود المحطة وخزنه في متغير جديد.
  2. أوجد رقم موقع حرف الفاصلة المنقوطة ; .
  3. استخرج اسم المحطة باستخدام رقم موقع الفاصلة المنقوطة كنقطة مرجعية ، وخزنه في متغير جديد .
  4. اربط المتغيرين الجديدين مع العبارة لعمل عبارة جديدة .
  5. غيِّر قيمة المتغير result لتساوي العبارة النهائية، وليست العبارة الأصلية input.

اختبر مهاراتك!

لقد وصلنا لنهاية هذا المقال. ولكن هل تستطيع أن تتذكر المعلومات المهمة؟ تستطيع أن تجد بعض الاختبارات لتثبت هذه المعلومات في الذاكرة قبل أن تذهب __   اختبر مهاراتك : السلاسل الحرفية.

الخاتمة

ﻻ نستطيع الهروب من الحقيقة بأنه القدرة على معالجة الكلمات والجُمَل في البرمجة هو في غاية اﻷهمية __ بخاصة في الجافا سكربت، مثل مواقع التواصل مع الناس. هذا المقال يعطيك اﻷساسيات التي تحتاج معرفتها حول معالجة سلاسل الحروف (العبارات). هذا يجب أن يفيدك جيدًا عند قراءة مواضيع معقدة في المستقبل. اﻵن لنذهب للنظر في النوع الرئيسي من البيانات التي نحتاج للتركيز عليها __ المصفوفات arrays  .

تمت بحمد الله.

في هذه الوحدة