البرمجة

توابع السلاسل النصية في روبي

توابع السلاسل النصية في لغة روبي (Ruby): دليل شامل وموسع

تمثل السلاسل النصية (Strings) في لغة روبي عنصرًا أساسيًا في بناء التطبيقات والتعامل مع البيانات. وتُعد من أكثر أنواع البيانات استخدامًا نظرًا لحاجة المطورين المستمرة إلى معالجة النصوص في العمليات البرمجية المختلفة، من تحليل البيانات وإدخال المستخدم إلى التفاعل مع الملفات وقواعد البيانات. تُوفّر لغة روبي مجموعة واسعة من التوابع (Methods) الجاهزة للتعامل مع الكائنات من نوع سلسلة نصية، ما يمنحها قوة وسلاسة في التعامل مع البيانات النصية بكفاءة ومرونة عالية.

يُغطي هذا المقال توابع السلاسل النصية في روبي بشكل موسع، مع توضيح وظيفتها وسياق استخدامها، مصحوبًا بأمثلة عملية. يُعد هذا الدليل مرجعًا متكاملًا لكل مطوّر يعمل بلغة روبي ويسعى إلى إتقان التعامل مع النصوص فيها.


مفهوم السلاسل النصية في روبي

السلسلة النصية في روبي هي كائن من الصنف الأساسي String. يمكن إنشاؤها باستخدام علامات الاقتباس المفردة أو المزدوجة:

ruby
nome = 'Ahmad' mensagem = "Olá, #{nome}"

تدعم روبي التداخل بين النصوص والمتغيرات باستخدام "#{...}" داخل علامات اقتباس مزدوجة، ما يميزها عن لغات برمجة أخرى.


توابع السلاسل النصية الأساسية

توفر روبي العديد من التوابع الجاهزة لمعالجة السلاسل النصية. يتم استدعاء هذه التوابع على الكائنات النصية مباشرة، ما يمنح المطور واجهة برمجية واضحة وسهلة.

1. length و size

تُستخدم للحصول على طول السلسلة النصية (عدد الحروف):

ruby
"Ruby".length # 4 "Ruby".size # 4

كلا التابعين يؤديان نفس الوظيفة.

2. empty?

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

ruby
"".empty? # true "Hello".empty? # false

3. include?

يتحقق ما إذا كانت سلسلة معينة موجودة داخل السلسلة:

ruby
"programming".include?("gram") # true

4. start_with? و end_with?

تتحقق مما إذا كانت السلسلة تبدأ أو تنتهي بنص معين:

ruby
"Hello World".start_with?("Hell") # true "Hello World".end_with?("World") # true

توابع التعديل على السلاسل النصية

5. upcase و downcase

تحول السلسلة إلى حروف كبيرة أو صغيرة:

ruby
"ruby".upcase # "RUBY" "RUBY".downcase # "ruby"

6. capitalize

تحول أول حرف إلى حرف كبير والباقي إلى حروف صغيرة:

ruby
"hello".capitalize # "Hello" "HELLO".capitalize # "Hello"

7. swapcase

تبدل حالة كل حرف:

ruby
"HeLLo".swapcase # "hEllO"

8. reverse

تعكس ترتيب الأحرف:

ruby
"Ruby".reverse # "ybuR"

توابع الحذف والقص والاقتطاع

9. strip, lstrip, rstrip

تحذف الفراغات البيضاء (spaces, tabs, newlines) من البداية والنهاية:

ruby
" Ruby ".strip # "Ruby" " Ruby ".lstrip # "Ruby " " Ruby ".rstrip # " Ruby"

10. chomp

تحذف نهاية السطر \n أو أي لاحقة معينة:

ruby
"Hello\n".chomp # "Hello" "Hello!!!".chomp("!") # "Hello!!"

11. chop

تحذف آخر حرف من السلسلة:

ruby
"Ruby!".chop # "Ruby"

التكرار، التكرار، والتقسيم

12. * (التكرار)

