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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط
ط
سطر 1: سطر 1:
 
{{DISPLAYTITLE:الصنف <code>Exception</code> في روبي}}
 
{{DISPLAYTITLE:الصنف <code>Exception</code> في روبي}}
تُستخدَم الكائنات السليلة من الصنف <code>Exception</code> للتواصل بين التّابع <code>Kernel.raise</code> وتصريحات <code>rescue</code> في الكتل (blocks) من الشكل begin ... end. تَحمل كائنات الصنف <code>Exception</code> معلوماتٍ عن الاستثناء المَرمي – نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية. قد تضيف الأصناف الفرعية من الصنف <code>Exception</code> معلوماتٍ إضافيّةٍ مثل <code>[[Ruby/NameError/name|NameError.name]]</code>.
+
 
 +
تُستخدَم الكائنات السليلة من الصنف <code>Exception</code> للتواصل بين التّابع <code>Kernel.raise</code> وتصريحات <code>rescue</code> في الكتل (blocks) من الشكل <code>begin ... end</code>. تَحمل كائنات الصنف <code>Exception</code> معلوماتٍ عن الاستثناء المَرمي – نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية. قد تضيف الأصناف الفرعية من الصنف <code>Exception</code> معلوماتٍ إضافيّةٍ مثل <code>[[Ruby/NameError/name|NameError.name]]</code>.
  
 
قد تُنشِئ البرامج أصنافًا فرعيّةً (subclasses) من الصنف <code>Exception</code>، تكون عادةً <code>StandardError</code> أو <code>RuntimeError</code>، لتوفير أصنافٍ مخصصّةٍ وإضافة معلوماتٍ إضافية. ألقِ نظرةً على قائمة الأصناف الفرعية في الأسفل من أجل قيم <code>raise</code> و <code>rescue</code> الافتراضية .
 
قد تُنشِئ البرامج أصنافًا فرعيّةً (subclasses) من الصنف <code>Exception</code>، تكون عادةً <code>StandardError</code> أو <code>RuntimeError</code>، لتوفير أصنافٍ مخصصّةٍ وإضافة معلوماتٍ إضافية. ألقِ نظرةً على قائمة الأصناف الفرعية في الأسفل من أجل قيم <code>raise</code> و <code>rescue</code> الافتراضية .
  
عندما يُرمى استثناءٌ ولكن لم يُتعامل معه بعد (في الكتل rescue، و ensure، و at_exit، و END)، يحتوي المتغيّر العام ‎ <code>$!</code>‎ على الاستثناء الحالي، بينما يحتوي ‎ <code>$@‎</code>على مصفوفة التتبع المعاكس (backtrace) للاستثناء الحالي.
+
عندما يُرمى استثناءٌ ولكن لم يُتعامل معه بعد (في الكتل <code>rescue</code>، و <code>ensure</code>، و <code>at_exit</code>، و <code>END</code>)، يحتوي المتغيّر العام ‎ <code>$!</code>‎ على الاستثناء الحالي، بينما يحتوي ‎ <code>$@‎</code>على مصفوفة التتبع المعاكس (backtrace) للاستثناء الحالي.
  
 
يُستحسن أن تمتلك المكتبة صنفًا فرعيًّا واحدًا إما <code>StandardError</code> أو <code>RuntimeError</code> وأن تمتلك أنواع استثناءات محددة ترث منه . هذا يسمح للمستخدم بإنقاذ الاستثناء ذي النوع العام (generic exception) وبالتالي إمساك (catch) كل الاستثناءات التي قد ترميها المكتبة حتى إذا أضافت الإصدارات المستقبلية للمكتبة أصنافًا فرعيّةً جديدةً للصنف <code>Exception</code>.
 
