Author Topic: التكرار  (Read 607 times)

Ahmed Youssef

  • Helping Freak
  • Administrator
  • Active Member
  • *****
  • Posts: 242
    • View Profile
    • WWW
    • Email
التكرار
« on: October 26, 2008, 05:20:27 PM »
التكرار


Code: [Select]
times
times تستخدم فى تكرار block من ال code اكثر من مرة
5.times {
  puts "Hello!"
}

  
هنا بدل مانكتب
Code: [Select]
puts “Hello!”
puts “Hello!”
puts “Hello!”
puts “Hello!”
puts “Hello!”

استخدمنا times

تقدر تستخدمها بالصورة هذه:
Code: [Select]
5.times do 
  puts "Hello!"
end

بإستخدام do .. end

upto/downto
Code: [Select]
1.upto(4){
  puts "Hello!"
}

5.downto(0){
  puts "Hello!"
}

  مشابهه لنفس الفكرة! من ال 1 حتى ال 4 نفذ الBlock التالى وزيد ال 1
والثانية من 5 لحد 0 نفذ ال block التالى ونقص 1

هل لاحظت إننا قلنا زيد ونقص بدون معرفة ما نزيده وما نطرحه ؟
بكل بساطة هو iterator وهو متغير يتحدد خلال loop

لاحظ التالى مثلا
Code: [Select]
5.times {|i|
  puts "I: " << i.to_s
}


الخرج:
Code: [Select]
I: 0
I: 1
I: 2
I: 3
I: 4

هل لاحظت إن ال i قيمتها كانت فى البداية 0 وفى كل مرة يتنفذ ال Block تزيد 1 ؟
تستطيع أن تكتبها كالتالى
Code: [Select]
5.times do|i|
  puts "I: " << i.to_s
end


جميل انت الآن فهمت اللعبة، دعنا نشوف ال upto وال downto ثانية:
Code: [Select]
0.upto(5) do |i|
  puts "I: " << i.to_s
end

الخرج سيكون كالتالي:
Code: [Select]
I: 0
I: 1
I: 2
I: 3
I: 4
I: 5

تستطيع أن تكتبها على الصورة التالية بإستخدام ال { }
Code: [Select]
0.upto(5) {|i|
  puts "I: " << i.to_s
}

لاحظ إن ال iterator قيمته هنا تبدأ من ال 0 وكل مرة تزيد قيمته بمقدار 1 لحد ماقيمته = 5 وينتهى تنفيذ ال Block
Code: [Select]
5.downto(0) { |i|
  puts "I: " << i.to_s
}

الخرج سيكون كالتالى
Code: [Select]
I: 5
I: 4
I: 3
I: 2
I: 1
I: 0

لاحظ إن ال iterator قيمته هنا بدأت من ال 5 لحد ال 0 وفى كل مرة ينقص قيمته بمقدار 1
تستطيع أن تستخدمها كالتالى ب do.. end
Code: [Select]
5.downto(0) do |i|
  puts "I: " << i.to_s
end

while
جميل ، أشهر حلقة تكرار  فى معظم اللغات هى حلقة التكرار  while
Code: [Select]
loopCounter=0 #set

while loopCounter<5 #condition
        puts “Loop Counter: # “ << loopCounter.to_s
        loopCounter += 1 #increment
end

طالما ال loopCounter اقل من 5 (الشرط)
نفذ الBlock التالى
Code: [Select]
        puts “Loop Counter: # “ << loopCounter.to_s
        loopCounter += 1

ونزيد قيمة ال counter بمقدار 1 وهكذا لحد ماتصل قيمته إلى 5 ويخرج من ال loop
Code: [Select]
الخرج:
LoopCounter: # 0
LoopCounter: # 1
LoopCounter: # 2
LoopCounter: # 3
LoopCounter: # 4

بنفس النظام نستطيع أن نعملها تنازلى
Code: [Select]
loopCounter=5 #set
while loopCounter>0
   puts "LoopCounter: # " << loopCounter.to_s
   loopCounter -= 1 #decrement the counter
end

الخرج:
Code: [Select]
LoopCounter: # 5
LoopCounter: # 4
LoopCounter: # 3
LoopCounter: # 2
LoopCounter: # 1

مثال أخير
Code: [Select]
loopCounter=0
while loopCounter<10
  puts "LoopCounter: # " << loopCounter.to_s
  loopCounter += 2 #increment the counter
end


الخرج هنا لزيادة مقدارها 2
Code: [Select]
LoopCounter: # 0
LoopCounter: # 2
LoopCounter: # 4
LoopCounter: # 6
LoopCounter: # 8


مثال:
Code: [Select]
loopCounter=10 #set
while loopCounter>0
   puts "LoopCounter: # " << loopCounter.to_s
   loopCounter -= 2 #decrement the counter
end


الخرج:
Code: [Select]
LoopCounter: # 10
LoopCounter: # 8
LoopCounter: # 6
LoopCounter: # 4
LoopCounter: # 2



for
حلقة  تكرار for  هى أحد أشهر حلقات التكرار  فى معظم اللغات
وهنا فى Ruby هى اقرب لحلقة التكرار foreach  
مثال:
Code: [Select]
ary=[1, 2, 3, 4, 5]
for el in ary
  puts "el: " << el.to_s
end


لاحظ
for .. in .. end

بالعربى لكل عنصر فى ال ary نفذ الBlock  التالى
تستطيع أن تستخدمها فى while كالتالى
Code: [Select]
ary=[1, 2, 3, 4, 5]

index=0
while index<ary.length
  puts "el: " << ary[index].to_s
  index += 1
end


صف Array يقدم طريقة اخرى لfor
Code: [Select]
ary=[1, 2, 3, 4, 5]


ary.each{|el|
  puts "el: " << el.to_s
}

وهى بإستخدام iterator ايضا
الخرج:
Code: [Select]
el: 1
el: 2
el: 3
el: 4
el: 5

وتستطيع أن تستخدمها كالتالى ب do.. end
Code: [Select]
ary.each do |el|
  puts "el: " << el.to_s
end


until

until هى حلقة تكرار غير موجودة بكثرة فى معظم اللغات
Code: [Select]
lc=0 #set

until lc>5 #condition
  puts "lc: " << lc.to_s
  lc += 1 #increment
end


الخرج:
Code: [Select]
lc: 0
lc: 1
lc: 2
lc: 3
lc: 4
lc: 5

لاحظ إن حلقة التكرار معناها التالي:
حتى تصبح ال lc > من ال 5 نفذ البلوك التالى
Code: [Select]
  puts "lc: " << lc.to_s
  lc += 1 #increment



Logged

Life is just a chance to grow a soul. - A. Powell
Weblog: http://ahmedyoussef.wordpress.com/