الفرق بين المراجعتين لصفحة: «Ruby/literals»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:التعابير البرمجية في لغة روبي}}</noinclude> | <noinclude>{{DISPLAYTITLE:التعابير البرمجية في لغة روبي}}</noinclude> | ||
تنشئ التعابير البرمجية في لغة روبي كائنات يمكنك استخدامها في برنامجك؛ هذه التعابير تتضمّن: | |||
تنشئ التعابير البرمجية في لغة روبي كائنات يمكنك استخدامها في | *القيم المنطقيّة و القيمة <code>nil</code> | ||
* القيم المنطقيّة و nil | *[[Ruby/Integer|الأعداد]] | ||
* | *[[Ruby/String|السلاسل النصية]] | ||
* السلاسل | *[[Ruby/Symbol|الرموز]] | ||
* الرموز | *[[Ruby/Array|المصفوفات]] | ||
* المصفوفات | *[[Ruby/Hash|جداول Hash]] | ||
* | *[[Ruby/Range|المجالات]] | ||
* المجالات | *[[Ruby/Regexp|التعابير النظامية]] | ||
* | *[[Ruby/Proc|بنى Proc]] | ||
* بنى Proc | ==القيم المنطقيّة و القيمة <code>nil</code>== | ||
== القيم المنطقيّة و nil == | إنّ كلًا من <code>nil</code> و <code>false</code> تعبّران عن القيمة المنطقيّة الخطأ (false value). تُستخدم <code>nil</code> أحيانًا لتعبّر عن عدم وجود أيّة قيمة أو قيمة مجهولة، لكنّها تساوي <code>false</code> في [[Ruby/control expressions|العبارات الشرطيّة]]. | ||
إنّ كلًا من nil و false تعبّران عن القيمة المنطقيّة | |||
أمّا true فهي القيمة المنطقيّة الصحيحة | أمّا <code>true</code> فهي القيمة المنطقيّة الصحيحة (true value)، وكلّ الكائنات عدا <code>nil</code> و <code>false</code> تساوي القيمة المنطقية الصحيحة <code>true</code> في [[Ruby/control expressions|العبارات الشرطيّة]]. | ||
(هناك أيضًا الثوابت TRUE و FALSE و | (هناك أيضًا الثوابت <code>TRUE</code> و <code>FALSE</code> و <code>NIL</code>، لكن الصيغ المكتوبة بالحروف الصغيرة هي المفضلة عادة.) | ||
== | ==الأعداد== | ||
يمكنك كتابة | يمكنك كتابة [[Ruby/Integer|الأعداد الصحيحة]] مهما كان حجمها كالتّالي:<syntaxhighlight lang="text"> | ||
<syntaxhighlight lang="text"> | |||
1234 | 1234 | ||
1_234 | 1_234 | ||
</syntaxhighlight> | </syntaxhighlight>وكلاهما يعطيان نفس القيمة 1234، فالشرطة السفلية _ يمكن استخدامها لتسهيل قراءة الشيفرة، فيمكنك إضافتها في أيّ موضع بين الأرقام. | ||
وكلاهما يعطيان نفس القيمة 1234، فالشرطة السفلية _ يمكن استخدامها لتسهيل قراءة الشيفرة، فيمكنك إضافتها في أيّ موضع بين الأرقام. | |||
يمكن كتابة الأعداد | يمكن كتابة [[Ruby/Float|الأعداد العشرية]] بإحدى الطرائق التالية:<syntaxhighlight lang="text"> | ||
<syntaxhighlight lang="text"> | |||
12.34 | 12.34 | ||
1234e-2 | 1234e-2 | ||
1.234E1 | 1.234E1 | ||
</syntaxhighlight> | </syntaxhighlight>وكلّ منها يعطي نفس القيمة 12.34، كما يمكنك استخدام الشرطة السفلية أيضًا ضمن [[Ruby/Float|الأعداد العشرية]]. | ||
وكلّ منها يعطي نفس القيمة 12.34، كما يمكنك استخدام الشرطة السفلية أيضًا ضمن الأعداد العشرية. | |||
يمكنك استخدام سابقة خاصّة لكتابة الأعداد بأنظمة الترقيم المختلفة: العشريّ أو الستّ عشري أو الثماني أو الثنائيّ. فالعدد العشري يسبقه | يمكنك استخدام سابقة خاصّة لكتابة الأعداد بأنظمة الترقيم المختلفة: العشريّ أو الستّ عشري أو الثماني أو الثنائيّ. فالعدد العشري يسبقه <code>0d</code>، والستّ عشري يسبقه <code>0x</code>، أمّا الثماني فيسبقه <code>0</code> (صفر) أو <code>0O</code>، أما الأعداد الثّنائية فيسبقها <code>0b</code>. وفي جميع هذه الحالات، يمكن كتابة الأحرف بحالتها الكبيرة أو الصغيرة. إليك هذا المثال:<syntaxhighlight lang="text"> | ||
<syntaxhighlight lang="text"> | |||
0d170 | 0d170 | ||
0D170 | 0D170 | ||
سطر 48: | سطر 42: | ||
0b10101010 | 0b10101010 | ||
0B10101010 | 0B10101010 | ||
</syntaxhighlight> | </syntaxhighlight>كل هذه الأعداد لها نفس القيمة العشرية وهي 170، ويمكنك أيضًا في أيّ منها أن تستخدم الشرطة السفلية <code>_</code>. | ||
كل هذه الأعداد لها نفس القيمة العشرية وهي 170، ويمكنك أيضًا في أيّ منها أن تستخدم الشرطة السفلية _. | ==السلاسل النصية== | ||
== السلاسل | الطريقة الأكثر شيوعًا لكتابة [[Ruby/String|السلاسل النصية]] هي باستخدام علامة الاقتباس المزدوجة <code>"</code>:<syntaxhighlight lang="ruby"> | ||
الطريقة الأكثر شيوعًا لكتابة السلاسل | |||
<syntaxhighlight lang="ruby"> | |||
"This is a string." | "This is a string." | ||
</syntaxhighlight> | </syntaxhighlight>يمكن [[Ruby/String|للسلاسل النصية]] أن تمتدّ على أكثر من سطر، كما أنّها إذا احتوت على المحرف <code>"</code> ضمنها فيجب تهريبه باستعمال المحرف <code>\</code> قبله:<syntaxhighlight lang="ruby"> | ||
يمكن للسلاسل | |||
<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> | </syntaxhighlight>[[Ruby/String|السلاسل النصية]] المعرّفة باستخدام علامة الاقتباس المضاعفة تسمح باستخدام محارف الهروب مثل <code>n\</code> للنزول لسطر جديد، و <code>t\</code> للفراغ الواسع، وهكذا. وهذه قائمة بكل الحالات الممكنة لهذه المحارف الخاصة: | ||
السلاسل | |||
{| class="wikitable" | {| class="wikitable" | ||
|\a | !المحرف | ||
!الوصف | |||
!القيمة في ASCII | |||
|- | |||
|<code>\a</code> | |||
|الجرس | |الجرس | ||
|ASCII 07h (BEL) | |ASCII 07h (BEL) | ||
|- | |- | ||
|\b | |<code>\b</code> | ||
|فراغ خلفي | |فراغ خلفي | ||
|ASCII 08h (BS) | |ASCII 08h (BS) | ||
|- | |- | ||
|\t | |<code>\t</code> | ||
|مسافة جدولة أفقية | |مسافة جدولة أفقية | ||
|ASCII 09h (TAB) | |ASCII 09h (TAB) | ||
|- | |- | ||
|\n | |<code>\n</code> | ||
|سطر جديد | |سطر جديد | ||
|ASCII 0Ah (LF) | |ASCII 0Ah (LF) | ||
|- | |- | ||
|\v | |<code>\v</code> | ||
|مسافة جدولة شاقولية | |مسافة جدولة شاقولية | ||
|ASCII 0Bh (VT) | |ASCII 0Bh (VT) | ||
|- | |- | ||
|\f | |<code>\f</code> | ||
|محرف الانتقال إلى صفحة جديدة | |محرف الانتقال إلى صفحة جديدة | ||
|ASCII 0Ch (FF) | |ASCII 0Ch (FF) | ||
|- | |- | ||
|\ | |<code>\r</code> | ||
|عودة لبداية السطر | |عودة لبداية السطر | ||
|ASCII 0Dh (CR) | |ASCII 0Dh (CR) | ||
|- | |- | ||
|\e | |<code>\e</code> | ||
|هروب | |هروب | ||
|ASCII 1Bh (ESC) | |ASCII 1Bh (ESC) | ||
|- | |- | ||
|\s | |<code>\s</code> | ||
|فراغ | |فراغ | ||
|ASCII 20h (SPC) | |ASCII 20h (SPC) | ||
|- | |- | ||
|\\ | |<code>\\</code> | ||
|خط مائل خلفي | |خط مائل خلفي | ||
|\ | |\ | ||
|- | |- | ||
|\nnn | |<code>\nnn</code> | ||
|رقم بالنظام الثّماني، حيث تستبدل nnn بثلاثة أرقام ثمانية (ما بين 0 و 7). | |رقم بالنظام الثّماني، حيث تستبدل nnn بثلاثة أرقام ثمانية (ما بين 0 و 7). | ||
|([0-7]) | |([0-7]) | ||
|- | |- | ||
|\ | |<code>\xnn</code> | ||
|رقم بالنظام الست عشري، حيث تستبدل nn برقمين من النظام الست عشري. | |رقم بالنظام الست عشري، حيث تستبدل nn برقمين من النظام الست عشري. | ||
|([0-9a-fA-F]) | |([0-9a-fA-F]) | ||
|- | |- | ||
|\unnnn | |<code>\unnnn</code> | ||
|محرف من نظام الترميز الموحد unicode، حيث تستبدل nnnn بأربع محارف بالضبط من النظام الست عشري. | |محرف من نظام الترميز الموحد unicode، حيث تستبدل nnnn بأربع محارف بالضبط من النظام الست عشري. | ||
|([0-9a-fA-F]) | |([0-9a-fA-F]) | ||
|- | |- | ||
|\u{nnnn ...} | |<code>\u{nnnn ...}</code> | ||
|محارف من نظام الترميز الموحد unicode حيث تستبدل أحرف n بمحارف من النظام الست عشري يتراوح عددها بين 1 و 6. | |محارف من نظام الترميز الموحد unicode حيث تستبدل أحرف n بمحارف من النظام الست عشري يتراوح عددها بين 1 و 6. | ||
|([0-9a-fA-F]) | |([0-9a-fA-F]) | ||
|- | |- | ||
|\cx | |<code>\cx</code> أو | ||
<code>\C-x</code> | |||
|محرف التحكّم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | |محرف التحكّم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | ||
| | | | ||
|- | |- | ||
|\M-x | |<code>\M-x</code> | ||
|محرف ميتا، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | |محرف ميتا، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | ||
| | | | ||
|- | |- | ||
|\M-\C-x | |<code>\M-\C-x</code> | ||
|محرف ميتا للتحكم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | |محرف ميتا للتحكم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | ||
| | | | ||
|- | |- | ||
|\M-\cx | |<code>\M-\cx</code> | ||
|مثل السابق. | |مثل السابق. | ||
| | | | ||
|- | |- | ||
|\c\M-x | |<code>\c\M-x</code> | ||
|مثل السابق. | |مثل السابق. | ||
| | | | ||
|- | |- | ||
|\c? | |<code>\c?</code> أو | ||
<code>\C-?</code> | |||
|حذف delete. | |حذف delete. | ||
|ASCII 7Fh (DEL) | |ASCII 7Fh (DEL) | ||
|} | |} وفي حال كتابة أيّ محرف آخر بعد الرمز <code>\</code> فسيفسّر على أنّه المحرف نفسه. | ||
كما تسمح السلاسل | كما تسمح [[Ruby/String|السلاسل النصية]] المعرّفة بعلامة الاقتباس المضاعفة أن تضمَّن قيمًا أخرى إذا كُتبت ضمن قوسين <code>{}</code> وسبقهما الرمز <code>#</code> كالتّالي:<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
"One plus one is two: #{1 + 1}" | "One plus one is two: #{1 + 1}" | ||
</syntaxhighlight> | </syntaxhighlight>يمكن كتابة أيّ تعبير برمجيّ بنفس الطّريقة، لكن يفضل أن تستخدم التعبيرات القصيرة لتسهيل قراءة الشيفرة. | ||
يمكن كتابة أيّ تعبير برمجيّ بنفس الطّريقة، لكن يفضل أن تستخدم التعبيرات القصيرة لتسهيل قراءة الشيفرة. | |||
كما يمكن تعطيل عمليّة التضّمين هذه بتمييز الرمز # بكتابة المحرف \ قبله: | كما يمكن تعطيل عمليّة التضّمين هذه بتمييز الرمز <code>#</code> بكتابة المحرف <code>\</code> قبله:<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
'#{1 + 1}' #=> "\#{1 + 1}" | '#{1 + 1}' #=> "\#{1 + 1}" | ||
</syntaxhighlight> | </syntaxhighlight>أما [[Ruby/String|السلاسل النصية]] المعرفة باستخدام علامة الاقتباس المنفردة <code>'</code> فلا تميّز التعابير البرمجيّة المضمَّنة ولا محارف الهروب الخاصّة، ويستثنى من ذلك تمييز علامة الاقتباس المفردة <code>'\</code> وتمييز المحرف <code>\</code> بكتابته بالشكل <code>\\</code>. | ||
أما السلاسل | |||
كما بإمكانك إنشاء سلاسل محرفيّة باستخدام الرمز % كالتّالي: | كما بإمكانك إنشاء سلاسل محرفيّة باستخدام الرمز <code>%</code> كالتّالي:<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
%(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2" | %(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2" | ||
</syntaxhighlight> | </syntaxhighlight>هناك نوعان من [[Ruby/String|السلاسل النصية]] المبدوءة بالرّمز <code>%</code>، الأوّل <code>%q(...)</code> ويسلك سلوك السلسلة المحرفيّة ذات علامة الاقتباس المفردة (لا تضمِّن التعابير البرمجيّة أو محارف الهروب)، بينما النوع الثاني <code>Q%</code> فيتعامل كالسلسلة المحرفيّة ذات علامة الاقتباس المضاعفة. انظر إلى [[Ruby/String|السلاسل النصية]] المبدوءة بالرمز <code>%</code> أدناه لتفاصيل أكثر عن الصيغة الخاصّة بها. | ||
هناك نوعان من السلاسل | |||
السلاسل | [[Ruby/String|السلاسل النصية]] المتجاورة فيما بينها تُدمج مع بعضها تلقائيًا:<syntaxhighlight lang="ruby"> | ||
<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>وأيّة [[Ruby/String|سلاسل نصية]] متجاورة تُدمج معًا مهما كان نوعها طالما لم تكن آخر سلسلة فيها من النوع المبدوء بالرّمز <code>%</code>.<syntaxhighlight lang="ruby"> | ||
وأيّة سلاسل | |||
<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>كما يوجد في لغة روبي طريقة لتعريف سلسلة محرفيّة مكونّة من محرف واحد، وصيغتها أن تكتب رمز إشارة الاستفهام <code>?</code> يتبعه محرف واحد أو سلسلة محارف هروب تعبّر عن ترميز محرف واحد:<syntaxhighlight lang="ruby"> | ||
كما يوجد في لغة روبي طريقة لتعريف سلسلة محرفيّة مكونّة من محرف واحد، وصيغتها أن تكتب رمز إشارة الاستفهام ? يتبعه محرف واحد أو سلسلة محارف هروب تعبّر عن ترميز محرف واحد: | |||
<syntaxhighlight lang="ruby"> | |||
?a #=> "a" | ?a #=> "a" | ||
?abc #=> SyntaxError | ?abc #=> SyntaxError | ||
سطر 185: | سطر 170: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==مستندات Here== | ==مستندات Here== | ||
إذا أردت كتابة مقاطع نصيّة | إذا أردت كتابة مقاطع نصيّة كبيرة، فبإمكانك استخدام مستند here أو ما يعرف بلغة روبي بالمصطلح heredoc كالتالي:<syntaxhighlight lang="ruby"> | ||
<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> | </syntaxhighlight>هذه المقاطع النصيّة تبدأ بالسّطر الذي يلي <code>HEREDOC>></code> وينتهي بنهاية السّطر الذي يسبق <code>HEREDOC</code>. والنتيجة تشمل محرف السطر الجديد المُدخل في نهاية السطر الأخير. | ||
هذه المقاطع النصيّة تبدأ بالسّطر الذي يلي << | |||
يمكنك أن تستخدم أيّ معرّف مع مستندات here، لكن يفضّل أن تستخدم المعرّفات ذات الحروف الكبيرة. ويجب أن تضيف فراغًا قبل معرّف النّهاية في حالة استخدمت رمز "-" بعد >> كالتّالي: | يمكنك أن تستخدم أيّ معرّف مع مستندات here، لكن يفضّل أن تستخدم المعرّفات ذات الحروف الكبيرة. ويجب أن تضيف فراغًا قبل معرّف النّهاية في حالة استخدمت رمز <code>"-"</code> بعد <code>>></code> كالتّالي:<syntaxhighlight lang="ruby"> | ||
<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> | </syntaxhighlight>لاحظ أنّه على الرغم من إضافة مسافة بادئة قبل معرّف النهاية فإن المحتوى يُعامل دائمًا على أنّه يبدأ من أوّل السّطر. وإذا أضفت مسافة بادئة قبل المحتوى فستظهر هذه الفراغات عند الطباعة. | ||
لاحظ أنّه على الرغم من إضافة مسافة بادئة قبل معرّف النهاية فإن المحتوى يُعامل دائمًا على أنّه يبدأ من أوّل السّطر. وإذا أضفت مسافة بادئة قبل المحتوى فستظهر هذه الفراغات عند الطباعة. | |||
حتى تحصل على مسافة جدولة لكل من المحتوى ومعرّف | حتى تحصل على مسافة جدولة لكل من المحتوى ومعرّف النهاية، فعليك حينها أن تستخدم heredoc من النوع المتعرّج (بالشكل <code>SQUIGGLY_HEREDOC</code>) وذلك بكتابة <code>~</code> بدلًا من <code>-</code> بعد <code>>></code> : <syntaxhighlight lang="ruby"> | ||
<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> | </syntaxhighlight>في حال وجود اختلاف بعدد مسافات الجدولة بين الأسطر، فسيُحذف عدد المسافات الأقل من جميع الأسطر. أمّا تلك السطور الفارغة أو تلك التي تحتوي على مسافات جدولة فقط أو فراغات، فستُتجاهل بغرض تعيين مسافات الجدولة. ويستثنى من ذلك الفراغات ومسافات الجدولة المكتوبة بشكل محارف هروب إذ لا تُعدّ محارف جدولة. | ||
في حال وجود اختلاف بعدد مسافات الجدولة بين الأسطر، فسيُحذف عدد المسافات الأقل من جميع الأسطر. أمّا تلك السطور الفارغة أو تلك التي تحتوي على مسافات جدولة فقط أو | |||
مستند heredoc يسمح باستخدام التضمين ومحارف الهروب، مع إمكانيّة تعطيلها عبر إحاطة معرّف البداية بعلامتي اقتباس مفردتين: | مستند heredoc يسمح باستخدام التضمين ومحارف الهروب، مع إمكانيّة تعطيلها عبر إحاطة معرّف البداية بعلامتي اقتباس مفردتين: <syntaxhighlight lang="ruby"> | ||
<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> | </syntaxhighlight>كما يمكن إحاطة معرّف البدء بعلامة اقتباس مضاعفة (والتي تكافئ عدم إحاطته بشيء) أو بالمحرف <code>`</code> والذي عند استخدامه يؤدي إلى أن يسلك مستند heredoc سلوك <code>[[Ruby/Kernel/60|`.Kernel]]</code>:<syntaxhighlight lang="ruby"> | ||
كما يمكن إحاطة معرّف البدء بعلامة اقتباس مضاعفة (والتي تكافئ عدم إحاطته بشيء) أو بالمحرف `والذي عند استخدامه يؤدي إلى أن يسلك مستند heredoc سلوك | |||
<syntaxhighlight lang="ruby"> | |||
puts <<-`HEREDOC` | puts <<-`HEREDOC` | ||
cat #{__FILE__} | cat #{__FILE__} | ||
HEREDOC | HEREDOC | ||
</syntaxhighlight> | </syntaxhighlight>لاستدعاء تابع على مستند heredoc عليك أن تضيفه بعد معرّف البدء:<syntaxhighlight lang="ruby"> | ||
لاستدعاء تابع على مستند 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> | </syntaxhighlight>كما بإمكانك فتح عدّة مستندات heredoc بنفس السطر، إلّا أنّ قراءتها ستكون صعبة حينئذٍ:<syntaxhighlight lang="ruby"> | ||
كما بإمكانك فتح عدّة مستندات heredoc بنفس السطر، إلّا أنّ قراءتها ستكون صعبة | |||
<syntaxhighlight lang="ruby"> | |||
puts(<<-ONE, <<-TWO) | puts(<<-ONE, <<-TWO) | ||
content for heredoc one | content for heredoc one | ||
سطر 238: | سطر 211: | ||
TWO | TWO | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== الرموز == | ==الرموز== | ||
يمثّل الرمّز اسمًا معرّفًا ضمن المفسّر الخاصّ بلغة روبي. انظر صفحة التوثيق الخاصة بالرموز لمزيد من التفاصيل عن ماهية الرموز ومتى تنشئها لغة روبي. | يمثّل [[Ruby/Symbol|الرمّز]] اسمًا معرّفًا ضمن المفسّر الخاصّ بلغة روبي. انظر صفحة التوثيق الخاصة [[Ruby/Symbol|بالرموز]] لمزيد من التفاصيل عن ماهية الرموز ومتى تنشئها لغة روبي. | ||
يمكنك أن تشير إلى الرمز باستخدام النقطتين ":" كالتّالي : | يمكنك أن تشير إلى الرمز باستخدام النقطتين ":" كالتّالي <code>my_symbol:</code>. كما يمكنك إنشاء الرمز الخاص بك باستخدام التضمين كالتالي:<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
:"my_symbol1" | :"my_symbol1" | ||
:"my_symbol#{1 + 1}" | :"my_symbol#{1 + 1}" | ||
</syntaxhighlight> | </syntaxhighlight>وكما هو الحال في السّلاسل البرمجية، يمكنك استخدام علامة الاقتباس المفردة لمنع التضمين:<syntaxhighlight lang="ruby"> | ||
وكما هو الحال في السّلاسل البرمجية، يمكنك استخدام علامة الاقتباس المفردة لمنع التضمين: | |||
<syntaxhighlight lang="ruby"> | |||
:'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}" | :'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}" | ||
</syntaxhighlight> | </syntaxhighlight>عند إنشاء كائنات من النوع <code>[[Ruby/Hash|Hash]]</code> فهناك صيغة خاصة للدلالة على الرموز. | ||
عند إنشاء | ==المصفوفات== | ||
== المصفوفات == | تنشأ [[Ruby/Array|المصفوفة]] باستخدام الكائنات المحصورة بين القوسين <code>[</code> و <code>]</code>:<syntaxhighlight lang="ruby"> | ||
تنشأ المصفوفة باستخدام الكائنات المحصورة بين القوسين [ و ]: | |||
<syntaxhighlight lang="ruby"> | |||
[1, 2, 3] | [1, 2, 3] | ||
</syntaxhighlight> | </syntaxhighlight>كما يمكنك وضع تعبير برمجيّ داخل المصفوفة:<syntaxhighlight lang="ruby"> | ||
كما يمكنك وضع تعبير برمجيّ داخل المصفوفة: | |||
<syntaxhighlight lang="ruby"> | |||
[1, 1 + 1, 1 + 2] | [1, 1 + 1, 1 + 2] | ||
[1, [1 + 1, [1 + 2]]] | [1, [1 + 1, [1 + 2]]] | ||
</syntaxhighlight> | </syntaxhighlight>انظر صفحة توثيق [[Ruby/Array|المصفوفات]] لتتعرف على التوابع التي بإمكانك استخدامها مع [[Ruby/Array|المصفوفات]]. | ||
انظر صفحة توثيق المصفوفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصفوفات. | ==الجدوال Hash== | ||
== | ينشأ [[Ruby/Hash|الجدول Hash]] باستخدام الأزواج مفتاح-قيمة ووضعها ضمن الأقواس <code>{</code> و <code>}</code>:<syntaxhighlight lang="ruby"> | ||
ينشأ | |||
<syntaxhighlight lang="ruby"> | |||
{ "a" => 1, "b" => 2 } | { "a" => 1, "b" => 2 } | ||
</syntaxhighlight> | </syntaxhighlight>وكلّ من المفتاح والقيمة يمكن أن يكون أيّ نوع من الكائنات. كما بإمكانك إنشاء [[Ruby/Hash|جدول Hash]] باستخدام دلائل رمزيّة بالصيغة التالية:<syntaxhighlight lang="ruby"> | ||
وكلّ من | |||
<syntaxhighlight lang="ruby"> | |||
{ a: 1, b: 2 } | { a: 1, b: 2 } | ||
</syntaxhighlight> | </syntaxhighlight>هذه نفس الصيغة المستخدمة مع [[Ruby/calling methods#.D8.A7.D9.84.D9.88.D8.B3.D8.A7.D8.A6.D8.B7 .D8.A7.D9.84.D9.85.D8.B3.D9.85.D8.A7.D8.A9|الوسائط المسماة]] عند تمريرها إلى التوابع. | ||
وكما هو الحال بالنّسبة | وكما هو الحال بالنّسبة [[Ruby/Symbol|للرموز]]، فبإمكانك وضع المفاتيح الرمزيّة ضمن علامتي اقتباس:<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
{ "a 1": 1, "b #{1 + 1}": 2 } | { "a 1": 1, "b #{1 + 1}": 2 } | ||
</syntaxhighlight> | </syntaxhighlight>وهي مكافئة لما يلي:<syntaxhighlight lang="ruby"> | ||
وهي مكافئة لما يلي: | |||
<syntaxhighlight lang="ruby"> | |||
{ :"a 1" => 1, :"b 2" => 2 } | { :"a 1" => 1, :"b 2" => 2 } | ||
</syntaxhighlight> | </syntaxhighlight>انظر صفحة التوثيق الخاصة [[Ruby/Hash|بجداول Hash]] لتتعرف على التوابع التي بإمكانك استخدامها مع المصنّف. | ||
انظر صفحة التوثيق الخاصة | ==المجالات== | ||
== المجالات == | يمثّل [[Ruby/Range|المجال]] في لغة روبي مجالًا من القيم، ويمكن له أن يتضمّن أو لا يتضمّن القيم الحدّية له.<syntaxhighlight lang="ruby"> | ||
يمثّل المجال في لغة روبي مجالًا من القيم، ويمكن له أن يتضمّن أو لا يتضمّن القيم الحدّية له. | |||
<syntaxhighlight lang="ruby"> | |||
(1..2) # يتضمّن القيمة النهائية | (1..2) # يتضمّن القيمة النهائية | ||
(1...2) # لا يتضمّن القيمة النهائيّة | (1...2) # لا يتضمّن القيمة النهائيّة | ||
</syntaxhighlight> | </syntaxhighlight>بإمكانك إنشاء مجال لأيّ نوع من الكائنات. انظر صفحة التوثيق الخاصّة [[Ruby/Range|بالمجالات]] لتتعرف على التوابع التي قد تحتاج تعريفها. | ||
بإمكانك إنشاء مجال لأيّ نوع من الكائنات. انظر صفحة التوثيق الخاصّة بالمجالات لتتعرف على التوابع التي قد تحتاج تعريفها. | ==التعابير النمطية== | ||
== التعابير | يُنشأ [[Ruby/Regexp|التعبير النّمطيّ]] باستخدام "/":<syntaxhighlight lang="ruby"> | ||
يُنشأ التعبير النّمطيّ باستخدام "/": | |||
<syntaxhighlight lang="ruby"> | |||
/my regular expression/ | /my regular expression/ | ||
</syntaxhighlight> | </syntaxhighlight>يمكن أن يتبع [[Ruby/Regexp|التعبير النّمطيّ]] رايات (flags) تعدّل سلوك المطابقة لهذا التعبير. فالراية <code>i</code> على سبيل المثال تجعل من هذا التعبير حساسًا لحالة الحروف:<syntaxhighlight lang="ruby"> | ||
يمكن أن يتبع التعبير النّمطيّ رايات (flags) تعدّل سلوك المطابقة لهذا التعبير. | |||
<syntaxhighlight lang="ruby"> | |||
/my regular expression/i | /my regular expression/i | ||
</syntaxhighlight> | </syntaxhighlight>يٌمكن استخدام محارف الهروب ضمن التعبير النّمطيّ ولاحظ أنّ [[Ruby/Regexp|التعابير النّمطيّة]] قد تتطلب محارف هروب خاصّة بها إضافة لتلك المستخدمة في السلاسل النصية. | ||
يٌمكن استخدام محارف الهروب ضمن التعبير النّمطيّ ولاحظ أنّ التعابير النّمطيّة قد تتطلب محارف هروب خاصّة بها إضافة لتلك المستخدمة في السلاسل | |||
انظر التوثيق الخاصّ | انظر التوثيق الخاصّ [[Ruby/Regexp|بالتعابير النّمطيّة]] لتفاصيل أكثر عن الصيغة الخاصّة بها. | ||
== بنية Proc == | ==بنية Proc== | ||
يمكن إنشاء بنية proc باستخدام ->: | يمكن إنشاء بنية <code>[[Ruby/Proc|proc]]</code> باستخدام <code>-></code>:<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
-> { 1 + 1 } | -> { 1 + 1 } | ||
</syntaxhighlight> | </syntaxhighlight>استدعاء بنية <code>[[Ruby/Proc|proc]]</code> هذه سوف يعطي النتيجة 2. ويمكنك أيضًا المطالبة بتمرير معامل للبنية كالتالي:<syntaxhighlight lang="ruby"> | ||
استدعاء بنية proc هذه سوف يعطي النتيجة 2. ويمكنك أيضًا المطالبة بتمرير معامل للبنية كالتالي: | |||
<syntaxhighlight lang="ruby"> | |||
->(v) { 1 + v } | ->(v) { 1 + v } | ||
</syntaxhighlight> | </syntaxhighlight>وهذه البنية ستضيف 1 إلى المعامل الممرر لها. | ||
وهذه البنية ستضيف 1 إلى المعامل الممرر لها. | ==السلاسل المحرفيّة المعرفة بالرمز %== | ||
== السلاسل المحرفيّة | ذكرنا سابقًا إمكانيّة تعريف سلسلة نصية بالشّكل: <code>(...)%</code>، لكنّ الرّمز <code>%</code> يمكن استخدامه أيضًا لإنشاء أنواع أخرى من الكائنات. وكما هو الحال في السلاسل النصية، عند استخدام حرف كبير، فسيُتاح التضمين ومحارف الهروب، بينما المحرف الصغير يمنعهما. | ||
ذكرنا سابقًا إمكانيّة تعريف سلسلة | |||
%q | وإليك أنواع السلاسل النصية المعرّفة بالرّمز <code>%</code> الموجودة في لغة روبي: | ||
سلسلة | {| class="wikitable" | ||
!البنية | |||
%r | !الوصف | ||
تعبير نمطيّ | |- | ||
|<code>%i</code> | |||
%s | |مصفوفة من الرّموز. | ||
رمز | |- | ||
|<code>%q</code> | |||
%w | |سلسلة نصية. | ||
مصفوفة من السلاسل | |- | ||
|<code>%r</code> | |||
%x | |تعبير نمطيّ. | ||
تنفيذ أمر في نظام التشغيل وإعادة الناتج | |- | ||
|<code>%s</code> | |||
وإذا أردت أن تضمّن فراغًا في إحدى عناصر المصفوفة فعليك أن تُسبق الفراغ بمحرف "\": | |رمز. | ||
<syntaxhighlight lang="ruby"> | |- | ||
|<code>%w</code> | |||
|مصفوفة من السلاسل النصية. | |||
|- | |||
|<code>%x</code> | |||
|تنفيذ أمر في نظام التشغيل وإعادة الناتج. | |||
|} | |||
وإذا أردت أن تضمّن فراغًا في إحدى عناصر المصفوفة فعليك أن تُسبق الفراغ بمحرف "\":<syntaxhighlight lang="ruby"> | |||
%w[one one-hundred\ one] | %w[one one-hundred\ one] | ||
#=> ["one", "one-hundred one"] | #=> ["one", "one-hundred one"] | ||
</syntaxhighlight> | </syntaxhighlight><span> </span>إذا كنت تستخدم الأقواس “)”، “]”، “}”، “>”، فعليك أن تغلقها بالقوس المقابل لها “(”، “[”، “{”، “<” على الترتيب. كما بإمكانك الفصل بين عناصر المصفوفة باستخدام محارف أخرى غير أبجدية أو رقمية مثل “%”, “|”, “^” ...إلخ. | ||
إذا كنت تستخدم الأقواس | |||
كما بإمكانك الفصل بين عناصر المصفوفة باستخدام محارف أخرى غير أبجدية أو رقمية مثل “%”, “|”, “^” ...إلخ. | == مصادر == | ||
* [https://ruby-doc.org/core-2.5.1/doc/syntax/literals_rdoc.html صفحة Literals في توثيق روبي الرسمي.] | |||
[[تصنيف:Ruby]] | [[تصنيف:Ruby]] | ||
[[تصنيف:Ruby Syntax]] |
مراجعة 13:39، 18 نوفمبر 2018
تنشئ التعابير البرمجية في لغة روبي كائنات يمكنك استخدامها في برنامجك؛ هذه التعابير تتضمّن:
- القيم المنطقيّة و القيمة
nil
- الأعداد
- السلاسل النصية
- الرموز
- المصفوفات
- جداول Hash
- المجالات
- التعابير النظامية
- بنى Proc
القيم المنطقيّة و القيمة nil
إنّ كلًا من nil
و false
تعبّران عن القيمة المنطقيّة الخطأ (false value). تُستخدم nil
أحيانًا لتعبّر عن عدم وجود أيّة قيمة أو قيمة مجهولة، لكنّها تساوي false
في العبارات الشرطيّة.
أمّا true
فهي القيمة المنطقيّة الصحيحة (true value)، وكلّ الكائنات عدا 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\
للفراغ الواسع، وهكذا. وهذه قائمة بكل الحالات الممكنة لهذه المحارف الخاصة:
المحرف | الوصف | القيمة في ASCII |
---|---|---|
\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 أو
|
محرف التحكّم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | |
\M-x
|
محرف ميتا، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | |
\M-\C-x
|
محرف ميتا للتحكم، حيث يستبدل x بأيّ محرف من نظام ASCII موجود على لوحة المفاتيح. | |
\M-\cx
|
مثل السابق. | |
\c\M-x
|
مثل السابق. | |
\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
لاحظ أنّه على الرغم من إضافة مسافة بادئة قبل معرّف النهاية فإن المحتوى يُعامل دائمًا على أنّه يبدأ من أوّل السّطر. وإذا أضفت مسافة بادئة قبل المحتوى فستظهر هذه الفراغات عند الطباعة.
حتى تحصل على مسافة جدولة لكل من المحتوى ومعرّف النهاية، فعليك حينها أن تستخدم heredoc من النوع المتعرّج (بالشكل SQUIGGLY_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}"
عند إنشاء كائنات من النوع Hash
فهناك صيغة خاصة للدلالة على الرموز.
المصفوفات
تنشأ المصفوفة باستخدام الكائنات المحصورة بين القوسين [
و ]
:
[1, 2, 3]
كما يمكنك وضع تعبير برمجيّ داخل المصفوفة:
[1, 1 + 1, 1 + 2]
[1, [1 + 1, [1 + 2]]]
انظر صفحة توثيق المصفوفات لتتعرف على التوابع التي بإمكانك استخدامها مع المصفوفات.
الجدوال Hash
ينشأ الجدول Hash باستخدام الأزواج مفتاح-قيمة ووضعها ضمن الأقواس {
و }
:
{ "a" => 1, "b" => 2 }
وكلّ من المفتاح والقيمة يمكن أن يكون أيّ نوع من الكائنات. كما بإمكانك إنشاء جدول Hash باستخدام دلائل رمزيّة بالصيغة التالية:
{ a: 1, b: 2 }
هذه نفس الصيغة المستخدمة مع الوسائط المسماة عند تمريرها إلى التوابع. وكما هو الحال بالنّسبة للرموز، فبإمكانك وضع المفاتيح الرمزيّة ضمن علامتي اقتباس:
{ "a 1": 1, "b #{1 + 1}": 2 }
وهي مكافئة لما يلي:
{ :"a 1" => 1, :"b 2" => 2 }
انظر صفحة التوثيق الخاصة بجداول Hash لتتعرف على التوابع التي بإمكانك استخدامها مع المصنّف.
المجالات
يمثّل المجال في لغة روبي مجالًا من القيم، ويمكن له أن يتضمّن أو لا يتضمّن القيم الحدّية له.
(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"]
إذا كنت تستخدم الأقواس “)”، “]”، “}”، “>”، فعليك أن تغلقها بالقوس المقابل لها “(”، “[”، “{”، “<” على الترتيب. كما بإمكانك الفصل بين عناصر المصفوفة باستخدام محارف أخرى غير أبجدية أو رقمية مثل “%”, “|”, “^” ...إلخ.