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

مشاهدة النسخة كاملة : الحلقة التكرارية ForLoopRamblings For...in


kachwahed
08-07-2009, 08:34 PM
السلام عليكم
كلنا يعرف الحلقة التكرارية for..to..do، فمثلا هذه الحلقة تقوم بتفحص جدول يحتوي على أربعة ألوان وتقارنه بما كتب في خانة النص Edit1 مثال:
var
vColor: array[1..4] of String = ('Red', 'Blue', 'Green', 'White');

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := Low(vColor) to High(vcolor) do
begin
if vColor[i] = Edit1.Text then
begin
ShowMessage('Valid color');
Exit;
end;
end;
ShowMessage('Invalid color!');
end;
انطلاقا من النسخة Delphi 2006 يمكن كتابة نفس الكود السابق بشكل آخر:

var
vColor: array[1..4] of String = ('Red', 'Blue', 'Green', 'White');

procedure TForm1.Button1Click(Sender: TObject);
var
C: String;
begin
for C in vColor do
begin
if Edit1.Text = C then begin
ShowMessage('Valid color.');
Exit;
end;
end;
ShowMessage('Invalid color!');
end;
هذه الحلقة المتدرجة (Rambling loop) تعتبر أسهل من حيث القراءة والتفحص، كما أننا في هذه الطريقة لسنا بحاجة لمعرفة حجم الجدول (أعلى وأدنى قيمة)، وكما استعملنها مع جدول بقيم نصية (String) يمكن استعمالها مع أي جدول من قيم آخرى (integer, char...) بنفس الطريقة، ومع مكونات أخرى مثل TStringList و...
RamblingLoop كمثال يدل على أن لغة الدلفي لا تزال في تطور مستمر (خلافا لمن يظن أن لغة دلفي تنحصر في لغة الباسكال القديمة مضافا إليها بعض المكونات)، فضلا عن إضافات أخرى مثل الأقسام (أو الدوال أو الأنماط) المورثة (Generics Class/Function/Type) مثل:
type
TGenericType<AnyType> = class
FData: AnyType;
end;

وغيرها...، ولا تتحدث عن المكونات والأقسام والأنماط الجديدة، إضافة إلى التوافق (أو المواءمة Compatibility) و...و...
بالتوفيق.

Dr.MOT
09-07-2009, 03:50 PM
السلام عليكم ,,

أخي الكريم هل يمكن أن تعطي مثالا آخر ؟

وجزاك الله كل خير

me&delphi
11-07-2009, 12:05 AM
بارك الله فيك

دلفي في تطور ...يكفي فقط النظر الى البرامج التي صممت و لازالت تصمم بهده اللغة

kachwahed
11-07-2009, 11:42 AM
أخي الكريم هل يمكن أن تعطي مثالا آخر ؟

مثال مع TStrings: ضع في مشروع جديد مكونات: ListBox1 واكتب فيه مجموعة من الألوان مثلا، Edit1 للمقارنة، واكتب في حدث النقر على Button1 ما يلي:
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
for S in ListBox1.Items do
if Edit1.Text = S then begin
ShowMessage('Valid Color');
Exit;
end;
ShowMessage('Invalid Color!');
end;

TF6M
11-07-2009, 12:13 PM
السلام عليكم ,,
جميل جدا ... هكذا نختصر الكثير بارك الله فيك .

kachwahed
11-07-2009, 01:04 PM
الآن وظيفة منزلية :D
(قولوا لي منذ متى وأنت تعطينا وظائف :p)
إبحثوا جميعا عن Generics Class في Delphi2009 وما هي الفائدة منها وكيف استعمالها ؟؟؟

Dr.MOT
11-07-2009, 10:45 PM
مثال مع TStrings: ضع في مشروع جديد مكونات: ListBox1 واكتب فيه مجموعة من الألوان مثلا، Edit1 للمقارنة، واكتب في حدث النقر على Button1 ما يلي:
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
for S in ListBox1.Items do
if Edit1.Text = S then begin
ShowMessage('Valid Color');
Exit;
end;
ShowMessage('Invalid Color!');
end;

هل الكود الذي وضعت يكافئ :

procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
i : integer;
begin
for i := 0 to ListBox1.Items do
if Edit1.Text[i] = S then begin
ShowMessage('Valid Color');
Exit;
end;
ShowMessage('Invalid Color!');
end;

وآآسف جدا لأني اتعبتك معي ولكن حصل عندي التباس بسيط

والسلام عليكم

kachwahed
11-07-2009, 11:53 PM
وآآسف جدا لأني اتعبتك معي ولكن حصل عندي التباس بسيط
لا عليك أخي.

بل يكافئ هذا:
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 0 to ListBox1.Items.Count-1 do
if Edit1.Text = ListBox1.Items[i] then begin
ShowMessage('Valid Color');
Exit;
end;
ShowMessage('Invalid Color!');
end;
لا زلت انتظر Generics في Delphi 2009.

TF6M
12-07-2009, 05:41 AM
وجدت كتاب حول الموضوع ... لم أطالعه بعد ؟؟ .
في إنتظارك هههههه ,,

kachwahed
12-07-2009, 03:18 PM
وجدت كتاب حول الموضوع ... لم أطالعه بعد ؟؟ .
تقصد الكتاب الفرنسي من Developpez.com، صح؟

TF6M
12-07-2009, 05:33 PM
تقصد الكتاب الفرنسي من developpez.com، صح؟

100/100% نعم .... :d

Effector
13-07-2009, 11:08 PM
والأفضل هكذا ...
var
vColor: array[1..4] of String = ('Red', 'Blue', 'Green', 'White');

procedure TForm1.btn1Click(Sender: TObject);
var
C: String;
begin
for C in vColor do
begin
if Edt1.Text = C then
ShowMessage('Valid color.')
else
ShowMessage('Invalid color!');
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 0 to ListBox1.Items.Count-1 do
if Edit1.Text = ListBox1.Items[i] then
ShowMessage('Valid Color')
else
ShowMessage('Invalid Color!');
end

kachwahed
13-07-2009, 11:25 PM
والأفضل هكذا ...
كلا...،الأول أفضل، هذا فيه تكرار.
ما زلنا ننتظر حل الوظيفة :)

khiro.alg
22-08-2010, 11:55 PM
السلام عليكم
بارك الله فيك أخي كاش واحد على الموضوع الجميل والمفيد
أظن أنه يمكن إستعمال الطريقة داخل جملة If - مثلا لتفحص شيء داخل مصفوفة
أن أحد لم يحل الوضيفة فأفدنا أنت أخي :)
سلام