الصنف 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
يعيد نسخة من السلسلة النصية التي استدعيت معه مرمزة بالترميز ASCII-8BIT.
bytes
يُعيد البايتات المقابلة لمحارف السلسلة النصية في مصفوفة.
bytesize
يعيد طول السلسلة النصية التي استدعيت معه بالبايت.
byteslice
يجلب محرفًا ذا فهرس محدَّد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.
capitalize
يعيد نسخة عن السلسلة النصية المعطاة مع تحويل الحرف الأول فيها إلى حرف كبير، وباقي الأحرف إلى أحرف صغيرة.
capitalize!
يُعدل السلسلة النصية بتحويل الحرف الأول إلى حرف كبير، وباقي الأحرف إلى أحرف صغيرة، أو يعيد القيمة nil
في حال عدم إجراء أي تعديل.
casecmp
يقارن بين سلسلتين نصيتين دون أخذ حالة الأحرف بالحسبان.
casecmp?
يتحقق إذا كانت السلسلة النصية التي استدعيت معه متساوية مع السلسلة المُمرَّرة إليه دون أخذ حالة المحارف بالحسبان.
center
يعيد سلسلة نصية جديدة بطول محدَّد مع وضع السلسلة النصية المعطاة في وسطها وحشو طرفيها بمحارف معيَّنة.
chars
يُعيد محارف السلسلة النصية على شكل مصفوفة.
chomp
يعيد نسخة عن السلسلة النصية مع حذف الفاصل السطري المُحدد من نهايتها (إن كان موجودًا).
chomp!
يحذف الفاصل السطري المُحدد من نهاية السلسلة النصية المعطاة، أو يعيد القيمة nil
إن لم يجري أي تعديل عليها.
chop
يعيد نسخةً عن السلسلة النصية مع حذف المحرف الأخير منها.
chop!
يحذف المحرف الأخير من السلسلة النصية المعطاة.
chr
يعيد المحرف الأول من السلسلة النصية المُعطاة.
clear
يمسح جميع محتوى السلسلة النصية المعطاة ويجعلها فارغة.
codepoints
يُعيد نقاط الترميز المقابلة لمحارف السلسلة النصية في مصفوفة.
concat
يضيف كائنات محدَّدة إلى السلسلة النصية التي استدعيت معه.
count
يحسب عدد الحروف المتواجدة ضمن السلسلة النصية المُعطاة.
crypt
delete
يعيد نسخة عن السلسلة النصية المُعطاة محذوفًا منها محارف السلسلة النصية المُمرَّرة إليه.
delete!
يحذف محارف السلسلة النصية المُمرَّرة إليه من السلسلة النصية التي استدعي معها.
delete_prefix
يعيد نسخة عن السلسلة النصية التي استدعي معها محذوفًا منها سابقة مُحددة.
delete_prefix!
يحذف سابقة محددة من السلسلة النصية المعطاة.
delete_suffix
يعيد نسخةً عن السلسلة النصية محذوفًا منها لاحقة مُحددة.
delete_suffix!
يحذف لاحقة محددة من السلسلة النصية التي استدعي معها.
downcase
downcase!
يعدل على السلسلة النصية المعطاة وذلك باستبدال الحروف الكبيرة فيها بنظائرها الصغيرة.
dump
يُعيد نسخة عن السلسلة النصية مع استبدال المحارف الغير مطبوعة بالرمز nnn\
وتهريب المحارف الخاصة.
each_byte
يُمرر كل بايت من بايتات السلسلة النصية التي استدعي معها إلى الكتلة المُعطاة.
each_char
يُمرر كل محرف من محارف السلسلة النصية التي استدعي معها إلى الكتلة المُعطاة.
each_codepoint
يُمرر كل عدد من الأعداد الترتيبية (Integers ordinal) المقابلة لكل محرف من محارف السلسلة النصية المعطاة إلى الكتلة المرتبطة به ثم يعيد الناتج الذي تعيده هذه الكتلة.
each_grapheme_cluster
each_line
empty?
يتحقق إذا كانت سلسلة نصية فارغةً تمامًا أم لا.
encode
encode!
encoding
يُعيد ترميز السلسلة النصية التي استُدعيت معه.
end_with?
يتحقق إذا كانت السلسلة النصية منتهية بإحدى اللواحق المُحددة.
eql?
يتحقق من تساوي سلسلتين نصيتين مع بعضهما بعضًا.
force_encoding
يغير ترميز السلسلة النصية التي استدعي معها إلى ترميز مُحدد ثم يعيدها.
freeze
يجمد السلسلة النصية التي استُدعيت معه، أي يجعلها غير قابلة للتعديل.
getbyte
يُعيد قيمة البايت المقابل للمحرف الموجود في الفهرس المُحدد من السلسلة النصية التي استدعي معها.
grapheme_clusters
gsub
gsub!
hash
hex
يتعامل مع بادئة السلسلة النصية كسلسلة من الأرقام الست عشرية ثم يُعيد الرقم المُقابل لها.
include?
يتحقق إذا كانت السلسلة النصية التي استدعيت معها تحتوي على السلسلة النصية أو المحرف المُمرَّر إليها.
index
يبحث عن سلسلة أو نمط مُحدد ضمن السلسلة النصية التي استدعيت معها، ثم يُعيد فهرس أول تطابق يعثر عليه.
initialize_copy
insert
يُدرِج السلسلة النصية المُمرَّرة إليه في موضع مُحدد، معدلًا السلسلة النصية التي استدعي معها.
inspect
يُعيد نسخة قابلة للطباعة من السلسلة النصية محاطةً بعلامات تنصيص، مع تهريب الحروف الخاصة.
intern
يُعيد الرمز المقابل للسلسلة النصية التي استدعي معها، أو يُنشىء ذلك الرمز إذا لم يكن مُوجودًا مُسبقًا.
length
يُعيد طول محارف السلسلة النصية.
lines
يُعيد مصفوفة كل عنصر منها سطرًا من سطور السلسلة النصية المعطاة.
ljust
يعيد سلسلة جديدة بطول محدَّد تحتوي في يسارها على السلسلة النصية المُعطاة مع حشو الحجم المتبقي بمحارف محدَّدة.
lstrip
يعيد نسخة عن السلسلة النصية مع حذف المسافة البيضاء في بادئة السلسلة.
lstrip!
يحذف المسافة البيضاء في بادئة السلسلة النصية المعطاة.
match
match?
next
next!
oct
يتعامل مع بادئة السلسلة النصية المعطاة كسلسلة من الأرقام الثمانية (والتي قد تبدأ بإشارة الرقم الاختيارية)، ومن ثم يُعيد الرقم المُقابل لها.
ord
يعيد العدد الترتيبي (Integer ordinal) المقابل لأول محرف فى السلسلة النصية المعطاة.
partition
يبحث عن تطابق نص أو نمط محدد ضمن السلسلة النصية التي استدعي معها.
prepend
يُلحق السلسلة النصية المُمرَّرة إليه ببداية السلسلة النصية التي استدعيت معه.
replace
يستبدل محتوى السلسلة النصية التي استدعي معها بمحتوى السلسلة المُمرَّرة إليه.
reverse
يعكس ترتيب محارف السلسلة النصية التي استدعي معها ويضعها في سلسلة نصية جديدة.
reverse!
يعدل على السلسلة النصية التي استدعي معها بعكس ترتيب المحارف فيها.
rindex
يبحث عن سلسلة أو نمط مُحدد ضمن السلسلة النصية التي استدعي معها، ثم يُعيد فهرس آخر تطابق يعثر عليه.
rjust
يعيد سلسلة جديدة بطول محدَّد تحتوي في يمينها على السلسلة النصية المُعطاة مع حشو الحجم المتبقي بمحارف محدَّدة.
rpartition
يبحث عن تطابق نص أو نمط محدد بدءًا من نهاية السلسلة النصية ثم يعيد، إذا عثر التابع على تطابق، مصفوفةً من الجزء الذي يسبقه، والجزء المطابق، والجزء الذي يليه على التوالي.
rstrip
يعيد نسخة عن السلسلة النصية التي استدعي معها مع حذف المسافات البيضاء من نهايتها.
rstrip!
يحذف المسافة البيضاء من نهاية السلسلة النصية التي استدعي معها.
scan
scrub
يعيد نسخة عن السلسلة النصية التي استدعي معها مع استبدال البايتات غير الصالحة بمحرف محدَّد.
scrub!
يستبدل البايتات غير الصالحة في السلسلة النصية التي استدعي معها بمحرف محدَّد أو بالقيمة التي تعيدها الكتلة إن أعطيت.
setbyte
يستبدل بايتًا ذا فهرس محدَّد بقيمة محدَّدة في السلسلة النصية التي استدعي معها.
size
يُعيد طول محارف السلسلة النصية التي استدعي معها.
slice
يجلب محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.
slice!
يقتطع محرفًا ذا فهرس محدد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.
split
squeeze
يعيد نسخة عن السلسلة النصية التي استدعي معها مع استبدال المحارف المكررة على التوالي بمحرف واحد لكل منها.
squeeze!
يستبدل المحارف المكررة على التوالي فى السلسلة النصية بمحرف واحد لكل منها.
start_with?
يتحقق إذا كانت السلسلة النصية تبدأ بإحدى السوابق المُحددة.
strip
يعيد نسخة عن السلسلة النصية مع حذف المسافات البيضاء من بداية ونهاية السلسلة النصية التي استدعيت معها.
strip!
يحذف المسافات البيضاء من بداية ونهاية السلسلة النصية التي استدعيت معها.
sub
sub!
succ
يعيد السلسلة التي تلي السلسلة النصية التي استدعيت معه.
succ!
يستبدل السلسلة النصية التي استدعيت معه بالسلسلة التي تليها.
sum
يعيد المجموع التحقُّقي (checksum) ذي الحجم n
بت لحروف السلسلة النصية التي استدعيت معه.
swapcase
يعيد نسخة عن السلسلة النصية التي استدعيت معه مع استبدال الحروف الأبجدية الكبيرة بنظيراتها الصغيرة، واستبدال الحروف الصغيرة بنظيراتها الكبيرة.
swapcase!
يستبدل الحروف الأبجدية الكبيرة في السلسلة النصية التي استدعيت معها بنظيراتها الصغيرة، والحروف الصغيرة بنظيراتها الكبيرة.
to_c
يحول السلسلة النصية التي استدعيت معه إلى عدد عقدي.
to_f
يحول الأرقام الموجودة في بداية السلسلة النصية المعطاة إلى عدد عشري.
to_i
يحول العدد الموجود في بادئة السلسلة النصية المعطاة إلى عدد صحيح ذي أساس محدَّد.
to_r
يحول العدد الموجود في بادئة السلسلة النصية المعطاة إلى عدد جذري.
to_s
يعيد السلسلة النصية التي استدعيت معه نفسها.
to_str
يعيد السلسلة النصية التي استدعيت معه نفسها.
to_sym
يحول السلسلة النصية التي استدعيت معه إلى رمز، إذ يُنشىء ذلك الرمز إذا لم يكن الرمز المقابل للسلسلة النصية تلك مُوجودًا مُسبقًا.
tr
يعيد نسخة عن السلسلة النصية المُعطاة مع استبدال مجموعة محارف محدَّدة فيها بالمحارف المقابلة المعطاة.
tr!
يستبدل مجموعة محارف محدَّدة في السلسلة النصية المُعطاة بمحارف مقابلة لها.
tr_s
tr_s!
undump
يعيد نسخة عن السلسلة النصية التي استدعي معها مع حذف جميع المحارف المُهربة منها.
unicode_normalize
يعيد نسخة موحدة (normalized string، أي ذات ترميز موحد) للسلسلة النصية التي استدعيت معه باستخدام أحد ترميزات يونيكود الموحدة.
unicode_normalize!
يوحد ترميز السلسلة النصية التي استدعيت معه باستخدام أحد ترميزات يونيكود الموحدة.
unicode_normalized?
يتحقق إذا كانت السلسلة النصية التي استدعيت معه ذات ترميز موحَّد باستخدام أحد ترميزات يونيكود الموحدة (Unicode normalizations).
unpack
unpack1
upcase
يعيد نسخةً عن السلسلة النصية مع استبدال الحروف الصغيرة بنظائرها الكبيرة.
upcase!
يستبدل الحروف الصغيرة فى السلسلة النصية بنظائرها الكبيرة.
upto
يعيد القيم المتعاقبة، ابتداءًا من السلسلة النصية str
المُعطاة، وانتهاءًا بالسلسلة المُمرَّرة إليه، ثم تُمرَّر كل قيمة بدورها إلى الكتلة المعطاة.
valid_encoding?
يتحقق إذا كانت سلسلة نصية مُرمّزة بشكل صحيح.
ملاحظات إضافية
لمعرفة أوسع حول استعمال السلاسل النصية في روبي، اطلع على المراجع التالية:
- الصنف
Encoding
. - ترميز المحارف.
- لا تنشئ سلاسل نصية في روبي أطول من 23 محرف.
- كيف تشارك روبي قيم السلاسل النصية؟!