حلقة While
هذه مقالة غير مراجعة. (يوليو 2025) |

في معظم لغات برمجة الحاسوب، تُعد حلقة تكرار "while" إحدى تعبيرات تدفق التحكم ،إذ تُستخدم لتنفيذ الشيفرة بشكل متكرر بناءً على شرط منطقي معين.
ويمكن النظر إلى حلقة whileعلى أنها تعبير شرطي (if) تتكرر باستمرار طالما ظل الشرط محققًا.
ملخص
[عدل | عدل المصدر]يتكون حلقة while من كتلة من التعليمات و شرط أو تعبير منطقي [1] يتم تقييم هذا الشرط أو التعبير، وإذا كان صحيحًا ، [1] يتم تنفيذ التعليمات الموجودة داخل الكتلة بالكامل. تستمر هذه العملية في التكرار حتى يصبح الشرط أو التعبير باطلاً . نظرًا لأن حلقة while تقوم بفحص الشرط قبل تنفيذ الكتلة، فإن هذه البنية تُعرف غالبًا بـ الحلقة ذات الاختبار المسبق (pre-test loop). قارن ذلك مع حلقة do while، التي تختبر الشرط بعد تنفيذ الكتلة البرمجية.
على سبيل المثال، في اللغات C وJava وC# و [2] Objective-C وC++ (التي تستخدم نفس بناء الجملة في هذه الحالة)، فإن قطعة الكود التالية..
int x = 0;
while (x < 5) {
printf ("x = %d\n", x);
x++;
}
أولاً، يتم التحقق مما إذا كانت قيمة المتغير x أقل من 5، وهو أمر صحيح، لذلك يتم دخول جسم الحلقة، حيث يتم تنفيذ دالة printf ويُزاد قيمة x بمقدار 1. بعد الانتهاء من تنفيذ جميع التعليمات داخل جسم الحلقة، يتم فحص الشرط مرة أخرى، وهو (x < 5)، وإذا كان الشرط صحيحًا، تتكرر الحلقة، وتستمر هذه العملية حتى تصبح قيمة المتغيرx تساوي 5.
في بعض الأحيان يكون الشرط دائمًا صحيحًا، وفي بعض الحالات يكون هذا مرغوبًا، وهذا يؤدي إلى تكرار حلقة لا متناهية .وإذا تم عمل هذا عن قصد، عادةً يكون هناك أمر آخر مثل break ليوقف الحلقة ويخرج منها.
على سبيل المثال:
while (true) {
// do complicated stuff
if (someCondition)
break;
// more stuff
}
عرض حلقات while
[عدل | عدل المصدر]ستقوم حلقات while هذه بحساب العاملي للرقم 5:
ActionScript 3
[عدل | عدل المصدر]var counter: int = 5;
var factorial: int = 1;
while (counter > 1) {
factorial *= counter;
counter--;
}
Printf("Factorial = %d", factorial);
Ada
[عدل | عدل المصدر]with Ada.Integer_Text_IO;
procedure Factorial is
Counter : Integer := 5;
Factorial : Integer := 1;
begin
while Counter > 0 loop
Factorial := Factorial * Counter;
Counter := Counter - 1;
end loop;
Ada.Integer_Text_IO.Put (Factorial);
end Factorial;
APL
[عدل | عدل المصدر]counter ← 5
factorial ← 1
:While counter > 0
factorial ×← counter
counter -← 1
:EndWhile
⎕ ← factorial
أو ببساطة
!5
AutoHotkey
[عدل | عدل المصدر]counter := 5
factorial := 1
While counter > 0
factorial *= counter--
MsgBox % factorial
Small Basic
[عدل | عدل المصدر]counter = 5 ' Counter = 5
factorial = 1 ' initial value of variable "factorial"
While counter > 0
factorial = factorial * counter
counter = counter - 1
TextWindow.WriteLine(counter)
EndWhile
فيجوال بيسك
[عدل | عدل المصدر]Dim counter As Integer = 5 ' init variable and set value
Dim factorial As Integer = 1 ' initialize factorial variable
Do While counter > 0
factorial = factorial * counter
counter = counter - 1
Loop ' program goes here, until counter = 0
'Debug.Print factorial ' Console.WriteLine(factorial) in Visual Basic .NET
Bourne (Unix) shell
[عدل | عدل المصدر]counter=5
factorial=1
while [ $counter -gt 0 ]; do
factorial=$((factorial * counter))
counter=$((counter - 1))
done
echo $factorial
سي، سي++
[عدل | عدل المصدر]int main() {
int count = 5;
int factorial = 1;
while (count > 1)
factorial *= count--;
printf("%d", factorial);
}
لغة ترميز ColdFusion (CFML)
[عدل | عدل المصدر]بناء جملة البرنامج النصي
[عدل | عدل المصدر]counter = 5;
factorial = 1;
while (counter > 1) {
factorial *= counter--;
}
writeOutput(factorial);
بناء جملة العلامة
[عدل | عدل المصدر]<cfset counter = 5>
<cfset factorial = 1>
<cfloop condition="counter GT 1">
<cfset factorial *= counter-->
</cfloop>
<cfoutput>#factorial#</cfoutput>
فورتران
[عدل | عدل المصدر]program FactorialProg
integer :: counter = 5
integer :: factorial = 1
do while (counter > 0)
factorial = factorial * counter
counter = counter - 1
end do
print *, factorial
end program FactorialProg
Go
[عدل | عدل المصدر]لغة Go لا تحتوي على عبارة while، لكنها توفر نفس الوظيفة من خلال استخدام عبارة for عند حذف بعض عناصرها.
counter, factorial := 5, 1
for counter > 1 {
counter, factorial = counter-1, factorial*counter
}
جافا، سي شارب، دي
[عدل | عدل المصدر]الكود الخاص بالحلقة هو نفسه في لـ Java وC# وD:
int counter = 5;
int factorial = 1;
while (counter > 1)
factorial *= counter--;
جافا سكريبت
[عدل | عدل المصدر]let counter = 5;
let factorial = 1;
while (counter > 1)
factorial *= counter--;
console.log(factorial);
Lua
[عدل | عدل المصدر]counter = 5
factorial = 1
while counter > 0 do
factorial = factorial * counter
counter = counter - 1
end
print(factorial)
MATLAB, Octave
[عدل | عدل المصدر]counter = 5;
factorial = 1;
while (counter > 0)
factorial = factorial * counter; %Multiply
counter = counter - 1; %Decrement
end
factorial
Mathematica
[عدل | عدل المصدر]Block[{counter=5,factorial=1}, (*localize counter and factorial*)
While[counter>0, (*While loop*)
factorial*=counter; (*Multiply*)
counter--; (*Decrement*)
];
factorial
]
PowerShell
[عدل | عدل المصدر]$counter = 5
$factorial = 1
while ($counter) {
$factorial *= $counter--
}
$factorial
انظر أيضا
[عدل | عدل المصدر]- حلقة For
- دالة عودية بدائية
- دالة تكرارية عامة
- LOOP (لغة برمجة) - لغة برمجة تتميز بأن الدوال التي يمكنها حسابها هي بالضبط الدوال التكرارية البدائية
- 1 2 "The while and do-while Statements (The Java Tutorials > Learning the Java Language > Language Basics)". Dosc.oracle.com. مؤرشف من الأصل في 2025-05-28. اطلع عليه بتاريخ 2016-10-21.
- ↑ "while (C# reference)". Msdn.microsoft.com. مؤرشف من الأصل في 2016-10-22. اطلع عليه بتاريخ 2016-10-21.