الفرق بين المراجعتين لصفحة: «Ruby/Exception»

من موسوعة حسوب
ط مراجعة وتدقيق.
طلا ملخص تعديل
 
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين)
سطر 1: سطر 1:
{{DISPLAYTITLE:الصنف <code>Exception</code> في روبي}}
{{DISPLAYTITLE:الصنف <code>Exception</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>.
تُستخدَم الكائنات السليلة من الصنف <code>Exception</code> للتواصل بين التّابع <code>[[Ruby/Kernel/raise|Kernel.raise]]</code> وتصريحات <code>rescue</code> في الكتل (blocks) من الشكل <code>[[Ruby/miscellaneous#BEGIN .D9.88 END|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> الافتراضية .
سطر 10: سطر 10:
ألقٍ نظرة على المثال التالي:<syntaxhighlight lang="ruby">
ألقٍ نظرة على المثال التالي:<syntaxhighlight lang="ruby">
class MyLibrary
class MyLibrary
  class Error < RuntimeError
  end


 class Error < RuntimeError
  class WidgetError < Error
  end


 end
  class FrobError < Error
 
  end
 class WidgetError < Error
 
 end
 
 class FrobError < Error
 
 end


end
end
سطر 67: سطر 63:


=== <code>[[Ruby/Exception/exception|exception]]</code> ===
=== <code>[[Ruby/Exception/exception|exception]]</code> ===
يُعيد التّابع <code>exception</code> المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>.
يُعيد المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>.


=== <code>[[Ruby/Exception/new|new]]</code> ===
=== <code>[[Ruby/Exception/new|new]]</code> ===
يُنشئ التّابع <code>new</code> كائنًا جديدًا من النّوع <code>Exception</code>، ويمرِّر رسالةً اختياريًّا إليه.
يُنشئ كائنًا جديدًا من النّوع <code>Exception</code>، ويمرِّر رسالةً اختياريًّا إليه.


=== <code>[[Ruby/Exception/to tty-3F|?to_tty]]</code> ===
=== <code>[[Ruby/Exception/to tty-3F|?to_tty]]</code> ===
يتحقّق التّابع <code>?to_tty</code> فيما إذا كانت رسائل الاستثناء ستُرسل إلى الطرفية <code>tty</code>.
يتحقّق فيما إذا كانت رسائل الاستثناء ستُرسل إلى الطرفية <code>tty</code>.


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


=== المعامل [[Ruby/Exception/3D-3D|<code rel="mw:WikiLink" href="Ruby/Exception/3D-3D" title="Ruby/Exception/3D-3D">==</code>]] ===
=== [[Ruby/Exception/3D-3D|<code rel="mw:WikiLink" title="Ruby/Exception/3D-3D" href="Ruby/Exception/3D-3D">==</code>]] ===
يتحقق المعامل <code>==</code> من تساوي كائني استثناء مع بعضهما بعضًا.
يتحقق من تساوي كائني استثناء مع بعضهما بعضًا.


=== <code>[[Ruby/Exception/backtrace|backtrace]]</code> ===
=== <code>[[Ruby/Exception/backtrace|backtrace]]</code> ===
يُعيد التّابع <code>backtrace</code> أيَّ تتبّعٍ عكسيٍّ (backtrace) مرتبطٍ بالاستثناء.
يُعيد أيَّ تتبّعٍ عكسيٍّ (backtrace) مرتبطٍ بالاستثناء.


=== <code>[[Ruby/Exception/backtrace locations|backtrace_locations]]</code> ===
=== <code>[[Ruby/Exception/backtrace locations|backtrace_locations]]</code> ===
يُعيد التّابع <code>backtrace_locations</code> أي تتبع عكسي (backtrace) مرتبط بالاستثناء. هذا التّابع شبيه للتّابع <code>backtrace</code>، ولكن <code>backtrace</code> هو مصفوفة من <code>Thread::Backtrace::Location</code>.
يُعيد أي تتبع عكسي (backtrace) مرتبط بالاستثناء. هذا التّابع شبيه للتّابع <code>backtrace</code>، ولكن <code>backtrace</code> هو مصفوفة من <code>Thread::Backtrace::Location</code>.


=== <code>[[Ruby/Exception/cause|cause]]</code> ===
=== <code>[[Ruby/Exception/cause|cause]]</code> ===
يُعيد التّابع <code>cause</code> الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء.
يُعيد الاستثناء السابق (!$) عندما يُرمى هذا الاستثناء.


=== [[Ruby/Exception/exception|<code>exception</code>]] ===
=== [[Ruby/Exception/exception|<code>exception</code>]] ===
يُعيد التّابع <code>exception</code> المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>.
يُعيد المُستقبل (receiver) إن لم يمرَّر إليه أي وسيط، أو إذا كان الوسيط الممرر إليه هو نفسه المُستقبل. خلاف ذلك، يُنشئ كائن استثناءٍ جديد (exception object) من الصنف نفسه على أنّه المستقبل، ولكن مع رسالةٍ مساوية إلى <code>[[Ruby/String/to str|string.to_str]]</code>.


=== <code>[[Ruby/Exception/full message|full_message]]</code> ===
=== <code>[[Ruby/Exception/full message|full_message]]</code> ===
يُعيد التّابع <code>full_message</code> سلسلةً نصيةً منسّقةً من الاستثناء.
يُعيد سلسلةً نصيةً منسّقةً من الاستثناء.


=== <code>[[Ruby/Exception/inspect|inspect]]</code> ===
=== <code>[[Ruby/Exception/inspect|inspect]]</code> ===
يُعيد التّابع <code>inspect</code> اسم صنف الاستثناء ورسالته.
يُعيد اسم صنف الاستثناء ورسالته.


=== <code>[[Ruby/Exception/message|message]]</code> ===
=== <code>[[Ruby/Exception/message|message]]</code> ===
يُعيد التّابع <code>message</code> ناتج استدعاء التّابع <code>[[Ruby/Exception/to s|exception.to_s]]</code>. ويُعيد هذا عادةً رسالة الاستثناء أو اسمه.
يُعيد ناتج استدعاء التّابع <code>[[Ruby/Exception/to s|exception.to_s]]</code>. ويُعيد هذا عادةً رسالة الاستثناء أو اسمه.


=== <code>[[Ruby/Exception/set backtrace|set_backtrace]]</code> ===
=== <code>[[Ruby/Exception/set backtrace|set_backtrace]]</code> ===
يضبط التّابع <code>set_backtrace</code> معلومات المصفوفة <code>backtrace</code> الخاصة بكائن الاستثناء.
يضبط معلومات المصفوفة <code>backtrace</code> الخاصة بكائن الاستثناء.


=== <code>[[Ruby/Exception/to s|to_s]]</code> ===
=== <code>[[Ruby/Exception/to s|to_s]]</code> ===
يُعيد التّابع <code>to_s</code> رسالة الاستثناء (أو اسم الاستثناء إذا لم يتم تعيين أي رسالة).
يُعيد رسالة الاستثناء (أو اسم الاستثناء إذا لم يتم تعيين أي رسالة).


== مصادر ==
== مصادر ==

المراجعة الحالية بتاريخ 13:04، 21 نوفمبر 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

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

new

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

?to_tty

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

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

==

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

backtrace

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

backtrace_locations

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

cause

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

exception

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

full_message

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

inspect

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

message

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

set_backtrace

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

to_s

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

مصادر