الصنف String
في روبي
السلاسل النصية (string) هي سلسلة تحتوي على حرف واحد أو أكثر وقد تحتوي على حروف أبجدية، مثل أرقام ورموز، ويكون كل حرف (أو رمز أو رقم) ممثلاً ببايت. السلاسل النصية في لغة البرمجة روبي عبارة عن كائنات (Objects)، وعلى عكس لغات البرمجة الأخرى، فإن النصوص قابلة للتغيير (Mutable) والتي تعني أننا نستطيع تعديل النصوص بدلًا من إنشاء نصوص جديدة.
علامتا الاقتباس المزدوجتين والمفردتين
يتم إنشاء السلاسل النصية (string) في لغة روبي باستعمال علامات الاقتباس المزدوجة (مثل "string"
) أو المفردة (مثل 'string'
).
يمكن مثلًا كتابة العبارة النصية Hello Ruby بالشكل “ Hello Ruby ” (علامتا تنصيص مزدوجتين) أو الشكل ‘ Hello Ruby ’ (علامتا تنصيص مفردتين). الفرق الوحيد بينهما هو أن الطريقة الأولى تتيح استيفاء النصوص (String Interpolation) وإدراج شيفرات برمجية في السلاسل النصية.
تهريب علامات الاقتباس
يتم تهريب علامات الاقتباس بوضع الخط المائل العكسي قبل علامة الاقتباس بالشكل التالي "\
:
“Sami said: \” Hello everyone \” “ #=> Sami said: “ Hello everyone “
استعمال المحددات
يمكن تعريف السلسلة النصية باستعمال المحددات، حيث توضع في البداية علامة النسبة المئوية (%)، ومن ثم توضع المحددات في بداية ونهاية السلسلة النصية، والمحددات هي رموز يختارها المبرمج، على سبيل المثال علامة $ وعلامة & وعلامة @، كذلك يمكن استعمال الأقواس المعقوفة ({ }) أو المُربعة ([ ]) كمحدد. إليك المثال التالي :
%$ Sami Says: “ Hello everyone “ $ #=> Sami Says: “ Hello everyone “
%{ Sami Says: “ Hello everyone “ } #=> Sami Says: “ Hello everyone “
%[ Sami Says: “ Hello everyone ” ] #=> Sami Says: “ Hello everyone “
واضح من المثال أنه أياً كان المحدد، فإن النتيجة سوف تبقى نفسها.
السلاسل النصية والمتغيرات
يمكن حفظ السلاسل النصية في متغيرات من أجل العودة إليها لاحقًا، إذ كل ما يجب فعله هو تعريف اسم المتغير وإعطاءه قيمة النص المرغوب تخزينه.
title = “Welcome To Ruby Documentation”
puts title #=> Welcome To Ruby Documentation
إدراج شيفرات برمجية في السلاسل النصية
يتم إدراج شيفرات برمجية في السلاسل النصية عن طريق وضعها ضمن أقواس معقوصة ({ }
) مسبوقة بعلامة #
ضمن السلسلة النصية نفسها.
name = “wikiHsoup”
puts “ My name is #{name} ” #=> My name is wikiHsoup
puts “ Sum is #{1+1} “ #=> Sum is 2
يجب الإشارة إلى أن إدراج الشيفرات البرمجية يعمل فقط مع السلاسل النصية المعرفة باستعمال علامتا التنصيص المزدوجتين والمحددات، ولا يعمل مع السلاسل النصية المعرفة باستخدام علامتا التنصيص المفردتين (' ').
name = “wikiHsoup”
puts ‘ My name is #{name} ‘ #=> My name is #{name}
ملاحظات
لمَّا كان هنالك بعض التعارضات في الأسماء البديلة، فيجب على من يستعل الصنف String أن يكون واعيًّا وحذرًا لكي تفرِّق بين التوابع التي تعدِّل محتوى السلسلة النصية الأصلية نفسها وبين التي تعدِّل المحتوى وتضعه في سلسلة نصية جديدة. عادةً، التوابع التي تنتهي بعلامة التعجب "!" هي التي تعدِّل السلسلة النصية الأصلية بينما تضع التوابع الأخرى المحتوى الذي عدلته في سلسلة نصية جديدة. على أي حال، هنالك استثناءات دومًا، لذا اقرأ التوثيق كل تابع بشكل جيد قبل استعماله.
توابع الصنف العامة
new
try_convert
توابع النسخة العامة
%
*
ينسخ سلسلة نصية عددًا محدَّدًا من المرات ثم يضعها في سلسلة نصية جديدة.
+
يجمع سلسلتين نصيتين مع بعضهما بعضًا ثم يعيد الناتج في سلسلة نصية جديدة.
+@
يعيد المعامل +
عند استدعائه بالشكل str+
نسخةً مطابقةً للسلسلة النصية str
وقابلةً للتغيير (Mutable) في حال كانت هذه السلسلة النصية مجمدة.
-@
يعيد المعامل -
عند استدعائه بالشكل str-
نسخةً مطابقةً ومجمدةً للسلسلة النصية str
في حال كانت غير مجمدة.
>>
يُلحق الكائن المُعطى بالسلسلة النصية.
<=>
يُقارن بين سلسلتين نصيتين ثم يعيد القيم 1-، أو 1، أو 0، إذا ما كانت السلسلة النصية الأولى أكبر أو أصغر أو تساوي السلسلة النصية الثانية على التوالي.
==
يتحقق من تساوي السلسلة النصية مع أي كائن آخر، علمًا أن المساواة تتحقق عند تطابق الطول والمحتوى.
===
يتحقق من تساوي السلسلة النصية مع أي كائن آخر، علمًا أن المساواة تتحقق عند تطابق الطول والمحتوى.
=~
[]
يجلب محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.
[]=
ascii_only?
يتحقق إذا كانت السلسلة النصية مؤلفة من محارف مرمزة بالترميز ASCII فقط.
b
bytes
يُعيد البايتات المقابلة لمحارف السلسلة النصية في مصفوفة.
bytesize
يعيد طول السلسلة النصية التي استدعيت معه بالبايت.
byteslice
يجلب محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.