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

casecmp

casecmp?‎

center

chars

chomp

chomp!‎

chop

chop!‎

chr

clear

codepoints

concat

count

crypt

delete

delete!‎

delete_prefix

delete_prefix!‎

delete_suffix

delete_suffix!‎

downcase

downcase!‎

dump

each_byte

each_char

each_codepoint

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

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?‎

مصادر