الصنف 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

يجلب محرفًا ذا فهرس محدَّد، أو جزءًا محددًا ببداية وطول، أو مجالًا محددًا ببداية ونهاية من السلسلة النصية التي استدعيت معه.

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

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

unicode_normalize!‎

unicode_normalized?‎

unpack

unpack1

upcase

upcase!‎

upto

valid_encoding?‎

مصادر