strings in ruby التعامل مع النصوص في روبي RUBY – الدمج، الاستيفاء وحفظها في متغيرات


إبراهيم البحيصي

مقدمة

النص عبارة عن سلسلة تحتوي على حرف واحد أو أكثر وقد تحتوي على حروف أبجدية، أرقام ورموز. النصوص في لغة البرمجة روبي عبارة عن كائنات (Objects)، وعلى عكس لغات البرمجة الأخرى، فإن النصوص قابلة للتغيير (Mutable) والتي تعني أننا نستطيع تعديل النصوص بدلًا من إنشاء نصوص جديدة.
ستستخدم النصوص في أغلب البرامج التي تكتبها، وتتيح لك النصوص عرض ما تريده للمستخدمين والتواصل معهم عبر نقل المعلومات لهم عبر الشاشة. في الحقيقة، إن النص الذي تقوم بقراءته الأن يتكون من مجموعة من النصوص المعروضة على الشاشة من خلال المتصفح. النصوص أحد أهم الأساسيات في البرمجة.
في هذا الدرس، سوف تتعلم كيفية التعامل مع النصوص بلغة الروبي. سوف تُنشئ النصوص، تعرضها على الشاشة، تحفظها في متغيرات، تدمج النصوص ببعضها وستتعلم في الدرس التالي كيفية التعامل مع الرموز الخاصة مثل السطر الجديد، الفواصل وعلامات التنصيص المزدوجة.

إنشاء وطباعة النصوص

تُحاط النصوص بعلامتي تنصيص مزدوجة ” أو علامتي تنصيص منفردة ’ في لغة الروبي، لذلك لإنشاء نص، لابد أن تحيط مجموعة الحروف بأحد علامتي التنصيص:

'This is a string in single quotes.'

"This is a string in double quotes."

تستطيع أن تختار أي نوع من علامات التنصيص، وفي أغلب الحالات لا يهم أيهما تختار ما دمت ثابتًا على أحدهما. على الرغم من ذلك، فإن استخدام علامتي التنصيص المزدوجة يتيح لك إجراء ما يسمى استيفاء النص (String Interpolation) والذي سوف تتعلمه في هذا المقال.
لعرض نص في برنامجك، تستطيع استخدام الوظيفة print والتي تعرض النص كما تم كتابته:

print "Let's print out this string."

قم بإنشاء برنامج روبي وأعطه الإسم print.rb ومن خلال محرر النصوص الخاص بك قم باستخدام الوظيفة print ثلاث مرات لطباعة نص:

print.rb
print 'This is the first string.'
print 'This is the second string.'
print 'This is the third string.'

قم بحفظ الملف وتشغيله باستخدام الأمر التالي:

ruby print.rb

وسوف تحصل على النتيجة التالية:

Output
This is the first string.This is the second string.This is the third string.

في الناتج الذي سبق، بدلًا من طباعة النصوص الثلاثة كلٌ في سطره، تم طباعة جميع النصوص في سطر واحد. إذا أردت أن يُطبع كل نص في سطر، يجب عليك أن تُضيف هذا السطر بنفسك وستتعلم ذلك تحت عنوان النصوص الطويلة والأسطر الجديدة، أو أن تستخدم الوظيفة put بدلًا من الوظيفة print. قم بتعديل البرنامج ومن ثم احفظ التعديل وفقا لما يلي:

 

print.rb
puts 'This is the first string.'
puts 'This is the second string.'
puts 'This is the third string.'

الان قم بتشغيل البرنامج مرة أخرى وستحصل على النتيجة التالية:

Output
This is the first string.
This is the second string.
This is the third string.

الوظيفة puts تطبع النص الذي تحدده لها وتطبع أيضا سطر جديد مع نهاية النص المُدخل.

حفظ النصوص في متغيرات

المتغيرات عبارة عن مؤشر لمكان في ذاكرة الحاسوب وتُستخدم لحفظ البيانات والرجوع إليها لاحقا. لحفظ نص في متغير، نُعرف اسم المتغير ونعطيه قيمة النص الذي نريده:

