عبارات التكرار في TypeScript

عبارات التكرار في TypeScript

توضح هذه المقالة عبارات التكرار في TypeScript۔

YouTube Video

بيان for في TypeScript

بيان for في TypeScript هو بنية تكرارية أساسية لتنفيذ العمليات المتكررة۔ في حلقة for، يمكن تنفيذ نفس الكتلة البرمجية بشكل متكرر بناءً على عدد محدد من المرات أو الشروط۔

الصياغة الأساسية

1for (initialization; condition; update) {
2    // Code to execute repeatedly while the condition is true
3}
  • ** بدء العمل**: هذا هو الجزء الذي ينفذ مرة واحدة فقط قبل بدء الحلقة۔ بدء المتغيرات من قبيل المقارنات۔
  • ** الشروط (الشروط)**: يحدد ما إذا كانت الحلقة مستمرة۔ إذا كان صحيحاً، استمروا في الحلقة، وإذا كان زائفاً،۔
  • ** تاريخ الاستكمال**: اركضوا في نهاية كل حلقة واستكملوا۔

المثال 1: حلقة for الأساسية

في المثال أدناه، يقوم البرنامج بإخراج الأرقام من 0 إلى 4 بالترتيب۔

1for (let i = 0; i < 5; i++) {
2    console.log("The value of i is: " + i);
3}
4// Outputs:
5// The value of i is: 0
6// The value of i is: 1
7// The value of i is: 2
8// The value of i is: 3
9// The value of i is: 4

المثال 2: حلقة for مع مصفوفة

يمكنك أيضًا استخدام حلقة for لمعالجة عناصر المصفوفة بالترتيب۔

1let fruits: string[] = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4    console.log("Fruit: " + fruits[i]);
5}
6// Outputs:
7// Fruit: apple
8// Fruit: banana
9// Fruit: cherry

المثال 3: حلقة for-in

تُستخدم حلقة for-in للتكرار عبر خصائص كائن أو فهارس مصفوفة بالترتيب۔

1let car = { brand: "Toyota", model: "Corolla", year: 2020 };
2
3for (let key in car) {
4    console.log(key + ": " + car[key]);
5}
6// Outputs:
7// brand: Toyota
8// model: Corolla
9// year: 2020

المثال 4: حلقة for-of

تُستخدم حلقة for-of للحصول على قيمة كل عنصر بالترتيب من الكائنات القابلة للتكرار مثل المصفوفات أو النصوص۔

1let colors: string[] = ["red", "green", "blue"];
2
3for (let color of colors) {
4    console.log("Color: " + color);
5}
6// Outputs:
7// Color: red
8// Color: green
9// Color: blue

مثال 5: الحلقات المتداخلة باستخدام for

من الممكن أيضًا استخدام حلقة for داخل حلقة for أخرى، والتي تعرف باسم الحلقة المتداخلة۔ يتيح ذلك إنشاء حلقات مزدوجة، إلى جانب أشياء أخرى۔

 1for (let i = 0; i < 3; i++) {
 2    console.log("Outer loop i: " + i);
 3    for (let j = 0; j < 2; j++) {
 4        console.log("  Inner loop j: " + j);
 5    }
 6}
 7// Outputs:
 8// Outer loop i: 0
 9//   Inner loop j: 0
10//   Inner loop j: 1
11// Outer loop i: 1
12//   Inner loop j: 0
13//   Inner loop j: 1
14// Outer loop i: 2
15//   Inner loop j: 0
16//   Inner loop j: 1

الملخص

  • تعتمد عبارة for على إجراء معالجة متكررة بناءً على عدد معين أو الشروط المحددة۔
  • for-in تُستخدم لاستخراج خصائص كائن أو فهارس المصفوفة۔
  • for-of تستخرج قيم العناصر من الكائنات القابلة للتكرار مثل المصفوفات۔
  • كما يمكن تنفيذ المعالجة المتكررة المعقدة باستخدام الحلقات المتداخلة for۔

