توابع السلاسل النصية في لغة روبي (Ruby): دليل شامل وموسع
تمثل السلاسل النصية (Strings) في لغة روبي عنصرًا أساسيًا في بناء التطبيقات والتعامل مع البيانات. وتُعد من أكثر أنواع البيانات استخدامًا نظرًا لحاجة المطورين المستمرة إلى معالجة النصوص في العمليات البرمجية المختلفة، من تحليل البيانات وإدخال المستخدم إلى التفاعل مع الملفات وقواعد البيانات. تُوفّر لغة روبي مجموعة واسعة من التوابع (Methods) الجاهزة للتعامل مع الكائنات من نوع سلسلة نصية، ما يمنحها قوة وسلاسة في التعامل مع البيانات النصية بكفاءة ومرونة عالية.
يُغطي هذا المقال توابع السلاسل النصية في روبي بشكل موسع، مع توضيح وظيفتها وسياق استخدامها، مصحوبًا بأمثلة عملية. يُعد هذا الدليل مرجعًا متكاملًا لكل مطوّر يعمل بلغة روبي ويسعى إلى إتقان التعامل مع النصوص فيها.
مفهوم السلاسل النصية في روبي
السلسلة النصية في روبي هي كائن من الصنف الأساسي String. يمكن إنشاؤها باستخدام علامات الاقتباس المفردة أو المزدوجة:
rubynome = '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) باستخدام التوابع المنتهية بـ ! مثل:
rubystr = "hello"
str.upcase! # يعدّل الكائن نفسه ليصبح "HELLO"
كما تدعم روبي الترميز (Encoding) والتحكم فيه باستخدام التابع encoding وforce_encoding.
المراجع
-
The Ruby Programming Language, David Flanagan & Yukihiro Matsumoto
بهذا الاستعراض الشامل لتوابع السلاسل النصية في لغة روبي، يتضح مدى القوة والمرونة التي توفرها اللغة للمطور في التعامل مع النصوص، مما يسهل تنفيذ العديد من المهام النصية بكفاءة ودقة عالية دون الحاجة إلى كتابة شيفرات معقدة أو متكررة.