يُستحسن أن تمتلك المكتبة صنفًا فرعيًّا واحدًا إما <code>StandardError</code> أو <code>RuntimeError</code> وأن تمتلك أنواع استثناءات محددة ترث منه . هذا يسمح للمستخدم بإنقاذ الاستثناء ذي النوع العام (generic exception) وبالتالي إمساك (catch) كل الاستثناءات التي قد ترميها المكتبة حتى إذا أضافت الإصدارات المستقبلية للمكتبة أصنافًا فرعيّةً جديدةً للصنف <code>Exception</code>.
سطر 26: سطر 27:
  
  
</syntaxhighlight>للتعامل مع الصنفين الفرعيِّين <code>WidgetError</code> <code>وFrobError</code> يمكن لمستخدم المكتبة تنفيذ <code>rescue</code> على <code>MyLibrary::Error</code>.
+
</syntaxhighlight>للتعامل مع الصنفين الفرعيِّين <code>WidgetError</code> و <code>FrobError</code> يمكن لمستخدم المكتبة تنفيذ <code>rescue</code> على <code>MyLibrary::Error</code>.
  
 
الأصناف الفرعيّة المضمّنة في الصنف <code>Exception</code> هي:
 
الأصناف الفرعيّة المضمّنة في الصنف <code>Exception</code> هي:
* NoMemoryError
+
* <code>NoMemoryError</code>
* ScriptError
+
* <code>ScriptError</code>
** LoadError
+
** <code>LoadError</code>
** NotImplementedError
+
** <code>NotImplementedError</code>
** SyntaxError
+
** <code>SyntaxError</code>
* SecurityError
+
* <code>SecurityError</code>
* SignalException
+
* <code>SignalException</code>
** Interrupt
+
** <code>Interrupt</code>
* StandardError – default for rescue
+
* <code>StandardError – default for rescue</code>
** ArgumentError
+
** <code>ArgumentError</code>
*** UncaughtThrowError
+
*** <code>UncaughtThrowError</code>
** EncodingError
+
** <code>EncodingError</code>
** FiberError
+
** <code>FiberError</code>
** IOError
+
** <code>IOError</code>
*** EOFError
+
*** <code>EOFError</code>
** IndexError
+
** <code>IndexError</code>
*** KeyError
+
*** <code>KeyError</code>
*** StopIteration
+
*** <code>StopIteration</code>
** LocalJumpError
+
** <code>LocalJumpError</code>
** NameError
+
** <code>NameError</code>
*** NoMethodError
+
*** <code>NoMethodError</code>
** RangeError
+
** <code>RangeError</code>
*** FloatDomainError
+
*** <code>FloatDomainError</code>
** RegexpError
+
** <code>RegexpError</code>
** RuntimeError – default for raise
+
** <code>RuntimeError – default for raise</code>
*** FrozenError
+
*** <code>FrozenError</code>
** SystemCallError
+
** <code>SystemCallError</code>
*** Errno::*
+
*** <code>Errno::*</code>
** ThreadError
+
** <code>ThreadError</code>
** TypeError
+
** <code>TypeError</code>
** ZeroDivisionError
+
** <code>ZeroDivisionError</code>
* SystemExit
+
* <code>SystemExit</code>
* SystemStackError
+
* <code>SystemStackError</code>
* fatal – impossible to rescue
+
* <code>fatal – impossible to rescue</code>
  
 
== توابع الصنف العامة (Public Class Methods) ==
 
== توابع الصنف العامة (Public Class Methods) ==
سطر 77: سطر 78:
 
== توابع الكائن العامة (Public Instance Methods) ==
 
== توابع الكائن العامة (Public Instance Methods) ==
  
=== <code>[[Ruby/Exception/3D-3D|==]]</code> ===
+
=== المعامل [[Ruby/Exception/3D-3D|<code rel="mw:WikiLink" href="Ruby/Exception/3D-3D" title="Ruby/Exception/3D-3D">==</code>]] ===
 
يتحقق المعامل <code>==</code> من تساوي كائني استثناء مع بعضهما بعضًا.
 
يتحقق المعامل <code>==</code> من تساوي كائني استثناء مع بعضهما بعضًا.
  

مراجعة 13:24، 15 أكتوبر 2018


تُستخدَم الكائنات السليلة من الصنف Exception للتواصل بين التّابع Kernel.raise وتصريحات rescue في الكتل (blocks) من الشكل begin ... end. تَحمل كائنات الصنف Exception معلوماتٍ عن الاستثناء المَرمي – نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية. قد تضيف الأصناف الفرعية من الصنف Exception معلوماتٍ إضافيّةٍ مثل NameError.name.

