محتويات الدورة
Ruby
الأساسيات: القيم والطرق والنص والكائنات الصالحة
العقود: الاستدعاء والتقييم والإخفاق ونماذج القيم
التكامل: البيانات والموارد وأدلة التنفيذ والثقة

Ruby / الأساسيات: القيم والطرق والنص والكائنات الصالحة / الدرس 1

فهم كائنات Ruby وروابط المتغيرات ومعنى الحساب

اقرأ السكربتات الصغيرة عبر مراجع الكائنات والقيم الديناميكية والقسمة الصحيحة والمراجع إلى كائنات قابلة للتعديل والتجميد السطحي.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ميّز إعادة إسناد المتغير المحلي من تعديل الكائن الذي يشير إليه.
  • توقّع حساب Ruby دون نقل افتراضات التقريب أو الثبات من لغة أخرى.

حدّد افتراضات اللغة والتنفيذ

تتعامل تعبيرات Ruby مع كائنات، وتحمل المتغيرات مراجع لا أنواعا ساكنة معلنة. قد يشير المحلي لاحقا لكائن من صنف آخر؛ ولا تضمن المرونة صلاحية استدعاء الطريقة التالي. تعتمد الدورة وثائق Ruby 3.3 خطا مرجعيا وتستخدم سجلات أرشيف اصطناعية، دون افتراض Rails أو مجموعة gems مثبتة. لم تتوفر Ruby أثناء التأليف، لذلك تبقى البرامج مصادر كاملة أو توضيحية معلنة بقيمة runnable:false. المخرج المتوقع مستنتج من المدخلات، لا نتيجة مفسر مرصودة.

تتبع القسمة الصحيحة عقد Ruby العددي

تعيد / بين الأعداد الصحيحة صحيحا بالتقريب نحو سالب اللانهاية، فتختلف الحالة السالبة غير القابلة للقسمة الكاملة عن البتر نحو الصفر. تطلب fdiv قسمة عائمة. يمكن لأعداد Ruby الصحيحة النمو خارج كلمة الآلة بحسب الموارد، ولا يجعل ذلك الحساب الاعتباطي مجانيا أو كل تكامل دقيقا. Float تقريبية ولا تمثل كل كسر عشري. اختر الوحدات والتقريب قبل العرض؛ فالعشري المعروض ليس نموذجا محاسبيا، ولا يستعيد تحويل النتيجة بعد القسمة الكسر المفقود.

ruby القسمة وإعادة إسناد مرجع محلي
puts 7 / 2
puts(-7 / 2)
puts 7.fdiv(2)
value = 7
value = 'archive'
puts value.class
الناتج المتوقع
3
-4
3.5
String

الأسطر المتوقعة 3 ثم -4 ثم 3.5 ثم String. يكشف السالب التقريب الأدنى، ويغير الإسناد الأخير الكائن المشار إليه. لم يُنفّذ المصدر بمفسر Ruby.

يشارك الإسناد المرجع ما لم تُنشأ نسخة

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

يحمي freeze كائنا واحدا لا رسمه كله

يمنع freeze التعديل المدعوم للمستقبل ولا يجمّد العناصر المشار إليها تكراريا. يجمّد المثال المصفوفة الخارجية ويغيّر نصا داخلها عمدا. توضح String.new قابلية النص للتعديل بدلا من الاعتماد على إعداد frozen-string-literal للملف. ولا يجعل اسم ثابت الكائن ثابتا بعمق؛ فالثوابت مراجع ولها أعراف إعادة إسناد. استخدم عناصر قيمية ثابتة أو ملكية أعمق صريحة عند الحاجة للّقطة. افصل التجميد والنسخ والتحقق في التنفيذ والوثائق.

ruby حاوية مجمدة بنص داخلي قابل للتعديل
inner = String.new('raw')
outer = [inner].freeze
inner << '-checked'
puts outer.first
puts outer.frozen?
الناتج المتوقع
raw-checked
true

المخرج المتوقع raw-checked ثم true. المصفوفة مجمدة وعنصرها قابل للتعديل. يشرح المثال التجميد السطحي، وليس نموذجا ثابتا موصى به، ولم يُنفذ.

لا يتحقق الإخراج والتسمية من القيمة

تكتب puts تمثيلا نصيا بسلوك أسطر، وتستخدم p الدالة inspect للتشخيص. يقيّم الاستيفاء في النص مزدوج الاقتباس التعبير الداخلي، ولأحادي الاقتباس قواعد مختلفة للاستيفاء والهروب. Symbols كائنات شبيهة بالأسماء وتختلف عن النصوص، وهو مهم لمفاتيح Hash. افصل الرموز الآلية عن العرض وأظهر الوحدات في الأسماء. لا يثبت طبع تسمية معقولة معرفا أو إذنا أو سجلا خارجيا. ابدأ بقيّم حتمية محلية قبل المدخل والملفات والتزامن ذي الإخفاقات الإضافية.

الأخطاء الشائعة وإصلاحها

يختلف ناتج قسمة سالب عن البتر المتوقع.

لماذا يحدث؟
اختلط تقريب القسمة الصحيحة في Ruby بقاعدة لغة أخرى.
كيف تصلحه؟
اختر العملية العددية وسياسة التقريب صراحة.
كيف تتجنب تكراره؟
أدرج حالات سالبة غير قابلة للقسمة الكاملة.

يغير تعديل نص قيمة أخرى ظاهريا.

لماذا يحدث؟
يشير المتغيران إلى الكائن القابل للتعديل نفسه.
كيف تصلحه؟
استخدم نسخة مقصودة أو احصر التعديل عند مالك.
كيف تتجنب تكراره؟
راجع مشاركة المراجع قبل الوعد باستقلال الحالة.

يتغير كائن داخل مصفوفة مجمدة.

لماذا يحدث؟
اختلط التجميد السطحي بالثبات التكراري.
كيف تصلحه؟
اختر عناصر ثابتة أو سياسة لقطة أعمق موثقة.
كيف تتجنب تكراره؟
افحص كل مستوى قابل للتعديل يكشفه العقد.

اختبر فهمك

1. توقّع -9 / 2 و-9.fdiv(2). لماذا لا ينتج تحويل نتيجة الأولى لاحقا نتيجة الثانية؟

اعرض الحل المشروح

الناتج الصحيح -5 والعائم -4.5. طبقت القسمة الصحيحة التقريب الأدنى، فينتج تحويل -5 لاحقا -5.0 ولا يستعيد الكسر. اختر دلالة الحساب قبل العرض ووثّق معالجة الباقي.

2. هل يجعل إسناد مصفوفة أرشيف لثابت نصوصها الداخلية مستقلة عن المستدعي؟

اعرض الحل المشروح

لا. الثابت ربط آخر بكائن، وحتى تجميد المصفوفة يترك نصوصا داخلية قابلة للتعديل ومشتركة. حدّد نسخا وملكية يلائمان النموذج. إذا لزمت قيم مستقلة ثابتة فتحقق منها وابنها صراحة، ولا تعتمد على عرف التسمية.

أهم ما تعلمته

  • روابط Ruby وتعديل الكائن والنسخ والتجميد آليات مختلفة.
  • المخرج المحلل ليس نتيجة Ruby منفذة.

المراجع الرسمية