تكرر السلسلة النصية عددًا معينًا من المرات:

ruby
"Hi! " * 3 # "Hi! Hi! Hi! "

13. split

تقسّم السلسلة إلى مصفوفة باستخدام محدد معين:

ruby
"ruby,python,java".split(",") # ["ruby", "python", "java"]

يمكن استخدامها دون محدد لتقسيم حسب الفراغات:

ruby
"Hello world".split # ["Hello", "world"]

14. chars

تحول السلسلة إلى مصفوفة من الحروف:

ruby
"Ruby".chars # ["R", "u", "b", "y"]

التوابع الخاصة بالاستبدال والتحويل

15. sub و gsub

تستخدم للاستبدال داخل السلسلة. sub يستبدل أول تطابق، بينما gsub يستبدل جميع التطابقات:

ruby
"apple".sub("p", "b") # "abble" "apple".gsub("p", "b") # "abble"

16. tr

تبدّل مجموعة من الحروف بحروف أخرى على أساس واحد لواحد:

ruby
"hello".tr("el", "ip") # "hippo"

17. delete

تحذف الحروف المحددة من السلسلة:

ruby
"hello".delete("l") # "heo"

توابع المقارنة والتحقق

18. == و eql? و equal?

  • ==: يقارن القيم.

  • eql?: يقارن القيم والنوع.

  • equal?: يتحقق من المرجع (الهوية):

ruby
"a" == "a" # true "a".eql?("a") # true "a".equal?("a") # false (ربما، بسبب الكائنات المختلفة)

19. casecmp

يقارن بين سلسلتين بدون اعتبار حالة الأحرف:

ruby
"ruby".casecmp("RUBY") == 0 # true

التوابع الخاصة بالمؤشرات

20. [] و slice

تُستخدم لاستخراج جزء من السلسلة:

ruby
"ruby"[0] # "r" "ruby"[0..1] # "ru" "ruby".slice(1,2) # "ub"

21. index و rindex

تبحث عن موقع أول وآخر ظهور لنص معين:

ruby
"hello".index("l") # 2 "hello".rindex("l") # 3

التوابع الخاصة بالتحقق من الشكل أو النوع

22. match? و =~

للتحقق من تطابق نمط معين باستخدام تعبيرات نمطية (Regex):

ruby
"ruby123".match?(/\d+/) # true "ruby123" =~ /\d+/ # 4 (موقع التطابق)

جدول مقارنة مختصر لبعض التوابع المهمة

التابع الوظيفة مثال
upcase تحويل الأحرف إلى كبيرة "ruby".upcase => "RUBY"
downcase تحويل الأحرف إلى صغيرة "RUBY".downcase => "ruby"
reverse عكس السلسلة "abc".reverse => "cba"
strip إزالة الفراغات من الجانبين " test ".strip => "test"
split تقسيم السلسلة لمصفوفة حسب محدد "a,b,c".split(",") => ["a", "b", "c"]
gsub استبدال جميع التطابقات "foofoo".gsub("foo", "bar") => "barbar"
match? التحقق من تطابق نمط معين "abc123".match?(/\d+/) => true
include? التحقق من وجود سلسلة فرعية "hello".include?("ell") => true

خصائص أخرى متقدمة

تدعم السلاسل النصية في روبي خصائص متقدمة مثل التعديل في المكان (in-place modification) باستخدام التوابع المنتهية بـ ! مثل:

ruby
str = "hello" str.upcase! # يعدّل الكائن نفسه ليصبح "HELLO"

كما تدعم روبي الترميز (Encoding) والتحكم فيه باستخدام التابع encoding وforce_encoding.


المراجع


بهذا الاستعراض الشامل لتوابع السلاسل النصية في لغة روبي، يتضح مدى القوة والمرونة التي توفرها اللغة للمطور في التعامل مع النصوص، مما يسهل تنفيذ العديد من المهام النصية بكفاءة ودقة عالية دون الحاجة إلى كتابة شيفرات معقدة أو متكررة.