الحلقة التكرارية ForLoopRamblings For...in
#1
[COLOR="black"]السلام عليكم
كلنا يعرف الحلقة التكرارية for..to..do، فمثلا هذه الحلقة تقوم بتفحص جدول يحتوي على أربعة ألوان وتقارنه بما كتب في خانة النص Edit1 مثال:
PHP كود :
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 يمكن كتابة نفس الكود السابق بشكل آخر:

PHP كود :
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) مثل:
PHP كود :
type
  TGenericType
<AnyType> = class
    
FData: AnyType;
  
end; 
وغيرها...، ولا تتحدث عن المكونات والأقسام والأنماط الجديدة، إضافة إلى التوافق (أو المواءمة Compatibility) و...و...
بالتوفيق.[/COLOR]
الرد
#2
السلام عليكم ,,

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

وجزاك الله كل خير
شكوت إلى وكيع سوء حفظي ... فأرشدني إلى ترك المعاصي
وأخــبـرنـي بــأن الـعـلـم نـور ... ونـور الله لا يـهدى لـعـاصي
الرد
#3
بارك الله فيك

دلفي في تطور ...يكفي فقط النظر الى البرامج التي صممت و لازالت تصمم بهده اللغة
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#4
إقتباس :أخي الكريم هل يمكن أن تعطي مثالا آخر ؟

مثال مع TStrings: ضع في مشروع جديد مكونات: ListBox1 واكتب فيه مجموعة من الألوان مثلا، Edit1 للمقارنة، واكتب في حدث النقر على Button1 ما يلي:
PHP كود :
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; 
الرد
#5
السلام عليكم ,,
جميل جدا ... هكذا نختصر الكثير بارك الله فيك .
الرد
#6
الآن وظيفة منزلية Big Grin
(قولوا لي منذ متى وأنت تعطينا وظائف :p)
إبحثوا جميعا عن Generics Class في Delphi2009 وما هي الفائدة منها وكيف استعمالها ؟؟؟
الرد
#7
kachwahed كتب :

مثال مع TStrings: ضع في مشروع جديد مكونات: ListBox1 واكتب فيه مجموعة من الألوان مثلا، Edit1 للمقارنة، واكتب في حدث النقر على Button1 ما يلي:
PHP كود :
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; 

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

PHP كود :
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; 

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

والسلام عليكم
شكوت إلى وكيع سوء حفظي ... فأرشدني إلى ترك المعاصي
وأخــبـرنـي بــأن الـعـلـم نـور ... ونـور الله لا يـهدى لـعـاصي
الرد
#8
إقتباس :وآآسف جدا لأني اتعبتك معي ولكن حصل عندي التباس بسيط
لا عليك أخي.

بل يكافئ هذا:
PHP كود :
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.
الرد
#9
وجدت كتاب حول الموضوع ... لم أطالعه بعد ؟؟ .
في إنتظارك هههههه ,,
الرد
#10
إقتباس :وجدت كتاب حول الموضوع ... لم أطالعه بعد ؟؟ .
تقصد الكتاب الفرنسي من Developpez.com، صح؟
الرد


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


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