الصنف String في روبي

من موسوعة حسوب
مراجعة 21:36، 27 مارس 2019 بواسطة جميل-بيلوني (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

السلاسل النصية (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

يشفِّر بناءً على القيمة Hash السلسلة النصية التي استدعي معها بطريقة غير قابلة للعكس (one-way cryptographic hash) عبر استدعاء دالة المكتبة القياسية crypt(3)‎ مع السلسلة النصية الإضافية المُمرَّرة إليه.

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

يمرِّر كل وحدة كتابية (grapheme) إلى الكتلة المعطاة ثم يعيد سلسلة نصية بالناتج الذي تعيده.

each_line

يقتطع السلسلة النصية التي استدعيت معه إلى أجزاء (كل جزء يمثِّل سطرًا افتراضيًّا) مفصولة بفاصل محدَّد ثم يمرِّر كل منها على حدة إلى الكتلة المعطاة.

empty?‎

يتحقق إذا كانت سلسلة نصية فارغةً تمامًا أم لا.

encode

يحول سلسلة نصية مرمزة بترميز محدَّد إلى ترميز آخر ثم يعيد نسخة عنها.

encode!‎

يحول سلسلة نصية مرمزة بترميز محدَّد إلى ترميز آخر ثم يعيدها.

encoding

يُعيد ترميز السلسلة النصية التي استُدعيت معه.

end_with?‎

يتحقق إذا كانت السلسلة النصية منتهية بإحدى اللواحق المُحددة.

eql?‎

يتحقق من تساوي سلسلتين نصيتين مع بعضهما بعضًا.

force_encoding

يغير ترميز السلسلة النصية التي استدعي معها إلى ترميز مُحدد ثم يعيدها.

freeze

يجمد السلسلة النصية التي استُدعيت معه، أي يجعلها غير قابلة للتعديل.

getbyte

يُعيد قيمة البايت المقابل للمحرف الموجود في الفهرس المُحدد من السلسلة النصية التي استدعي معها.

grapheme_clusters

يعيد مصفوفة من الوحدات الكتابية (grapheme clusters) الموجودة في السلسلة النصية التي استدعيت معه.

gsub

يعيد نسخة من السلسلة النصية التي استدعيت معه مع تبديل قيمة (أو قيم) محدَّدة مكان جميع الأنماط المتطابقة فيها.

gsub!‎

يبدل قيمة (أو قيم) محدَّدة مكان جميع الأنماط المتطابقة في السلسلة النصية التي استدعي معها.

hash

يعيد القيمة hash (قيمة عددية مختصرة) بناءً على طول، ومحتوى، وترميز السلسلة النصية التي استدعي معها.

hex

يتعامل مع بادئة السلسلة النصية كسلسلة من الأرقام الست عشرية ثم يُعيد الرقم المُقابل لها.

include?‎

يتحقق إذا كانت السلسلة النصية التي استدعيت معها تحتوي على السلسلة النصية أو المحرف المُمرَّر إليها.

index

يبحث عن سلسلة أو نمط مُحدد ضمن السلسلة النصية التي استدعيت معها، ثم يُعيد فهرس أول تطابق يعثر عليه.

insert

يُدرِج السلسلة النصية المُمرَّرة إليه في موضع مُحدد، معدلًا السلسلة النصية التي استدعي معها.

inspect

يُعيد نسخة قابلة للطباعة من السلسلة النصية محاطةً بعلامات تنصيص، مع تهريب الحروف الخاصة.

intern

يُعيد الرمز المقابل للسلسلة النصية التي استدعي معها، أو يُنشىء ذلك الرمز إذا لم يكن مُوجودًا مُسبقًا.

length

يُعيد طول محارف السلسلة النصية.

lines

يُعيد مصفوفة كل عنصر منها سطرًا من سطور السلسلة النصية المعطاة.

ljust

يعيد سلسلة جديدة بطول محدَّد تحتوي في يسارها على السلسلة النصية المُعطاة مع حشو الحجم المتبقي بمحارف محدَّدة.

lstrip

يعيد نسخة عن السلسلة النصية مع حذف المسافة البيضاء في بادئة السلسلة.

lstrip!‎

يحذف المسافة البيضاء في بادئة السلسلة النصية المعطاة.

match

يحول النمط المُمرَّر إليه إلى تعبير نمطي (إن لم يكن كذلك) ثم يطابقه مع السلسلة النصية التي استدعيت معه.

match?‎

يحول النمط المُمرَّر إليه إلى تعبير نمطي (إن لم يكن كذلك) ثم يتحقق من مطابقته من السلسلة النصية التي استدعي معها دون تحديث قيمة المتغير ~$ والمتغيرات الأخرى المماثلة.

next

يعيد السلسلة النصية اللاحقة للسلسلة النصية التي استدعي معها.

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 باستثناء أنه يحذف المحارف المُكرَّرة الواقعة ضمن المجال المراد استبداله.

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 محرف.
  • كيف تشارك روبي قيم السلاسل النصية؟!

مصادر