السلام عليكم
هل يمكن للـ Function ان نعيد بها اكثر من قيمة
في الدلفي يمكن للـ Function ان تعيد Record او Object او Varible و بالتالي يمكننا ان نجعل الـ Function ان تعيد لنا Record يحتوي على سلسلة من المتغيرات او Object يحتوي على العديد من الحقول Fields او نستخدم تمرير البرامترات بالمرجع ..
1- اعادة اكثر من قيمة باستخدام السجلات Records
اولا نقوم بتعيرف بنية الـ Record في الـ Type Section
نقوم بانشاء Function حيث الناتج سيكون Record
الدالة ستكون كاتالي نمرر لها الإسم و اللقب مفصول بينهما بفراغ ' ' تقوم الدالة بالحصول على الإسم و اللقب..
للإستخدام نقوم بتعريف متغير من نمط الـ Record ثم نستدعي الدالة
2- اعادة اكثر من قيمة باستخدام الاغراض Objects
نقوم بتعريف هيكلية الكلاس ملاحظة الذي تراه لا يتبع القواعد السليمة للـ OOP فقط لتوضيح فكرة اعادة اكثر من قيمة باستخدام Objects
الـ Function الخاصة بنا
و إستدعاء الـ Function
هل يفضل استخدام الـ Records او Classes و ما الفرق بنهما
عندما تقوم بتمرير Record بين Functions في الحقيقة انت تنسخ البيانات من مكان الى مكان في الذاكرة بينما عندما تمرر Class فانت تمرر مؤشر Pointer لذلك اذا كان Record صغير لا ضير في ذلك في حالة كان الهيكل كبير الحجم يفضل استخدام الكلاسات
3- اعادة اكثر من قيمة باستخدام تمرير البرامترات بالمرجع
ProtoType الـ Function نستخدم ناتج الإفتراضي للـ Function لإعادة FirstName و نستخدم التمرير بالمرجع لاعادة LastName
الـ Function
و الإستدعاء
بالتوفيف و السلام عليكم
هل يمكن للـ Function ان نعيد بها اكثر من قيمة
في الدلفي يمكن للـ Function ان تعيد Record او Object او Varible و بالتالي يمكننا ان نجعل الـ Function ان تعيد لنا Record يحتوي على سلسلة من المتغيرات او Object يحتوي على العديد من الحقول Fields او نستخدم تمرير البرامترات بالمرجع ..
1- اعادة اكثر من قيمة باستخدام السجلات Records
اولا نقوم بتعيرف بنية الـ Record في الـ Type Section
PHP كود :
type
TPerson = record
FirstName: string;
LastName: string;
end;
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
function Ident(AFullName: string): TPerson;
public
{ Public declarations }
end;
نقوم بانشاء Function حيث الناتج سيكون Record
PHP كود :
function Ident(AFullName: string): TPerson;
PHP كود :
function TForm1.Ident(AFullName: string): TPerson;
var
StringList: TStringList;
begin
StringList:= TStringList.Create;
try
StringList.DelimitedText := AFullName;
Result.FirstName := StringList[0];
Result.LastName := StringList[1];
finally
StringList.Free;
end;
end;
للإستخدام نقوم بتعريف متغير من نمط الـ Record ثم نستدعي الدالة
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
Person: TPerson;
begin
Person := Ident('FATEH S');
ShowMessage(Person.FirstName);
ShowMessage(Person.LastName);
end;
2- اعادة اكثر من قيمة باستخدام الاغراض Objects
نقوم بتعريف هيكلية الكلاس ملاحظة الذي تراه لا يتبع القواعد السليمة للـ OOP فقط لتوضيح فكرة اعادة اكثر من قيمة باستخدام Objects
PHP كود :
TPerson = class
private
FFirstName: string;
FLastName: string;
end;
الـ Function الخاصة بنا
PHP كود :
function TForm1.Ident(AFullName: string): TPerson;
var
StringList: TStringList;
begin
Result := TPerson.Create;
StringList:= TStringList.Create;
try
StringList.DelimitedText := AFullName;
Result.FFirstName := StringList[0];
Result.FLastName := StringList[1];
finally
StringList.Free;
end;
end;
و إستدعاء الـ Function
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
Person: TPerson;
begin
Person:= Ident('FATEH S');
try
ShowMessage(Person.FFirstName);
ShowMessage(Person.FLastName);
finally
Person.Free;
end;
end;
هل يفضل استخدام الـ Records او Classes و ما الفرق بنهما
عندما تقوم بتمرير Record بين Functions في الحقيقة انت تنسخ البيانات من مكان الى مكان في الذاكرة بينما عندما تمرر Class فانت تمرر مؤشر Pointer لذلك اذا كان Record صغير لا ضير في ذلك في حالة كان الهيكل كبير الحجم يفضل استخدام الكلاسات
3- اعادة اكثر من قيمة باستخدام تمرير البرامترات بالمرجع
ProtoType الـ Function نستخدم ناتج الإفتراضي للـ Function لإعادة FirstName و نستخدم التمرير بالمرجع لاعادة LastName
PHP كود :
function Ident(AFullName: string; var ALastName: string): string;
الـ Function
PHP كود :
function TForm1.Ident(AFullName: string; var ALastName: string): string;
var
StringList: TStringList;
begin
StringList:= TStringList.Create;
try
StringList.DelimitedText := AFullName;
Result := StringList[0];
ALastName := StringList[1];
finally
StringList.Free;
end;
end;
و الإستدعاء
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
LastName: string;
FirstName: string;
begin
FirstName:= Ident('FATEH S', LastName);
ShowMessage(FirstName);
ShowMessage(LastName);
end;
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)