my_string = 'This is my string'

لاسترجاع القيمة النصية نستخدم اسم المتغير:

print my_string

لتجربة ذلك، نُنشئ ملف جديد باسم string_variables.rb باستخدام محرر النصوص ونضيف الشيفرة التالية:

string_variables.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

puts my_name
puts my_age

يقوم البرنامج بتعرف مُتغيرين my_name و my_age وكل متغير منهما تم إعطاءه قيمة نصية. بعد ذلك نقوم باستخدام الوظيفة put لطباعة كل منهما في سطر. نحفظ الملف ونقوم بتشغيله باستخدام الأمر التالي:

ruby string_variables.rb

ونحصل على النتيجة التالية:

Output
Sammy the Shark
none of your business

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

دمج النصوص

الدمج يعني ربط نصين أو أكثر ببعضهم لإنشاء نص جديد، ويتم باستخدام عملية الدمج التي يُشار لها بالرمز + ، ويُستخدم نفس الرمز في عملية جمع الأرقام خلال العمليات الرياضية. لدمج النصين “sammy” و “shark” نكتب ما يلي:

"sammy" + "shark"

وسوف نحصل على النتيجة التالية:

Output
sammyshark

الدمج يقوم بربط النصوص من النهاية للنهاية منتجًا نصًا جديدًا. إذا أردت أن يكون هناك فراغ بين النصين فعليك أن تُضيف هذا الفراغ لأحد النصوص:

"sammy " + "shark"

من الأغلب أنك لن تكتب شيفرة برمجية بهذا الشكل، ولكنك ستحتاج إلى استعمال النصوص مع المتغيرات وهنا يأتي دور الدمج. انظر المثال التالي:

color = "Blue"
print "My favorite color is " + color

الشيفرة السابقة سينتج عنها النص My favorite color is blue. لاحظ أننا تركنا فراغا بعد الكلمة is بحيث يكون الناتج يحتوي على فراغ بين اخر كلمتين.

تستطيع دمج نصوص عديدة بنفس الطريقة. أنشئ ملف باسم concatenation.rb وأضف فيه الشيفرة التالية:

concatenation.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

puts "My name is " + my_name + " and my age is " + my_age + "."

في الشيفرة السابقة قمنا بتعريف متغيرين my_name و my_age وكل منهما له قيمته النصية وطبعنا عدة نصوص ومتغيرات باستخدام عملية الدمج. عند تشغيل الشيفرة السابقة ستحصل على النتيجة التالية:

Output
My name is Sammy the Shark and my age is none of your business.

عند استخدام عملية الدمج مع أكثر من نص فإن النتيجة هي نص جديد. هذا النص الجديد نستطيع أن نحفظه في متغير لإعادة استخدامه مرة أخرى:

concatenation.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

# assign concatenated string to variable
output = "My name is " + my_name + " and my age is " + my_age + "."

# Print the output.
puts output

في مثال صغير مثل هذا لن تحتاج للمتغير output غالبًا، ولكن في برامج أكبر، من المحتمل أنك ستنشئ نص باستخدام عملية الدمج وتحفظه في متغير خاص وتستخدم هذا المتغير في أماكن متعددة. من الجيد أيضًا أن تتعود على فصل معالجة البيانات –مثل دمج النصوص والعمليات الرياضية– عن المخرجات كلما زاد حجم برنامجك، وكلما زاد حجم البرامج لديك أكثر ستحتاج لفصل العمليات المنطقية عن عمليات الإخراج في ملفات منفصلة ليسهل عليك إدارتها.
تأكد من عدم استخدام عملية الدمج + بين نوعي بيانات مختلفين، فمثلًا، لن تستطيع دمج نص مع رقم بطريقة مباشرة. لتتعرف أكثر على هذه الحالة، أنشئ ملف باسم string_and_integers.rb وأضف له الشيفرة التالية:

strings_and_integers.rb
my_name = "Sammy the Shark"
my_number = 27

print my_name + my_number

