تمتلك Crystal نوعًا يُعرف باسم String، ويُستخدم لتمثيل النصوص.
السلاسل النصية في Crystal عبارة عن متتاليات من أحرف يونيكود.
السلاسل النصية غير قابلة للتغيير، أي أنه لا يمكن تغييرها بعد إنشائها.
وهذا يعني أن سلسلة نصية جديدة تُنشأ في كل مرة تعدّل فيها سلسلة نصية، لذلك لا تتغير السلسلة النصية الأصلية.
لتعريف سلسلة نصية تستخدم علامتي الاقتباس المزدوجتين ".
"Hello World"
لدمج سلسلتين نصيتين، استخدم العامل +.
سيُرجع العامل + سلسلة نصية جديدة تجمع السلسلتين.
hello = "Hello"
hello + " World"
# => "Hello World"
تُحوّل الطريقة to_i سلسلة نصية إلى عدد صحيح.
وبدلًا من ذلك، يمكن استخدام الطريقة to_f لإرجاع عدد عشري.
إذا تعذّر تحويل السلسلة النصية إلى عدد، فسيُرفع استثناء ArgumentError.
"1".to_i
# => 1
"1.0".to_f
# => 1.0
"Hello".to_i
# => ArgumentError: Invalid integer: Hello
ويمكن تحويل عدد صحيح أو عدد عشري إلى سلسلة نصية باستخدام الطريقة to_s.
1.to_s
# => "1"
1.0.to_s
# => "1.0"
الإدراج أسلوب ملائم لدمج السلاسل النصية وتضمين التعبيرات فيها.
لإدراج قيمة في سلسلة نصية، يمكنك استخدام المحرف # متبوعًا بالأقواس المعقوفة {} مع التعبير داخل الأقواس.
name = "World"
"Hello #{name}!"
# => "Hello World!"
ستحوّل Crystal نتيجة التعبير تلقائيًا إلى سلسلة نصية.
"Hello #{1 + 1}!"
# => "Hello 2!"
عندما تحتاج إلى معرفة عدد الأحرف في سلسلة نصية، يمكنك استخدام الطريقة size، التي تُرجع طول السلسلة النصية كعدد صحيح.
حجم السلسلة النصية خاصية مخزّنة فيها، لذا لا يلزم حساب الحجم في كل مرة تستدعي فيها الطريقة، ما يجعلها سريعة جدًا.
"Hello World".size
# => 11
الفهرسة هي الحصول على حرف معيّن من سلسلة نصية.
للحصول على حرف من String، يمكنك استخدام صيغة الأقواس المربعة المألوفة.
[] مُنفَّذة كطريقة على كائن String، حيث يكون الفهرس هو وسيط الطريقة.
في Crystal، يقع الحرف الأول في سلسلة نصية عند الفهرس 0.
"Hello World"[0]
# => 'H'
"Hello World"[6]
# => 'W'
للحصول على حرف من نهاية سلسلة نصية، يمكنك أخذ طول السلسلة ناقص واحد للحصول على فهرس الحرف الأخير، وللحصول على الحرف قبل الأخير تأخذ طول السلسلة ناقص اثنين، وهكذا. هناك اختصار لذلك، وهو استخدام فهرس سالب ببساطة، حيث يقع الحرف الأخير عند الفهرس -1، والحرف قبل الأخير عند الفهرس -2، وهكذا.
name = "Hello World"
name[name.size - 1]
# => 'd'
name[-1]
# => 'd'
بعض الأحرف لا يمكن كتابتها في سلسلة نصية مباشرة، وبدلًا من ذلك عليك استخدام متتالية هروب.
على سبيل المثال، إذا أردت استخدام علامتي اقتباس مزدوجتين داخل سلسلة نصية، فيجب أن تسبقهما بمتتالية هروب.
يمكنك استخدام المحرف \ لكتابة متتالية هروب متبوعة بالحرف الذي تريد تهريبه.
هذه هي الأحرف الخاصة في Crystal:
| القيمة | الوصف |
|---|---|
\a |
تنبيه |
\b |
مسافة للخلف |
\e |
هروب |
\f |
تغذية النموذج |
\n |
تغذية السطر أو سطر جديد |
\r |
إرجاع العربة |
\t |
علامة جدولة أفقية |
\v |
علامة جدولة رأسية |
\\ |
شرطة مائلة عكسية |
\' |
علامة اقتباس مفردة |
\" |
علامة اقتباس مزدوجة |
\377 |
محرف ASCII ثماني |
\xFF |
محرف ASCII ست عشري |
\uFFFF |
محرف يونيكود ست عشري |
puts "Hello \"World\""
# => Hello "World"
puts "Hello \nWorld"
# => Hello
# => World
لكتابة سلسلة نصية متعددة الأسطر، تستخدم الصيغة نفسها التي تستخدمها مع سلسلة نصية من سطر واحد، لكن تنشئ سطرًا جديدًا لكل سطر تريده في السلسلة.
"Hello
World"
# => "Hello\nWorld"
كان هناك مبرمج غريب الأطوار يعيش في منزل عجيب ذي نوافذ مُشبَّكة. وفي أحد الأيام قبل وظيفة من لوحة وظائف على الإنترنت لبناء روبوت حفلات. كان من المفترض أن يحيّي الروبوت الناس ويساعدهم في الوصول إلى مقاعدهم. كانت النسخة الأولى تقنية للغاية، وأظهرت ضعف المبرمج في التفاعل البشري. وقد انتقل بعض ذلك أيضًا إلى النسخة التالية.
نفّذ الطريقة welcome لتُرجع رسالة ترحيب باستخدام الاسم المعطى:
PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!
نفّذ الطريقة happy_birthday لتُرجع رسالة عيد ميلاد باستخدام اسم الشخص وعمره المعطيين.
للأسف، المبرمج مُتفاخر قليلًا، لذا على الروبوت أن يُظهر معرفته بعيد ميلاد كل ضيف.
PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!
نفّذ الدالة assign_table لإعطاء الاتجاهات.
ينبغي أن تقبل 5 معاملات.
String)Int)String)String)Float64)يمكن رؤية الصيغة الدقيقة للنتيجة في المثال أدناه.
ينبغي اختصار اسم من ستجلس بجانبه إلى الحرف الأول والحرف الأخير من الاسم. يصبح Frank هو Fk، ويصبح Christian هو Cn، وهكذا.
يذكر الروبوت رقم الطاولة. ويذكر الروبوت أيضًا المسافة إلى الطاولة. لكن لحسن الحظ بدقة لا تتجاوز رقمًا واحدًا.
PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
سجّل في Exercism لتتعلّم وتتقن Crystal عبر 26 مفهومًا142 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.