المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ما الفائدة من استخدام المحدد out في الاجرائية


abdelmalek
04-09-2010, 02:48 PM
السلام عليكم ورحمة الله وبركاته
ما الفائدة من استخدام المحدد out في الاجرائية ؟
وما الفرق بين المحدد out و var ؟

بارك الله فيكم وزادكم علما
في امان الله
بالتوفيق

أبو محمد اللحياني
04-09-2010, 04:16 PM
لعلك تقصد تمرير المتغيرات كبرامترات للتابع .

var عكس const

var : تمرير المتغير بالمرجع ، يعني يحق للتابع الكتابة على قيمته أي أن قيمته خارج التابع ستتغير.

أما const فهي تمرير بالقيمة تعني أن القيمة في البرامترات ثابت لا يتغير.

http://www.delphibasics.co.uk/RTL.asp?Name=Var&ExpandCode1=Yes


أما بالنسبة لـ Out فيه تستخخدم عند التعامل مع عناصر ActiveX
http://www.delphibasics.co.uk/RTL.asp?Name=Out

وليس لي الخبرة في الخوض في مجاهيل COM

kachwahed
04-09-2010, 04:19 PM
وعليكم السلام ورحمة الله وبركاته
عندما تمرر COM Object من خلال تابع أو إجرائية استخدم التوجيه out لإلغاء القيمة الابتدائية لهذا الغرض ومستعملا هذا المتغير كمجرد حاوي للقيمة المرجعة
بخلاف التوجيه var الذي يأخذ بعين الاعتبار القيم الابتدائية (Initialize value)

مثال على السريع، لاحظ:
procedure testout(out s: string);
begin
ShowMessage(s);
s := 'out param!';
end;

procedure testvar(var v: string);
begin
ShowMessage(v);
v := 'var param!';
end;

procedure TForm1.FormCreate(Sender: TObject);
var
str: string;
begin
str := 'initialize value';
testout(str);
ShowMessage(str);

str := 'initialize value';
testvar(str);
ShowMessage(str);
end;

التمرير بـ out يستخدم عادة مع COM Object و Interface...

سؤال: هل بحثت في الـ Help :)؟

abdelmalek
04-09-2010, 05:06 PM
بارك الله فيكم اخواني kachwahed و أبو محمد اللحياني وجزاكم الله خيرا

على حسب ما فهمت من المثال انه لا يمكن ادخال قيمة الى

testout(str);

بينما يمكن اخراجها

وبعد تحليل عمل هدا المحدد (out) فهمت منه مايلي :

procedure testout(out s: string);
begin
ShowMessage(s);
s := 'out param!';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
str: string;
begin
str := 'initialize value';
testout(str);
ShowMessage(str);
end;

ان المتغير s لا يشير ولا ينسخ قيمة str فيه

بينما تنسخ قيمة s و توضع في str

هل هدا صحيح ام هناك تحليل اخر

بارك الله فيكم وزادكم علما

بالتوفيق

TF6M
04-09-2010, 06:27 PM
السلام عليكم
مثال توضيحي من هنا (http://www.delphibasics.co.uk/RTL.asp?Name=Out&ExpandCode1=Yes):
// Simple routine illustrating 3 types of parameter handling
// value1 : Input value only
// value2 : Output value only
// value3 : Input and output value
procedure TForm1.ThreeParms( value1: Integer;
Out value2: Integer;
var value3: Integer);
begin
// Add value1 to value 3 as the value2 output
value2 := value1 + value3;

// Multiply value1 by value3 to give value3 output
value3 := value1 * value3;
end;
بالتوفيق,,