الفرق بين المراجعتين ل"Ruby/literals"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 11: سطر 11:
 
* التعبيرات النظامية Regular Expressions
 
* التعبيرات النظامية Regular Expressions
 
* بنى Proc
 
* بنى Proc
 
 
== القيم المنطقيّة و nil ==
 
== القيم المنطقيّة و nil ==
 
إنّ كلًا من nil و false تعبّران عن القيمة المنطقيّة الخاطئة false. تُستخدم nil أحيانًا لتعبّر عن عدم وجود أيّة قيمة أو قيمة مجهولة، لكنّها تساوي false في العبارات الشرطيّة.
 
إنّ كلًا من nil و false تعبّران عن القيمة المنطقيّة الخاطئة false. تُستخدم nil أحيانًا لتعبّر عن عدم وجود أيّة قيمة أو قيمة مجهولة، لكنّها تساوي false في العبارات الشرطيّة.
 
 
أمّا true فهي القيمة المنطقيّة الصحيحة true، وكلّ الكائنات عدا nil و false تساوي القيمة المنطقية الصحيحة true في العبارات الشرطية.
 
أمّا true فهي القيمة المنطقيّة الصحيحة true، وكلّ الكائنات عدا nil و false تساوي القيمة المنطقية الصحيحة true في العبارات الشرطية.
 
 
(هناك أيضًا الثوابت TRUE و FALSE و NIL، لكن الصيغ المكتوبة بالحروف الصغيرة هي المفضلة عادة.)
 
(هناك أيضًا الثوابت TRUE و FALSE و NIL، لكن الصيغ المكتوبة بالحروف الصغيرة هي المفضلة عادة.)
 
 
== الأرقام ==
 
== الأرقام ==
 
يمكنك كتابة الأرقام الصحيحة مهما كان حجمها كالتّالي:
 
يمكنك كتابة الأرقام الصحيحة مهما كان حجمها كالتّالي:
 
+
<syntaxhighlight lang="text">
 
1234
 
1234
 
 
1_234
 
1_234
 
+
</syntaxhighlight>
 
وكلاهما يعطيان نفس القيمة 1234، فالشرطة السفلية _ يمكن استخدامها لتسهيل قراءة الشيفرة، فيمكنك إضافتها في أيّ موضع بين الأرقام.
 
وكلاهما يعطيان نفس القيمة 1234، فالشرطة السفلية _ يمكن استخدامها لتسهيل قراءة الشيفرة، فيمكنك إضافتها في أيّ موضع بين الأرقام.
 
 
يمكن كتابة الأعداد ذات الفاصلة العشرية بإحدى الطرائق التالية:
 
يمكن كتابة الأعداد ذات الفاصلة العشرية بإحدى الطرائق التالية:
 
+
<syntaxhighlight lang="text">
 
12.34
 
12.34
 
 
1234e-2
 
1234e-2
 
 
1.234E1
 
1.234E1
 
+
</syntaxhighlight>
 
وكلّ منها يعطي نفس القيمة 12.34، كما يمكنك استخدام الشرطة السفلية أيضًا ضمن الأعداد العشرية.
 
وكلّ منها يعطي نفس القيمة 12.34، كما يمكنك استخدام الشرطة السفلية أيضًا ضمن الأعداد العشرية.
 
 
يمكنك استخدام سابقة خاصّة لكتابة الأعداد بأنظمة الترقيم المختلفة: العشريّ أو الستّ عشري أو الثماني أو الثنائيّ. فالعدد العشري يسبقه 0d، والستّ عشري يسبقه 0x، أمّا الثماني فيسبقه 0 (صفر) أو 0O، أما الأعداد الثّنائية فيسبقها 0b. وفي جميع هذه الحالات يمكن كتابة الأحرف بحالتها الكبيرة أو الصغيرة. أمثلة:
 
يمكنك استخدام سابقة خاصّة لكتابة الأعداد بأنظمة الترقيم المختلفة: العشريّ أو الستّ عشري أو الثماني أو الثنائيّ. فالعدد العشري يسبقه 0d، والستّ عشري يسبقه 0x، أمّا الثماني فيسبقه 0 (صفر) أو 0O، أما الأعداد الثّنائية فيسبقها 0b. وفي جميع هذه الحالات يمكن كتابة الأحرف بحالتها الكبيرة أو الصغيرة. أمثلة:
 
+
<syntaxhighlight lang="text">
 
0d170
 
0d170
 
 
0D170
 
0D170
 
 
0xaa
 
0xaa
 
 
0xAa
 
0xAa
 
 
0xAA
 
0xAA
 
 
0Xaa
 
0Xaa
 
 
0XAa
 
0XAa
 
 
0XaA
 
0XaA
 
 
0252
 
0252
 
 
0o252
 
0o252
 
 
0O252
 
0O252
 
 
0b10101010
 
0b10101010
 
 
0B10101010
 
0B10101010
 
+
</syntaxhighlight>
 
كل هذه الأعداد لها نفس القيمة العشرية وهي 170، ويمكنك أيضًا في أيّ منها أن تستخدم الشرطة السفلية _.
 
كل هذه الأعداد لها نفس القيمة العشرية وهي 170، ويمكنك أيضًا في أيّ منها أن تستخدم الشرطة السفلية _.
 
 
== السلاسل المحرفية ==
 
== السلاسل المحرفية ==
 
الطريقة الأكثر شيوعًا لكتابة السلاسل المحرفيّة هي باستخدام علامة الاقتباس المزدوجة ":
 
الطريقة الأكثر شيوعًا لكتابة السلاسل المحرفيّة هي باستخدام علامة الاقتباس المزدوجة ":
 
+
<syntaxhighlight lang="ruby">
 
"This is a string."
 
"This is a string."
 
+
</syntaxhighlight>
 
يمكن للسلاسل المحرفيّة أن تمتدّ على أكثر من سطر، كما أنّها إذا احتوت على المحرف " ضمنها فيجب تمييزه بكتابة المحرف \ قبله:
 
يمكن للسلاسل المحرفيّة أن تمتدّ على أكثر من سطر، كما أنّها إذا احتوت على المحرف " ضمنها فيجب تمييزه بكتابة المحرف \ قبله:
 
+
<syntaxhighlight lang="ruby">
 
"This string has a quote: \".  As you can see, it is escaped"
 
"This string has a quote: \".  As you can see, it is escaped"
 