يوفر بيان for في TypeScript معالجة تكرارية قوية ومرنة، مشابهة للحلقات الأخرى۔

بيانات while في TypeScript

في TypeScript، تعد عبارة while بناء حلقة يقوم بتنفيذ عملية متكررة طالما أن الشرط المحدد هو true۔ يشبه حلقة for، حيث تكون حلقة while مناسبة للحالات التي لا يمكن فيها تحديد عدد التكرارات مسبقًا، أو عندما تريد التحكم في التكرار بناءً على شرط۔

الصياغة الأساسية

1while (condition) {
2    // Code to execute repeatedly while the condition is true
3}
  • الشرط: الشرط الذي بناءً عليه يتم تنفيذ الحلقة۔ تستمر الحلقة طالما أن هذا الشرط هو true، وتتوقف عندما يصبح false۔

المثال 1: حلقة while الأساسية

في المثال أدناه، تواصل الحلقة عرض قيمة i طالما أن i أقل من 5۔

 1let i: number = 0;
 2
 3while (i < 5) {
 4    console.log("The value of i is: " + i);
 5    i++;
 6}
 7// Outputs:
 8// The value of i is: 0
 9// The value of i is: 1
10// The value of i is: 2
11// The value of i is: 3
12// The value of i is: 4

في هذا المثال، تنتهي الحلقة عندما تصبح قيمة i تساوي 5 أو أكثر لأن الشرط يصبح false۔

المثال 2: مثال على حلقة لا نهائية

إذا كان الشرط في حلقة while دائمًا true، فقد تصبح حلقة لا نهائية۔ عادةً ما يتسبب ذلك في فشل البرنامج في التوقف كما هو مقصود، لذا يجب الحذر۔

 1let x: number = 0;
 2
 3while (true) {
 4    console.log("The value of x is: " + x);
 5    x++;
 6    if (x >= 5) {
 7        break; // Exit the loop when the condition is met
 8    }
 9}
10// Outputs:
11// The value of x is: 0
12// The value of x is: 1
13// The value of x is: 2
14// The value of x is: 3
15// The value of x is: 4

يمكنك استخدام عبارة break للخروج من الحلقة إجباريًا عند تحقق شرط معين۔

المثال 3: حلقة do-while

حلقة do-while هي بنية يتم فيها تنفيذ عملية الحلقة مرة واحدة على الأقل۔ نظرًا لأنه يتم تقييم الشرط بعد العملية، فإن العملية تُنفذ مرة واحدة على الأقل حتى وإن كان الشرط false۔

1let j: number = 5;
2
3do {
4    console.log("The value of j is: " + j);
5    j++;
6} while (j < 5);
7// Outputs: The value of j is: 5

في هذا المثال، تكون قيمة j تساوي 5 من البداية، و j < 5 هي false، ولكن في حلقة do-while يتم التنفيذ مرة واحدة على الأقل بغض النظر عن الشرط۔

الملخص

  • تقوم حلقة while بتكرار التنفيذ طالما أن الشرط هو true۔
  • إذا لم يكن شرط إنهاء الحلقة واضحًا، يجب الحذر من الحلقات اللانهائية۔
  • تختلف حلقة do-while عن حلقة while العادية في أن العملية يتم تنفيذها مرة واحدة على الأقل۔

تعد عبارة while في TypeScript مفيدة لمعالجة الحلقات ذات عدد التكرارات غير الواضح أو عندما يكون التحقق الديناميكي من الشروط ضروريًا۔

break و continue

يمكنك استخدام break و continue داخل الحلقات۔

  • يُستخدم break لإنهاء الحلقة قبل اكتمالها۔
  • يُستخدم continue لتخطي التكرار الحالي والانتقال إلى التكرار التالي۔