قد تُنشِئ البرامج أصنافًا فرعيّةً (subclasses) من الصنف Exception، تكون عادةً StandardError أو RuntimeError، لتوفير أصنافٍ مخصصّةٍ وإضافة معلوماتٍ إضافية. ألقِ نظرةً على قائمة الأصناف الفرعية في الأسفل من أجل قيم raise و rescue الافتراضية .

عندما يُرمى استثناءٌ ولكن لم يُتعامل معه بعد (في الكتل rescue، و ensure، و at_exit، و END)، يحتوي المتغيّر العام ‎ $!‎ على الاستثناء الحالي، بينما يحتوي ‎ $@‎على مصفوفة التتبع المعاكس (backtrace) للاستثناء الحالي.

يُستحسن أن تمتلك المكتبة صنفًا فرعيًّا واحدًا إما StandardError أو RuntimeError وأن تمتلك أنواع استثناءات محددة ترث منه . هذا يسمح للمستخدم بإنقاذ الاستثناء ذي النوع العام (generic exception) وبالتالي إمساك (catch) كل الاستثناءات التي قد ترميها المكتبة حتى إذا أضافت الإصدارات المستقبلية للمكتبة أصنافًا فرعيّةً جديدةً للصنف Exception.

ألقٍ نظرة على المثال التالي:

class MyLibrary

 class Error < RuntimeError

 end

 class WidgetError < Error

 end

 class FrobError < Error

 end

end

للتعامل مع الصنفين الفرعيِّين WidgetError و FrobError يمكن لمستخدم المكتبة تنفيذ rescue على MyLibrary::Error.

الأصناف الفرعيّة المضمّنة في الصنف Exception هي:

  • NoMemoryError
  • ScriptError
    • LoadError
    • NotImplementedError
    • SyntaxError
  • SecurityError
  • SignalException
    • Interrupt
  • StandardError – default for rescue
    • ArgumentError
      • UncaughtThrowError
    • EncodingError
    • FiberError
    • IOError
      • EOFError
    • IndexError
      • KeyError
      • StopIteration
    • LocalJumpError
    • NameError
      • NoMethodError
    • RangeError
      • FloatDomainError
    • RegexpError
    • RuntimeError – default for raise
      • FrozenError
    • SystemCallError
      • Errno::*
    • ThreadError
    • TypeError
    • ZeroDivisionError
  • SystemExit
  • SystemStackError
  • fatal – impossible to rescue

توابع الصنف العامة (Public Class Methods)

exception

يُعيد التّابع exception المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى string.to_str.

new

يُنشئ التّابع new كائنًا جديدًا من النّوع Exception، ويمرِّر رسالةً اختياريًّا إليه.

?to_tty

يتحقّق التّابع ?to_tty فيما إذا كانت رسائل الاستثناء ستُرسل إلى الطرفية tty.

توابع الكائن العامة (Public Instance Methods)

المعامل ==

يتحقق المعامل == من تساوي كائني استثناء مع بعضهما بعضًا.

backtrace

يُعيد التّابع backtrace أيَّ تتبّعٍ عكسيٍّ (backtrace) مرتبطٍ بالاستثناء.

backtrace_locations

يُعيد التّابع backtrace_locations أي تتبع عكسي (backtrace) مرتبط بالاستثناء. هذا التّابع شبيه للتّابع backtrace، ولكن backtrace هو مصفوفة من Thread::Backtrace::Location.

cause

يُعيد التّابع cause الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء.

exception

يُعيد التّابع exception المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى string.to_str.

full_message

يُعيد التّابع full_message سلسلةً نصيةً منسّقةً من الاستثناء.

inspect

يُعيد التّابع inspect اسم صنف الاستثناء ورسالته.

message

يُعيد التّابع message ناتج استدعاء التّابع exception.to_s. ويُعيد هذا عادةً رسالة الاستثناء أو اسمه.

set_backtrace

يضبط التّابع set_backtrace معلومات المصفوفة backtrace الخاصة بكائن الاستثناء.

to_s

يُعيد التّابع to_s رسالة الاستثناء (أو اسم الاستثناء إذا لم يتم تعيين أي رسالة).

مصادر