لاحظ أن المتغير my_number يحمل القيمة العددية الصحيحة 27. بعد تشغيل البرنامج ستحصل على الخطأ التالي:

Output
strings_and_ints.rb:4:in `+': no implicit conversion of Integer into String (TypeError)
    from strings_and_ints.rb:4:in `<main>'

الخطأ السابق يعني أننا لا نستطيع دمج متغير يحمل قيمة رقمية مع متغير آخر يحمل قيمة نصية. في نسخة الروبي 2.3 وما قبل، سيظهر لك رسالة الخطأ التالية:

strings_and_ints.rb:4:in `+': no implicit conversion of Fixnum into String (TypeError)
    from strings_and_ints.rb:4:in `<main>'

النوع Fixnum تم استبداله بالنوع Integer في نُسخ الروبي الجديدة.
نستطيع تعديل البرنامج ليصبح المتغير my_number يحمل القيمة النصية “27” أو نقوم بتحويل القيمة الرقمية إلى نصية بالطريقة التالية:
strings_and_integers.rb

my_name = "Sammy the Shark"
my_number = 27
print my_name + my_number.to_s

الوظيفة .to_s تقوم بتحويل الرقم إلى نص. هذه الطريقة أفضل لأنها تُحافظ على نوع المتغير my_number كما هو دون تغيير، حيث قد نحتاج أن نتعامل معه كرقم في أماكن أخرى من البرنامج. قم بتشغيل البرنامج مرة أخرى وستحصل على النتيجة التالية: Sammy the Shark27.
دمج الأرقام مع النصوص عملية ستتكرر معك دائما عند تعاملك مع العملات، أرقام الهواتف، الرموز البريدية وغيرها من البيانات التي تحتوي على أرقام، وعند حاجتك لعرض هذه البيانات على الشاشة كنصوص.
الدمج عملية قوية ولكن لديها بعض القيود. فمثلا، إذا أزلت عملية الدمج + بشكل غير مقصود سينتج لديك خطأ، وكذلك لدمج متغير يحتوي على نوع رقم فستحتاج لتحويله لنص أولًا. تُقدم الروبي طريقة أخرى لدمج المتغيرات مع النصوص وتُسمى هذه الطريقة بـ استيفاء النصوص والتي تعالج المشكلتين السابقتين.

استيفاء النصوص

عند دمج النصوص والمتغيرات يكون المُخرج صعبًا في القراءة والتنقيح. طريقة استيفاء النصوص تحل لك ذلك وتسمح بتضمين العبارات في النصوص المحاطة بعلامتي تنصيص مزدوجتين.
فبدلًا من كتابة ما يلي:

"My name is " + my_name + "!"

تستطيع كتابته بالطريقة التالية:

"My name is #{my_name}!"

بدلًا من استخدام العملية +، نستطيع تضمين المتغير الذي نريده باستخدام الرموز #{ } والتي تجعل روبي تقوم بتفسير التعبير وتُضمن النص الناتج عنه في النص الأصلي. البرنامج التالي يقوم بنفس عمل البرنامج السابق ولكن بطريقة استيفاء النص:

interpolation.rb
my_name = "Sammy the Shark"
my_age = "none of your business"

output = "My name is #{my_name} and my age is #{my_age}."

puts output

نستطيع استخدام طريقة استيفاء النص في دمج نص مع رقم بطريقة تلقائية. لنقم بتعديل البرنامج strings_and_integers.rb ليصبح كالتالي:
strings_and_integers.rb

my_name = "Sammy the Shark"
my_number = 27

# use interpolation instead of concatenation
print "My name is #{my_name} and my favorite number is #{my_number}."

ستقوم الروبي بتحويل المتغير my_number إلى نص بشكل تلقائي وعند تشغيل البرنامج ستحصل على النتيجة التالية:

Output
My name is Sammy the Shark and my favorite number is 27.

استيفاء النصوص طريقة قوية ومناسبة وهي مفضلة في دمج النصوص والمتغيرات.

خاتمة

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

 

ترجمة -وبتصرّف- للمقال How to Work with Strings in Ruby لصاحبه Brian Hogan





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن