حلقة While

في معظم لغات برمجة الحاسوب، تُعد حلقة تكرار "while" إحدى تعبيرات تدفق التحكم ،إذ تُستخدم لتنفيذ الشيفرة بشكل متكرر بناءً على شرط منطقي معين.

ويمكن النظر إلى حلقة whileعلى أنها تعبير شرطي (if) تتكرر باستمرار طالما ظل الشرط محققًا.

 ملخص 
يتكون حلقة while من كتلة من التعليمات و شرط أو تعبير منطقي  يتم تقييم هذا الشرط أو التعبير، وإذا كان صحيحًا ،  يتم تنفيذ التعليمات الموجودة داخل الكتلة بالكامل. تستمر هذه العملية في التكرار حتى يصبح الشرط أو التعبير باطلاً . نظرًا لأن حلقة while تقوم بفحص الشرط قبل تنفيذ الكتلة، فإن هذه البنية تُعرف غالبًا بـ الحلقة ذات الاختبار المسبق (pre-test loop). قارن ذلك مع حلقة do while، التي تختبر الشرط بعد تنفيذ الكتلة البرمجية.

على سبيل المثال، في اللغات C وJava وC# و  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 (لغة برمجة) - لغة برمجة تتميز بأن الدوال التي يمكنها حسابها هي بالضبط الدوال التكرارية البدائية

تصنيف:مقارنة بين لغات البرمجة
تصنيف:تكرار في برمجة
تصنيف:تدفق السيطرة