+
</syntaxhighlight>
 
السلاسل المحرفيّة المعرّفة باستخدام علامة الاقتباس المضاعفة تسمح باستخدام محارف الهروب مثل n\ للنزول لسطر جديد، و t\ للفراغ الواسع، وهكذا. وهذه قائمة بكل الحالات الممكنة لهذه المحارف الخاصة: 
 
السلاسل المحرفيّة المعرّفة باستخدام علامة الاقتباس المضاعفة تسمح باستخدام محارف الهروب مثل n\ للنزول لسطر جديد، و t\ للفراغ الواسع، وهكذا. وهذه قائمة بكل الحالات الممكنة لهذه المحارف الخاصة: 
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|\a           
 
|\a           
سطر 160: سطر 137:
 
|ASCII 7Fh (DEL)
 
|ASCII 7Fh (DEL)
 
|}  
 
|}  
 
 
وفي حال كتابة أيّ محرف آخر بعد الرمز \ فسيفسّر على أنّه المحرف نفسه.
 
وفي حال كتابة أيّ محرف آخر بعد الرمز \ فسيفسّر على أنّه المحرف نفسه.
 
 
كما تسمح السلاسل المحرفيّة المعرّفة بعلامة الاقتباس المضاعفة أن تضمَّن قيمًا أخرى إذا كُتبت ضمن قوسين {} وسبقهما رمز # كالتّالي:
 
كما تسمح السلاسل المحرفيّة المعرّفة بعلامة الاقتباس المضاعفة أن تضمَّن قيمًا أخرى إذا كُتبت ضمن قوسين {} وسبقهما رمز # كالتّالي:
 
+
<syntaxhighlight lang="ruby">
 
"One plus one is two: #{1 + 1}"
 
"One plus one is two: #{1 + 1}"
 
+
</syntaxhighlight>
 
يمكن كتابة أيّ تعبير برمجيّ بنفس الطّريقة، لكن يفضل أن تستخدم التعبيرات القصيرة لتسهيل قراءة الشيفرة.
 
يمكن كتابة أيّ تعبير برمجيّ بنفس الطّريقة، لكن يفضل أن تستخدم التعبيرات القصيرة لتسهيل قراءة الشيفرة.
 
 
كما يمكن تعطيل عمليّة التضّمين هذه بتمييز الرمز # بكتابة المحرف \ قبله:
 
كما يمكن تعطيل عمليّة التضّمين هذه بتمييز الرمز # بكتابة المحرف \ قبله:
 
+
<syntaxhighlight lang="ruby">
 
'#{1 + 1}' #=> "\#{1 + 1}"
 
'#{1 + 1}' #=> "\#{1 + 1}"
 
+
</syntaxhighlight>
 
أما السلاسل المحرفيّة المعرفة باستخدام علامة الاقتباس المنفردة ' فلا تميّز التعابير البرمجيّة المضمَّنة ولا محارف الهروب الخاصّة، ويستثنى من ذلك تمييز علامة الاقتباس المفردة \' وتمييز المحرف \ بكتابة \\.
 
أما السلاسل المحرفيّة المعرفة باستخدام علامة الاقتباس المنفردة ' فلا تميّز التعابير البرمجيّة المضمَّنة ولا محارف الهروب الخاصّة، ويستثنى من ذلك تمييز علامة الاقتباس المفردة \' وتمييز المحرف \ بكتابة \\.
 
 
كما بإمكانك إنشاء سلاسل محرفيّة باستخدام الرمز % كالتّالي:
 
كما بإمكانك إنشاء سلاسل محرفيّة باستخدام الرمز % كالتّالي:
 
+
<syntaxhighlight lang="ruby">
 
%(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2" 
 
%(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2" 
 
+
</syntaxhighlight>
 
هناك نوعان من السلاسل المحرفيّة المبدوءة بالرّمز %، الأوّل ‎%q(...)‎ ويسلك سلوك السلسلة المحرفيّة ذات علامة الاقتباس المفردة (لا تضمين لتعابير برمجيّة أو محارف هروب)، بينما النوع الثاني %Q فيتعامل كالسلسلة المحرفيّة ذات علامة الاقتباس المضاعفة. انظر إلى السلاسل المحرفيّة المبدوءة بالرمز % أدناه لتفاصيل أكثر عن الصيغة الخاصّة بها.
 
هناك نوعان من السلاسل المحرفيّة المبدوءة بالرّمز %، الأوّل ‎%q(...)‎ ويسلك سلوك السلسلة المحرفيّة ذات علامة الاقتباس المفردة (لا تضمين لتعابير برمجيّة أو محارف هروب)، بينما النوع الثاني %Q فيتعامل كالسلسلة المحرفيّة ذات علامة الاقتباس المضاعفة. انظر إلى السلاسل المحرفيّة المبدوءة بالرمز % أدناه لتفاصيل أكثر عن الصيغة الخاصّة بها.
 
 
السلاسل المحرفيّة المتجاورة فيما بينها تُدمج مع بعضها تلقائيًا:
 
السلاسل المحرفيّة المتجاورة فيما بينها تُدمج مع بعضها تلقائيًا:
 
+
<syntaxhighlight lang="ruby">
 
"con" "cat" "en" "at" "ion" #=> "concatenation"
 
"con" "cat" "en" "at" "ion" #=> "concatenation"
 
 
"This string contains "\
 
"This string contains "\
 
 
"no newlines."              #=> "This string contains no newlines." 
 
"no newlines."              #=> "This string contains no newlines." 
 
+
</syntaxhighlight>
 
وأيّة سلاسل محرفيّة متجاورة تُدمج معًا مهما كان نوعها طالما لم تكن آخر سلسلة فيها من النوع المبدوء بالرّمز %.
 
وأيّة سلاسل محرفيّة متجاورة تُدمج معًا مهما كان نوعها طالما لم تكن آخر سلسلة فيها من النوع المبدوء بالرّمز %.
 
+
<syntaxhighlight lang="ruby">
 
%q{a} 'b' "c" #=> "abc"
 
%q{a} 'b' "c" #=> "abc"
 
 
"a" 'b' %q{c} #=> NameError: uninitialized constant q
 
"a" 'b' %q{c} #=> NameError: uninitialized constant q
 
+
</syntaxhighlight>
 
كما يوجد في لغة روبي طريقة لتعريف سلسلة محرفيّة مكونّة من محرف واحد، وصيغتها أن تكتب رمز إشارة الاستفهام ? يتبعه محرف واحد أو سلسلة محارف هروب تعبّر عن ترميز محرف واحد:
 
كما يوجد في لغة روبي طريقة لتعريف سلسلة محرفيّة مكونّة من محرف واحد، وصيغتها أن تكتب رمز إشارة الاستفهام ? يتبعه محرف واحد أو سلسلة محارف هروب تعبّر عن ترميز محرف واحد:
 
+
<syntaxhighlight lang="ruby">
 
?a       #=> "a"
 
?a       #=> "a"
 
 
?abc     #=> SyntaxError
 
?abc     #=> SyntaxError
 
 
?\n      #=> "\n"
 
?\n      #=> "\n"
 
 
?\s      #=> " "
 
?\s      #=> " "
 
 
?\\      #=> "\\"
 
?\\      #=> "\\"
 
 
?\u{41}  #=> "A"
 
?\u{41}  #=> "A"
 
 
?\C-a    #=> "\x01"
 
?\C-a    #=> "\x01"
 
 
?\M-a    #=> "\xE1"
 
?\M-a    #=> "\xE1"
 
 
?\M-\C-a #=> "\x81"
 
?\M-\C-a #=> "\x81"
 
 
?\C-\M-a #=> "\x81", مثل الحالة السابقة
 
?\C-\M-a #=> "\x81", مثل الحالة السابقة
 
 
?あ      #=> "あ"
 
?あ      #=> "あ"
 
+
</syntaxhighlight>
 
==مستندات Here==
 
==مستندات Here==
 
إذا أردت كتابة مقاطع نصيّة كبيرة فبإمكانك استخدام مستند here أو ما يعرف بلغة روبي بالمصطلح heredoc كالتالي:
 
إذا أردت كتابة مقاطع نصيّة كبيرة فبإمكانك استخدام مستند here أو ما يعرف بلغة روبي بالمصطلح heredoc كالتالي:
 
+
<syntaxhighlight lang="ruby">
 
expected_result = <<HEREDOC
 
expected_result = <<HEREDOC
 
 
This would contain specially formatted text.
 
This would contain specially formatted text.
 
 
That might span many lines
 
That might span many lines
 
 
HEREDOC
 
HEREDOC
 
+
</syntaxhighlight>
 
هذه المقاطع النصيّة تبدأ بالسّطر الذي يلي <<HEREDOC وينتهي بنهاية السّطر الذي يسبق HEREDOC. والنتيجة تشمل محرف السطر الجديد المُدخل في نهاية السطر الأخير.
 
هذه المقاطع النصيّة تبدأ بالسّطر الذي يلي <<HEREDOC وينتهي بنهاية السّطر الذي يسبق HEREDOC. والنتيجة تشمل محرف السطر الجديد المُدخل في نهاية السطر الأخير.
 
 
يمكنك أن تستخدم أيّ معرّف مع مستندات here، لكن يفضّل أن تستخدم المعرّفات ذات الحروف الكبيرة. ويجب أن تضيف فراغًا قبل معرّف النّهاية في حالة استخدمت رمز "-" بعد >> كالتّالي:
 
يمكنك أن تستخدم أيّ معرّف مع مستندات here، لكن يفضّل أن تستخدم المعرّفات ذات الحروف الكبيرة. ويجب أن تضيف فراغًا قبل معرّف النّهاية في حالة استخدمت رمز "-" بعد >> كالتّالي:
 
+
<syntaxhighlight lang="ruby">
 
expected_result = <<-INDENTED_HEREDOC
 
expected_result = <<-INDENTED_HEREDOC
 
 
This would contain specially formatted text.
 
This would contain specially formatted text.
 
 
That might span many lines
 
That might span many lines
 
 
 INDENTED_HEREDOC
 
 INDENTED_HEREDOC
 
+
</syntaxhighlight>
 
لاحظ أنّه على الرغم من إضافة مسافة بادئة قبل معرّف النهاية فإن المحتوى يُعامل دائمًا على أنّه يبدأ من أوّل السّطر. وإذا أضفت مسافة بادئة قبل المحتوى فستظهر هذه الفراغات عند الطباعة.
 
لاحظ أنّه على الرغم من إضافة مسافة بادئة قبل معرّف النهاية فإن المحتوى يُعامل دائمًا على أنّه يبدأ من أوّل السّطر. وإذا أضفت مسافة بادئة قبل المحتوى فستظهر هذه الفراغات عند الطباعة.
 
 
To have indented content as well as an indented closing identifier, you can use a “squiggly” heredoc, which uses a “~” instead of a “-” after <<:
 
To have indented content as well as an indented closing identifier, you can use a “squiggly” heredoc, which uses a “~” instead of a “-” after <<:
 
 
حتى تحصل على مسافة جدولة لكل من المحتوى ومعرّف النهاية فعليك حينها أن تستخدم heredoc من النوع المتعرّج وذلك بكتابة ~ بدلًا من - بعد >> : 
 
حتى تحصل على مسافة جدولة لكل من المحتوى ومعرّف النهاية فعليك حينها أن تستخدم heredoc من النوع المتعرّج وذلك بكتابة ~ بدلًا من - بعد >> : 
 
+
<syntaxhighlight lang="ruby">
 
expected_result = <<~SQUIGGLY_HEREDOC
 
expected_result = <<~SQUIGGLY_HEREDOC
 
 
 This would contain specially formatted text.
 
 This would contain specially formatted text.
 
 
 That might span many lines
 
 That might span many lines
 
 
SQUIGGLY_HEREDOC
 
SQUIGGLY_HEREDOC
 
+
</syntaxhighlight>
 
في حال وجود اختلاف بعدد مسافات الجدولة بين الأسطر، فسيُحذف عدد المسافات الأقل من جميع الأسطر. أمّا تلك السطور الفارغة أو تلك التي تحتوي على مسافات جدولة فقط أو فراغات فستُتجاهل بغرض تعيين مسافات الجدولة. ويستثنى من ذلك الفراغات ومسافات الجدولة المكتوبة بشكل محارف هروب إذ لا تُعدّ محارف جدولة.
 
في حال وجود اختلاف بعدد مسافات الجدولة بين الأسطر، فسيُحذف عدد المسافات الأقل من جميع الأسطر. أمّا تلك السطور الفارغة أو تلك التي تحتوي على مسافات جدولة فقط أو فراغات فستُتجاهل بغرض تعيين مسافات الجدولة. ويستثنى من ذلك الفراغات ومسافات الجدولة المكتوبة بشكل محارف هروب إذ لا تُعدّ محارف جدولة.
 
 
مستند heredoc يسمح باستخدام التضمين ومحارف الهروب، مع إمكانيّة تعطيلها عبر إحاطة معرّف البداية بعلامتي اقتباس مفردتين: 
 
مستند heredoc يسمح باستخدام التضمين ومحارف الهروب، مع إمكانيّة تعطيلها عبر إحاطة معرّف البداية بعلامتي اقتباس مفردتين: 
 
+
<syntaxhighlight lang="ruby">
 
expected_result = <<-'EXPECTED'
 
expected_result = <<-'EXPECTED'
 
 
One plus one is #{1 + 1}
 
One plus one is #{1 + 1}
 
 
EXPECTED
 
EXPECTED
 
 
p expected_result # تطبع: "One plus one is \#{1 + 1}\n"
 
p expected_result # تطبع: "One plus one is \#{1 + 1}\n"
 
+
</syntaxhighlight>
The identifier may also be surrounded with double quotes (which is the same as no quotes) or with backticks. When surrounded by backticks the HEREDOC behaves like Kernel#`:
 
 
 
 
كما يمكن إحاطة معرّف البدء بعلامة اقتباس مضاعفة (والتي تكافئ عدم إحاطته بشيء) أو بالمحرف `والذي عند استخدامه يؤدي إلى أن يسلك مستند heredoc سلوك #Kernel:
 
كما يمكن إحاطة معرّف البدء بعلامة اقتباس مضاعفة (والتي تكافئ عدم إحاطته بشيء) أو بالمحرف `والذي عند استخدامه يؤدي إلى أن يسلك مستند heredoc سلوك #Kernel:
 
+
<syntaxhighlight lang="ruby">
 
puts <<-`HEREDOC`
 
puts <<-`HEREDOC`
 
 
cat #{__FILE__}
 
cat #{__FILE__}
 
 
HEREDOC
 
HEREDOC
 
+
</syntaxhighlight>
 
لاستدعاء تابع على مستند heredoc عليك أن تضيفه بعد معرّف البدء:
 
لاستدعاء تابع على مستند heredoc عليك أن تضيفه بعد معرّف البدء:
 
+
<syntaxhighlight lang="ruby">
 
expected_result = <<-EXPECTED.chomp
 
expected_result = <<-EXPECTED.chomp
 
 
One plus one is #{1 + 1}
 
One plus one is #{1 + 1}
 
 
EXPECTED
 
EXPECTED
 
+
</syntaxhighlight>
 
كما بإمكانك فتح عدّة مستندات heredoc بنفس السطر، إلّا أنّ قراءتها ستكون صعبة حينئذ:
 
كما بإمكانك فتح عدّة مستندات heredoc بنفس السطر، إلّا أنّ قراءتها ستكون صعبة حينئذ:
 
+
<syntaxhighlight lang="ruby">
 
puts(<<-ONE, <<-TWO)
 
puts(<<-ONE, <<-TWO)
 
 
content for heredoc one
 
content for heredoc one
 
 
ONE
 
ONE
 
 
content for heredoc two
 
content for heredoc two
 
 
TWO
 
TWO
 
+
</syntaxhighlight>
 
== الرموز ==
 
== الرموز ==
 
يمثّل الرمّز اسمًا معرّفًا ضمن المفسّر الخاصّ بلغة روبي. انظر صفحة التوثيق الخاصة بالرموز لمزيد من التفاصيل عن ماهية الرموز ومتى تنشئها لغة روبي.
 
يمثّل الرمّز اسمًا معرّفًا ضمن المفسّر الخاصّ بلغة روبي. انظر صفحة التوثيق الخاصة بالرموز لمزيد من التفاصيل عن ماهية الرموز ومتى تنشئها لغة روبي.
 
 
يمكنك أن تشير إلى الرمز باستخدام النقطتين ":" كالتّالي :my_symbol. كما يمكنك إنشاء الرمز الخاص بك باستخدام التضمين كالتالي:
 
يمكنك أن تشير إلى الرمز باستخدام النقطتين ":" كالتّالي :my_symbol. كما يمكنك إنشاء الرمز الخاص بك باستخدام التضمين كالتالي:
 
+
<syntaxhighlight lang="ruby">
<nowiki>:</nowiki>"my_symbol1"
+
:"my_symbol1"
 
+
:"my_symbol#{1 + 1}"
<nowiki>:</nowiki>"my_symbol#{1 + 1}"
+
</syntaxhighlight>
 
 
 
وكما هو الحال في السّلاسل البرمجية، يمكنك استخدام علامة الاقتباس المفردة لمنع التضمين:
 
وكما هو الحال في السّلاسل البرمجية، يمكنك استخدام علامة الاقتباس المفردة لمنع التضمين:
 
+
<syntaxhighlight lang="ruby">
<nowiki>:</nowiki>'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}"
+
:'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}"
 
+
</syntaxhighlight>
 
عند إنشاء المصنِّفات فهناك صيغة خاصة للدلالة على الرموز.
 
عند إنشاء المصنِّفات فهناك صيغة خاصة للدلالة على الرموز.
 
 
== المصفوفات ==
 
== المصفوفات ==
 
تنشأ المصفوفة باستخدام الكائنات المحصورة بين القوسين [ و ]:
 
تنشأ المصفوفة باستخدام الكائنات المحصورة بين القوسين [ و ]:
 
+
<syntaxhighlight lang="ruby">
 
[1, 2, 3]
 
[1, 2, 3]
 
+
</syntaxhighlight>
 
كما يمكنك وضع تعبير برمجيّ داخل المصفوفة:
 
كما يمكنك وضع تعبير برمجيّ داخل المصفوفة:
 
+
<syntaxhighlight lang="ruby">
 
[1, 1 + 1, 1 + 2]
 
[1, 1 + 1, 1 + 2]
 
 
[1, [1 + 1, [1 + 2]]]
 
[1, [1 + 1, [1 + 2]]]
 
+
</syntaxhighlight>
 
انظر صفحة توثيق المصفوفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصفوفات.
 
انظر صفحة توثيق المصفوفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصفوفات.
 
 
== المصنِّفات Hashes ==
 
== المصنِّفات Hashes ==
 
ينشأ المصنّف باستخدام أزواج دليل-قيمة ووضعها ضمن الأقواس { و }:
 
ينشأ المصنّف باستخدام أزواج دليل-قيمة ووضعها ضمن الأقواس { و }:
 
+
<syntaxhighlight lang="ruby">
 
{ "a" => 1, "b" => 2 }
 
{ "a" => 1, "b" => 2 }
 
+
</syntaxhighlight>
 
وكلّ من الدليل والقيمة يمكن أن يكون أيّ نوع من الكائنات. كما بإمكانك إنشاء مصنّف باستخدام دلائل رمزيّة بالصيغة التالية:
 
وكلّ من الدليل والقيمة يمكن أن يكون أيّ نوع من الكائنات. كما بإمكانك إنشاء مصنّف باستخدام دلائل رمزيّة بالصيغة التالية:
 
+
<syntaxhighlight lang="ruby">
 
{ a: 1, b: 2 }
 
{ a: 1, b: 2 }
 
+
</syntaxhighlight>
 
ونفس الصيغة مستخدمة مع معاملات القيم المفتاحيّة عند تمريرها إلى التوابع.
 
ونفس الصيغة مستخدمة مع معاملات القيم المفتاحيّة عند تمريرها إلى التوابع.
 
 
وكما هو الحال بالنّسبة للرموز، فبإمكانك وضع المفاتيح الرمزيّة ضمن علامتي اقتباس:
 
وكما هو الحال بالنّسبة للرموز، فبإمكانك وضع المفاتيح الرمزيّة ضمن علامتي اقتباس:
 
+
<syntaxhighlight lang="ruby">
 
{ "a 1": 1, "b #{1 + 1}": 2 }
 
{ "a 1": 1, "b #{1 + 1}": 2 }
 
+
</syntaxhighlight>
 
وهي مكافئة لما يلي:
 
وهي مكافئة لما يلي:
 
+
<syntaxhighlight lang="ruby">
 
{ :"a 1" => 1, :"b 2" => 2 }
 
{ :"a 1" => 1, :"b 2" => 2 }
 
+
</syntaxhighlight>
 
انظر صفحة التوثيق الخاصة بالمصنّفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصنّف.
 
انظر صفحة التوثيق الخاصة بالمصنّفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصنّف.
 
 
== المجالات ==
 
== المجالات ==
 
يمثّل المجال في لغة روبي مجالًا من القيم، ويمكن له أن يتضمّن أو لا يتضمّن القيم الحدّية له.
 
يمثّل المجال في لغة روبي مجالًا من القيم، ويمكن له أن يتضمّن أو لا يتضمّن القيم الحدّية له.
 
+
<syntaxhighlight lang="ruby">
 
(1..2)  # يتضمّن القيمة النهائية
 
(1..2)  # يتضمّن القيمة النهائية
 
 
(1...2) # لا يتضمّن القيمة النهائيّة
 
(1...2) # لا يتضمّن القيمة النهائيّة
 
+
</syntaxhighlight>
 
بإمكانك إنشاء مجال لأيّ نوع من الكائنات. انظر صفحة التوثيق الخاصّة بالمجالات لتتعرف على التوابع التي قد تحتاج تعريفها.
 
بإمكانك إنشاء مجال لأيّ نوع من الكائنات. انظر صفحة التوثيق الخاصّة بالمجالات لتتعرف على التوابع التي قد تحتاج تعريفها.
 
 
== التعابير النّمطيّة ==
 
== التعابير النّمطيّة ==
 
يُنشأ التعبير النّمطيّ باستخدام "/":
 
يُنشأ التعبير النّمطيّ باستخدام "/":
 
+
<syntaxhighlight lang="ruby">
 
/my regular expression/
 
/my regular expression/
 
+
</syntaxhighlight>
 
يمكن أن يتبع التعبير النّمطيّ رايات (flags) تعدّل سلوك المطابقة لهذا التعبير. فالعَلم i على سبيل المثال يجعل من هذا التعبير حساسًا لحالة الحروف:
 
يمكن أن يتبع التعبير النّمطيّ رايات (flags) تعدّل سلوك المطابقة لهذا التعبير. فالعَلم i على سبيل المثال يجعل من هذا التعبير حساسًا لحالة الحروف:
 
+
<syntaxhighlight lang="ruby">
 
/my regular expression/i
 
/my regular expression/i
 
+
</syntaxhighlight>
 
يٌمكن استخدام محارف الهروب ضمن التعبير النّمطيّ ولاحظ أنّ التعابير النّمطيّة قد تتطلب محارف هروب خاصّة بها إضافة لتلك المستخدمة في السلاسل المحرفيّة.
 
يٌمكن استخدام محارف الهروب ضمن التعبير النّمطيّ ولاحظ أنّ التعابير النّمطيّة قد تتطلب محارف هروب خاصّة بها إضافة لتلك المستخدمة في السلاسل المحرفيّة.
 
 
انظر التوثيق الخاصّ بالتّعابير النّمطيّة لتفاصيل أكثر عن الصيغة الخاصّة بها.
 
انظر التوثيق الخاصّ بالتّعابير النّمطيّة لتفاصيل أكثر عن الصيغة الخاصّة بها.
 
 
== بنية Proc ==
 
== بنية Proc ==
 
يمكن إنشاء بنية proc باستخدام ‎->‎:
 
يمكن إنشاء بنية proc باستخدام ‎->‎:
 
+
<syntaxhighlight lang="ruby">
 
-> { 1 + 1 }
 
-> { 1 + 1 }
 
+
</syntaxhighlight>
 
استدعاء بنية proc هذه سوف يعطي النتيجة 2. ويمكنك أيضًا المطالبة بتمرير معامل للبنية كالتالي:
 
استدعاء بنية proc هذه سوف يعطي النتيجة 2. ويمكنك أيضًا المطالبة بتمرير معامل للبنية كالتالي:
 
+
<syntaxhighlight lang="ruby">
 
->(v) { 1 + v }
 
->(v) { 1 + v }
 
+
</syntaxhighlight>
 
وهذه البنية ستضيف 1 إلى المعامل الممرر لها.
 
وهذه البنية ستضيف 1 إلى المعامل الممرر لها.
 
 
== السلاسل المحرفيّة المعرّفة بالرّمز % ==
 
== السلاسل المحرفيّة المعرّفة بالرّمز % ==
 
ذكرنا سابقًا إمكانيّة تعريف سلسلة محرفيّة بالشّكل: (...)%، لكنّ الرّمز % يمكن استخدامه أيضًا لإنشاء أنواع أخرى من الكائنات. وكما هو الحال في السلاسل المحرفيّة، عند استخدام حرف كبير فسيُتاح التضمين ومحارف الهروب، بينما المحرف الصغير يمنعهما.
 
ذكرنا سابقًا إمكانيّة تعريف سلسلة محرفيّة بالشّكل: (...)%، لكنّ الرّمز % يمكن استخدامه أيضًا لإنشاء أنواع أخرى من الكائنات. وكما هو الحال في السلاسل المحرفيّة، عند استخدام حرف كبير فسيُتاح التضمين ومحارف الهروب، بينما المحرف الصغير يمنعهما.
 
 
وإليك أنواع السلاسل المحرفيّة المعرّفة بالرّمز % الموجودة في لغة روبي:
 
وإليك أنواع السلاسل المحرفيّة المعرّفة بالرّمز % الموجودة في لغة روبي:
 
 
%i
 
%i
 
 
مصفوفة من الرّموز
 
مصفوفة من الرّموز
 
 
%q
 
%q
 
 
سلسلة محرفية
 
سلسلة محرفية
 
 
%r
 
%r
 
 
تعبير نمطيّ
 
تعبير نمطيّ
 
 
%s
 
%s
 
 
رمز
 
رمز
 
 
%w
 
%w
 
 
مصفوفة من السلاسل المحرفيّة
 
مصفوفة من السلاسل المحرفيّة
 
 
%x
 
%x
 
 
تنفيذ أمر في نظام التشغيل وإعادة الناتج
 
تنفيذ أمر في نظام التشغيل وإعادة الناتج
 
 
وإذا أردت أن تضمّن فراغًا في إحدى عناصر المصفوفة فعليك أن تُسبق الفراغ بمحرف "\":
 
وإذا أردت أن تضمّن فراغًا في إحدى عناصر المصفوفة فعليك أن تُسبق الفراغ بمحرف "\":
 
+
<syntaxhighlight lang="ruby">
 
%w[one one-hundred\ one]
 
%w[one one-hundred\ one]
 
+
#=> ["one", "one-hundred one"]
<nowiki>#</nowiki>=> ["one", "one-hundred one"]
+
</syntaxhighlight>
 
 
 
إذا كنت تستخدم الأقواس  “)”, “]”, “}”, “>” فعليك أن تغلقها بالقوس المقابل لها “(”, “[”, “{”, “<” على الترتيب.
 
إذا كنت تستخدم الأقواس  “)”, “]”, “}”, “>” فعليك أن تغلقها بالقوس المقابل لها “(”, “[”, “{”, “<” على الترتيب.
 
 
كما بإمكانك الفصل بين عناصر المصفوفة باستخدام محارف أخرى غير أبجدية أو رقمية مثل “%”, “|”, “^” ...إلخ. 
 
كما بإمكانك الفصل بين عناصر المصفوفة باستخدام محارف أخرى غير أبجدية أو رقمية مثل “%”, “|”, “^” ...إلخ. 

مراجعة 16:15، 17 نوفمبر 2018

التعابير البرمجية في لغة روبي

تنشئ التعابير البرمجية في لغة روبي كائنات يمكنك استخدامها في برنامجك، هذه التعابير تتضمّن:

  • القيم المنطقيّة و nil
  • الأرقام
  • السلاسل المحرفيّة
  • الرموز
  • المصفوفات
  • المصنِّفات Hashes
  • المجالات Ranges
  • التعبيرات النظامية Regular Expressions
  • بنى Proc

القيم المنطقيّة و nil

إنّ كلًا من nil و false تعبّران عن القيمة المنطقيّة الخاطئة false. تُستخدم nil أحيانًا لتعبّر عن عدم وجود أيّة قيمة أو قيمة مجهولة، لكنّها تساوي false في العبارات الشرطيّة. أمّا true فهي القيمة المنطقيّة الصحيحة true، وكلّ الكائنات عدا nil و false تساوي القيمة المنطقية الصحيحة true في العبارات الشرطية. (هناك أيضًا الثوابت TRUE و FALSE و NIL، لكن الصيغ المكتوبة بالحروف الصغيرة هي المفضلة عادة.)

الأرقام

يمكنك كتابة الأرقام الصحيحة مهما كان حجمها كالتّالي:

1234
1_234

وكلاهما يعطيان نفس القيمة 1234، فالشرطة السفلية _ يمكن استخدامها لتسهيل قراءة الشيفرة، فيمكنك إضافتها في أيّ موضع بين الأرقام. يمكن كتابة الأعداد ذات الفاصلة العشرية بإحدى الطرائق التالية:

12.34
1234e-2
1.234E1

وكلّ منها يعطي نفس القيمة 12.34، كما يمكنك استخدام الشرطة السفلية أيضًا ضمن الأعداد العشرية. يمكنك استخدام سابقة خاصّة لكتابة الأعداد بأنظمة الترقيم المختلفة: العشريّ أو الستّ عشري أو الثماني أو الثنائيّ. فالعدد العشري يسبقه 0d، والستّ عشري يسبقه 0x، أمّا الثماني فيسبقه 0 (صفر) أو 0O، أما الأعداد الثّنائية فيسبقها 0b. وفي جميع هذه الحالات يمكن كتابة الأحرف بحالتها الكبيرة أو الصغيرة. أمثلة:

0d170
0D170
0xaa
0xAa
0xAA
0Xaa
0XAa
0XaA
0252
0o252
0O252
0b10101010
0B10101010

كل هذه الأعداد لها نفس القيمة العشرية وهي 170، ويمكنك أيضًا في أيّ منها أن تستخدم الشرطة السفلية _.

السلاسل المحرفية

الطريقة الأكثر شيوعًا لكتابة السلاسل المحرفيّة هي باستخدام علامة الاقتباس المزدوجة ":

"This is a string."

يمكن للسلاسل المحرفيّة أن تمتدّ على أكثر من سطر، كما أنّها إذا احتوت على المحرف " ضمنها فيجب تمييزه بكتابة المحرف \ قبله:

"This string has a quote: \".  As you can see, it is escaped"

السلاسل المحرفيّة المعرّفة باستخدام علامة الاقتباس المضاعفة تسمح باستخدام محارف الهروب مثل n\ للنزول لسطر جديد، و t\ للفراغ الواسع، وهكذا. وهذه قائمة بكل الحالات الممكنة لهذه المحارف الخاصة: 

\a            الجرس ASCII 07h (BEL)
\b            فراغ خلفي ASCII 08h (BS)
\t            مسافة جدولة أفقية ASCII 09h (TAB)
\n            سطر جديد ASCII 0Ah (LF)
\v            مسافة جدولة شاقولية ASCII 0Bh (VT)
\f            محرف الانتقال إلى صفحة جديدة ASCII 0Ch (FF)
\r            عودة لبداية السطر ASCII 0Dh (CR)
\e            هروب ASCII 1Bh (ESC)
\s            فراغ ASCII 20h (SPC)
\\            خط مائل خلفي \
\nnn          رقم بالنظام الثّماني، حيث تستبدل nnn بثلاثة أرقام ثمانية (ما بين 0 و 7). ([0-7])
\xnn          رقم بالنظام الست عشري، حيث تستبدل nn برقمين من النظام الست عشري. ([0-9a-fA-F])
\unnnn        محرف من نظام الترميز الموحد unicode، حيث تستبدل nnnn بأربع محارف بالضبط من النظام الست عشري. ([0-9a-fA-F])
\u{nnnn ...} محارف من نظام الترميز الموحد unicode حيث تستبدل أحرف n بمحارف من النظام الست عشري يتراوح عددها بين 1 و 6. ([0-9a-fA-F])
\cx or \C-x   محرف التحكّم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح.
\M-x          محرف ميتا، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح.
\M-\C-x       محرف ميتا للتحكم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح.
\M-\cx        مثل السابق.
\c\M-x        مثل السابق.
\c? or \C-?   حذف delete. ASCII 7Fh (DEL)

  

وفي حال كتابة أيّ محرف آخر بعد الرمز \ فسيفسّر على أنّه المحرف نفسه. كما تسمح السلاسل المحرفيّة المعرّفة بعلامة الاقتباس المضاعفة أن تضمَّن قيمًا أخرى إذا كُتبت ضمن قوسين {} وسبقهما رمز # كالتّالي:

"One plus one is two: #{1 + 1}"

يمكن كتابة أيّ تعبير برمجيّ بنفس الطّريقة، لكن يفضل أن تستخدم التعبيرات القصيرة لتسهيل قراءة الشيفرة. كما يمكن تعطيل عمليّة التضّمين هذه بتمييز الرمز # بكتابة المحرف \ قبله:

'#{1 + 1}' #=> "\#{1 + 1}"

أما السلاسل المحرفيّة المعرفة باستخدام علامة الاقتباس المنفردة ' فلا تميّز التعابير البرمجيّة المضمَّنة ولا محارف الهروب الخاصّة، ويستثنى من ذلك تمييز علامة الاقتباس المفردة \' وتمييز المحرف \ بكتابة \\. كما بإمكانك إنشاء سلاسل محرفيّة باستخدام الرمز % كالتّالي:

%(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2" 

هناك نوعان من السلاسل المحرفيّة المبدوءة بالرّمز %، الأوّل ‎%q(...)‎ ويسلك سلوك السلسلة المحرفيّة ذات علامة الاقتباس المفردة (لا تضمين لتعابير برمجيّة أو محارف هروب)، بينما النوع الثاني %Q فيتعامل كالسلسلة المحرفيّة ذات علامة الاقتباس المضاعفة. انظر إلى السلاسل المحرفيّة المبدوءة بالرمز % أدناه لتفاصيل أكثر عن الصيغة الخاصّة بها. السلاسل المحرفيّة المتجاورة فيما بينها تُدمج مع بعضها تلقائيًا:

"con" "cat" "en" "at" "ion" #=> "concatenation"
"This string contains "\
"no newlines."              #=> "This string contains no newlines." 

وأيّة سلاسل محرفيّة متجاورة تُدمج معًا مهما كان نوعها طالما لم تكن آخر سلسلة فيها من النوع المبدوء بالرّمز %.

%q{a} 'b' "c" #=> "abc"
"a" 'b' %q{c} #=> NameError: uninitialized constant q

كما يوجد في لغة روبي طريقة لتعريف سلسلة محرفيّة مكونّة من محرف واحد، وصيغتها أن تكتب رمز إشارة الاستفهام ? يتبعه محرف واحد أو سلسلة محارف هروب تعبّر عن ترميز محرف واحد:

?a       #=> "a"
?abc     #=> SyntaxError
?\n      #=> "\n"
?\s      #=> " "
?\\      #=> "\\"
?\u{41}  #=> "A"
?\C-a    #=> "\x01"
?\M-a    #=> "\xE1"
?\M-\C-a #=> "\x81"
?\C-\M-a #=> "\x81", مثل الحالة السابقة
?あ      #=> "あ"

مستندات Here

إذا أردت كتابة مقاطع نصيّة كبيرة فبإمكانك استخدام مستند here أو ما يعرف بلغة روبي بالمصطلح heredoc كالتالي:

expected_result = <<HEREDOC
This would contain specially formatted text.
That might span many lines
HEREDOC

هذه المقاطع النصيّة تبدأ بالسّطر الذي يلي <<HEREDOC وينتهي بنهاية السّطر الذي يسبق HEREDOC. والنتيجة تشمل محرف السطر الجديد المُدخل في نهاية السطر الأخير. يمكنك أن تستخدم أيّ معرّف مع مستندات here، لكن يفضّل أن تستخدم المعرّفات ذات الحروف الكبيرة. ويجب أن تضيف فراغًا قبل معرّف النّهاية في حالة استخدمت رمز "-" بعد >> كالتّالي:

expected_result = <<-INDENTED_HEREDOC
This would contain specially formatted text.
That might span many lines
 INDENTED_HEREDOC

لاحظ أنّه على الرغم من إضافة مسافة بادئة قبل معرّف النهاية فإن المحتوى يُعامل دائمًا على أنّه يبدأ من أوّل السّطر. وإذا أضفت مسافة بادئة قبل المحتوى فستظهر هذه الفراغات عند الطباعة. To have indented content as well as an indented closing identifier, you can use a “squiggly” heredoc, which uses a “~” instead of a “-” after <<: حتى تحصل على مسافة جدولة لكل من المحتوى ومعرّف النهاية فعليك حينها أن تستخدم heredoc من النوع المتعرّج وذلك بكتابة ~ بدلًا من - بعد >> : 

expected_result = <<~SQUIGGLY_HEREDOC
 This would contain specially formatted text.
 That might span many lines
SQUIGGLY_HEREDOC

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

expected_result = <<-'EXPECTED'
One plus one is #{1 + 1}
EXPECTED
p expected_result # تطبع: "One plus one is \#{1 + 1}\n"

كما يمكن إحاطة معرّف البدء بعلامة اقتباس مضاعفة (والتي تكافئ عدم إحاطته بشيء) أو بالمحرف `والذي عند استخدامه يؤدي إلى أن يسلك مستند heredoc سلوك #Kernel:

puts <<-`HEREDOC`
cat #{__FILE__}
HEREDOC

لاستدعاء تابع على مستند heredoc عليك أن تضيفه بعد معرّف البدء:

expected_result = <<-EXPECTED.chomp
One plus one is #{1 + 1}
EXPECTED

كما بإمكانك فتح عدّة مستندات heredoc بنفس السطر، إلّا أنّ قراءتها ستكون صعبة حينئذ:

puts(<<-ONE, <<-TWO)
content for heredoc one
ONE
content for heredoc two
TWO

الرموز

يمثّل الرمّز اسمًا معرّفًا ضمن المفسّر الخاصّ بلغة روبي. انظر صفحة التوثيق الخاصة بالرموز لمزيد من التفاصيل عن ماهية الرموز ومتى تنشئها لغة روبي. يمكنك أن تشير إلى الرمز باستخدام النقطتين ":" كالتّالي :my_symbol. كما يمكنك إنشاء الرمز الخاص بك باستخدام التضمين كالتالي:

:"my_symbol1"
:"my_symbol#{1 + 1}"

وكما هو الحال في السّلاسل البرمجية، يمكنك استخدام علامة الاقتباس المفردة لمنع التضمين:

:'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}"

عند إنشاء المصنِّفات فهناك صيغة خاصة للدلالة على الرموز.

المصفوفات

تنشأ المصفوفة باستخدام الكائنات المحصورة بين القوسين [ و ]:

[1, 2, 3]

كما يمكنك وضع تعبير برمجيّ داخل المصفوفة:

[1, 1 + 1, 1 + 2]
[1, [1 + 1, [1 + 2]]]

انظر صفحة توثيق المصفوفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصفوفات.

المصنِّفات Hashes

ينشأ المصنّف باستخدام أزواج دليل-قيمة ووضعها ضمن الأقواس { و }:

{ "a" => 1, "b" => 2 }

وكلّ من الدليل والقيمة يمكن أن يكون أيّ نوع من الكائنات. كما بإمكانك إنشاء مصنّف باستخدام دلائل رمزيّة بالصيغة التالية:

{ a: 1, b: 2 }

ونفس الصيغة مستخدمة مع معاملات القيم المفتاحيّة عند تمريرها إلى التوابع. وكما هو الحال بالنّسبة للرموز، فبإمكانك وضع المفاتيح الرمزيّة ضمن علامتي اقتباس:

{ "a 1": 1, "b #{1 + 1}": 2 }

وهي مكافئة لما يلي:

{ :"a 1" => 1, :"b 2" => 2 }

انظر صفحة التوثيق الخاصة بالمصنّفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصنّف.

المجالات

يمثّل المجال في لغة روبي مجالًا من القيم، ويمكن له أن يتضمّن أو لا يتضمّن القيم الحدّية له.

(1..2)  # يتضمّن القيمة النهائية
(1...2) # لا يتضمّن القيمة النهائيّة

بإمكانك إنشاء مجال لأيّ نوع من الكائنات. انظر صفحة التوثيق الخاصّة بالمجالات لتتعرف على التوابع التي قد تحتاج تعريفها.

التعابير النّمطيّة

يُنشأ التعبير النّمطيّ باستخدام "/":

/my regular expression/

يمكن أن يتبع التعبير النّمطيّ رايات (flags) تعدّل سلوك المطابقة لهذا التعبير. فالعَلم i على سبيل المثال يجعل من هذا التعبير حساسًا لحالة الحروف:

/my regular expression/i

يٌمكن استخدام محارف الهروب ضمن التعبير النّمطيّ ولاحظ أنّ التعابير النّمطيّة قد تتطلب محارف هروب خاصّة بها إضافة لتلك المستخدمة في السلاسل المحرفيّة. انظر التوثيق الخاصّ بالتّعابير النّمطيّة لتفاصيل أكثر عن الصيغة الخاصّة بها.

بنية Proc

يمكن إنشاء بنية proc باستخدام ‎->‎:

-> { 1 + 1 }

استدعاء بنية proc هذه سوف يعطي النتيجة 2. ويمكنك أيضًا المطالبة بتمرير معامل للبنية كالتالي:

->(v) { 1 + v }

وهذه البنية ستضيف 1 إلى المعامل الممرر لها.

السلاسل المحرفيّة المعرّفة بالرّمز %

ذكرنا سابقًا إمكانيّة تعريف سلسلة محرفيّة بالشّكل: (...)%، لكنّ الرّمز % يمكن استخدامه أيضًا لإنشاء أنواع أخرى من الكائنات. وكما هو الحال في السلاسل المحرفيّة، عند استخدام حرف كبير فسيُتاح التضمين ومحارف الهروب، بينما المحرف الصغير يمنعهما. وإليك أنواع السلاسل المحرفيّة المعرّفة بالرّمز % الموجودة في لغة روبي: %i مصفوفة من الرّموز %q سلسلة محرفية %r تعبير نمطيّ %s رمز %w مصفوفة من السلاسل المحرفيّة %x تنفيذ أمر في نظام التشغيل وإعادة الناتج وإذا أردت أن تضمّن فراغًا في إحدى عناصر المصفوفة فعليك أن تُسبق الفراغ بمحرف "\":

%w[one one-hundred\ one]
#=> ["one", "one-hundred one"]

إذا كنت تستخدم الأقواس  “)”, “]”, “}”, “>” فعليك أن تغلقها بالقوس المقابل لها “(”, “[”, “{”, “<” على الترتيب. كما بإمكانك الفصل بين عناصر المصفوفة باستخدام محارف أخرى غير أبجدية أو رقمية مثل “%”, “|”, “^” ...إلخ.