مثال على break

 1for (let i = 0; i < 10; i++) {
 2    if (i === 5) {
 3        break;  // Exits the loop when i is 5
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 2, 3, 4
 8
 9let i = 0;
10
11while (i < 10) {
12    if (i === 5) {
13        break;  // Ends the loop when i is 5
14    }
15    console.log(i++);
16}
17// Outputs 0, 1, 2, 3, 4

في هذه الحالة، يتم تنفيذ break عندما تصبح قيمة i تساوي 5۔ نتيجة لذلك، يتم عرض الأرقام من 0 إلى 4۔

مثال على continue

 1for (let i = 0; i < 5; i++) {
 2    if (i === 2) {
 3        continue;  // Skips when i is 2
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 3, 4
 8
 9let i = 0;
10
11while (i < 5) {
12    i++;
13    if (i === 3) {
14        continue;  // Skips when i is 3
15    }
16    console.log(i);
17}
18// Outputs 1, 2, 4, 5

في هذه الحالة، يتم تنفيذ continue عندما تكون قيمة i تساوي 2۔ نتيجة لذلك، يتم عرض الأرقام باستثناء 2۔

الحلقات المتداخلة في TypeScript

الحلقة المتداخلة هي بنية يتم فيها استخدام حلقة داخل حلقة أخرى۔ في TypeScript، يتم دعم تراكيب الحلقات مثل for و while و do-while۔ من خلال استخدام الحلقات المتداخلة، يمكنك معالجة المصفوفات ثنائية الأبعاد (المصفوفات المصفوفية) وتبسيط العمليات بناءً على شروط متعددة۔

الصياغة الأساسية

يكون بناء الجملة الأساسي للحلقة المتداخلة كما يلي۔

1for (let i: number = 0; i < n; i++) {
2  for (let j: number = 0; j < m; j++) {
3    // Processing for the inner loop
4  }
5}

لكل تنفيذ للحلقة الخارجية، تُكمل الحلقة الداخلية جميع التكرارات الخاصة بها۔ تعد هذه البنية مفيدة للغاية عند التعامل مع الحلقات المتعددة أو الهياكل البيانية۔

مثال على حلقة متداخلة في TypeScript

التنقل في مصفوفة ثنائية الأبعاد

تُستخدم الحلقات المتداخلة غالبًا عند التعامل مع هياكل البيانات متعددة الأبعاد مثل المصفوفات ثنائية الأبعاد۔ في المثال التالي، يتم التنقل عبر عناصر مصفوفة ثنائية الأبعاد وعرض قيمها على وحدة التحكم۔

 1const matrix: number[][] = [
 2  [1, 2, 3],
 3  [4, 5, 6],
 4  [7, 8, 9]
 5];
 6
 7for (let row: number = 0; row < matrix.length; row++) {
 8  for (let col: number = 0; col < matrix[row].length; col++) {
 9    console.log(`matrix[${row}][${col}] = ${matrix[row][col]}`);
10  }
11}
12// Output
13// matrix[0][0] = 1
14// matrix[0][1] = 2
15// matrix[0][2] = 3
16// matrix[1][0] = 4
17// matrix[1][1] = 5
18// matrix[1][2] = 6
19// matrix[2][0] = 7
20// matrix[2][1] = 8
21// matrix[2][2] = 9

في هذا المثال، نحن نتنقل عبر المصفوفة ثنائية الأبعاد matrix۔ تتعامل الحلقة الخارجية مع الصفوف، بينما تتعامل الحلقة الداخلية مع الأعمدة، وتعرض كل عنصر بالترتيب.۔

دمج مصفوفتين

بعد ذلك، نقدم مثالاً لحساب جميع التوليفات بين مصفوفتين.۔ على سبيل المثال، يمكنك أخذ عنصر واحد من كل من المصفوفتين وإخراج جميع الأزواج الممكنة.۔

 1const array1: string[] = ['A', 'B', 'C'];
 2const array2: number[] = [1, 2, 3];
 3
 4for (let i: number = 0; i < array1.length; i++) {
 5  for (let j: number = 0; j < array2.length; j++) {
 6    console.log(`Pair: (${array1[i]}, ${array2[j]})`);
 7  }
 8}
 9// Output
10// Pair: (A, 1)
11// Pair: (A, 2)
12// Pair: (A, 3)
13// Pair: (B, 1)
14// Pair: (B, 2)
15// Pair: (B, 3)
16// Pair: (C, 1)
17// Pair: (C, 2)
18// Pair: (C, 3)

في هذا المثال، يتم إنشاء جميع الأزواج بين مصفوفة النصوص array1 ومصفوفة الأرقام array2.۔ تقوم الحلقة الخارجية باستخراج العناصر من array1، بينما الحلقة الداخلية تستخرج العناصر من array2، وتعرض كل زوج.۔

توليد الإحداثيات باستخدام حلقة ثلاثية

من خلال استخدام حلقات متداخلة ثلاثية، يمكنك توليد إحداثيات في مساحة ثلاثية الأبعاد، على سبيل المثال.۔

 1for (let x: number = 0; x < 3; x++) {
 2  for (let y: number = 0; y < 3; y++) {
 3    for (let z: number = 0; z < 3; z++) {
 4      console.log(`Coordinate: (${x}, ${y}, ${z})`);
 5    }
 6  }
 7}
 8// Output
 9// Coordinate: (0, 0, 0)
10// Coordinate: (0, 0, 1)
11// Coordinate: (0, 0, 2)
12// ...
13// Coordinate: (2, 2, 1)
14// Coordinate: (2, 2, 2)

بهذه الطريقة، يتيح لك استخدام الحلقات المتداخلة الثلاثية توليد الإحداثيات بسهولة في مساحة ثلاثية الأبعاد.۔

أداء الحلقات المتداخلة

تُعتبر الحلقات المتداخلة ملائمة، لكن تزيد التكلفة الحسابية بسرعة مع زيادة عمق الحلقات.۔ على سبيل المثال، إذا كانت هناك n تكرارات من الحلقة الخارجية وm تكرارات من الحلقة الداخلية، فسيكون إجمالي عدد التكرارات هو n * m.۔ عندما تصبح الحلقات متداخلة بشكل أكبر، تزداد التعقيد الحسابي بشكل أُسي، مما قد يؤثر على أداء البرنامج.۔

فيما يلي التعقيدات الحسابية عند التكرار عبر ثلاث مصفوفات.۔

 1const array1: number[] = [1, 2, 3];
 2const array2: number[] = [4, 5, 6];
 3const array3: number[] = [7, 8, 9];
 4
 5for (let i: number = 0; i < array1.length; i++) {
 6  for (let j: number = 0; j < array2.length; j++) {
 7    for (let k: number = 0; k < array3.length; k++) {
 8      console.log(`Combination: (${array1[i]}, ${array2[j]}, ${array3[k]})`);
 9    }
10  }
11}

في هذه الحالة، تحتاج إلى حساب array1.length * array2.length * array3.length، مما ينتج 3 * 3 * 3 = 27 تكرارًا لمعالجة جميع التوليفات.۔

تحسين الحلقات المتداخلة

عند استخدام الحلقات المتداخلة، يمكنك تحسين الأداء من خلال مراعاة التحسينات التالية.۔

  1. استخدام الخروج المبكر: قم بإنهاء الحلقة مبكرًا عند تحقيق الهدف لتجنب التكرارات غير الضرورية.۔
  2. تخزين متغيرات الحلقة مؤقتًا: قم بتخزين قيم المتغيرات المستخدمة داخل الحلقة مسبقًا (خصوصًا الأطوال والنطاقات) لتقليل تكلفة الحساب في كل مرة.۔
  3. تغيير هياكل البيانات: يمكن أن يكون تعديل هيكل المصفوفات والكائنات فعالًا في تسريع العمليات المتكررة المحددة.۔

الخاتمة

تُعد الحلقات المتداخلة أداة قوية في معالجة البيانات المعقدة والخوارزميات.۔ ومع ذلك، مع زيادة عمق الحلقات وعدد التكرارات، قد تظهر مشكلات في الأداء.۔ مع التحسينات المناسبة والتصميم الدقيق، يمكنك الاستفادة من الحلقات المتداخلة بفعالية في TypeScript.۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video