إستفسار حول initialization section ؟
#1
Shocked 
السلام عليكم ورحمة الله تعالى وبركاته

لم افهم طريقة عمل initialization section التي نضعها في قسم implementation, او بصيغة اخرى متى يتم تنفيذ التعليمات الموجودة في قسم initialization ؟

بارك الله فيكم
الرد
#2
وعليكم السلام ورحمة الله
  • Initialization داخل اليونيت ليست تابعة لقسم Implementation.
  • implementation تنتهي عند وجود كلمة initialization أو اذا لم توجد عند end التابعة لليونيت.
  • initialization و finalization الاثنان اختياريتان, وتاتي بعد implementation.
الكود المكتوب بعد initialization هو أول شيء يقوم بتنفيذه البرنامج, ويقوم بذلك اتباعا لترتيب ذكر استخدام اليونيت, مثال لأقرب لك:
لدينا برنامج console, الملف الرئيسي هو Project1.dpr, ومعه ثلاث وحدات Unit1 و Unit2 و Unit3, وكل يونيت تحتوي على initialization وبها كود معين.

Project1.dpr يكون هكذا:
PHP كود :
program Project1;

uses
  Unit1 in 
'Unit1.pas',
  Unit2 in 'Unit2.pas',
  Unit3 in 'Unit3.pas'System.SysUtils;

begin
  writeln
('Hello from main method');
  readln;
end

وفي Unit1:
PHP كود :
unit Unit1;

interface

uses
  Unit3
;

implementation

initialization

writeln
('Unit1 is initialized!');

end

واليونيت 2 و 3 لا تستخدمان يونيت خارجية, وتحتويان على writeln في قسم initialization.

الآن, مسار التنفيذ يكون كالتالي:
  • يبدأ بأول يونيت مذكورة في uses, ثم يذهب الى تلك اليونيت وينظر في uses التابعة لتلك اليونيت, في مثالنا, يبدأ بUnit1.
  • في uses التابعة ل Unit1 يوجد استخدام لUnit3.
  • الآن يذهب الى Unit3 ينظر في uses, في هذه الحالة لا يوجد استخدام ليونيت خارجية, الآن ينفذ الكود الموجود في قسم initialization التابع لها إن وجد.
  • يرجع الى Unit1, لا يجد ذكر ليونيت اخرى في uses بعد Unit3, بعدها يقوم بتنفيذ الكود الموجود في initialization إن وجد (في مثالنا يوجد initialization لكل وحدة) ثم يعود للملف الرئيسي.
  • الآن هو في uses التابعة للملف الرئيسي, وهو Project1.dpr, يذهب الى اليونيت التي بعدها وهي Unit2, ثم يقوم بتنفيذ الكود الذي في initialization, ويرجع للملف الرئيسي طالما ليس هناك ذكر ليونيت خارجية داخلها.
  • الآن في الملف الرئيسي, يذهب لليونيت التي بعدها وهي Unit3, ولكنه لن يقوم بإعادة تنفيذ ما فيها, لأنه قام بذلك من خلال Unit1, يعني عندما بدأ باليونيت 1, وجد ذكر لليونيت 3, ذهب اليها وقام بذلك, ثم عاد.
أعذرني ربما أطلت, والشرح ليس مفصل جيدا, دائما ما أنصح بالرجوع الى التوثيق.

أنظر الملف المرفق.


الملفات المرفقة
.zip   Initialization.zip (الحجم : 1.19 ك ب / التحميلات : 6)
[-] كل من 4 users say قال شكرا ل sofiane201 على المشاركة المفيدة
  • MasteranyOne, h-farid, larbiparadox, zouaidahmed
الرد
#3
بارك الله فيك أخي سفيان, شرحك كان واضح لي من التوثيق الخاص بالدلفي (أخي انا دائما ابحث في كل المصادر وعندما لا افهم لضعف اللغة عندي اقوم بكتابتها هنا)
جزاك الله خيرا
[-] كل من 1 user says قال شكرا ل MasteranyOne على المشاركة المفيدة
  • sofiane201
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم