רפקטורינג של לולאות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 16 מתוך 66.
שכתוב לולאות יכול לשפר את קריאות הקוד ואת יכולת התחזוקה שלו.
החליפו לולאה מסורתית ב-foreach לשם פשטות:
string[] fruits = { "apple", "banana", "cherry" };
// לפני ארגון הקוד מחדש
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
// אחרי ארגון הקוד מחדש
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}חלצו לוגיקה מורכבת של לולאות לשיטות:
int[] numbers = { 1, 2, 3, 4, 5, 6 };
// לפני ארגון הקוד מחדש
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 == 0)
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// אחרי ארגון הקוד מחדש באמצעות פונקציית עזר
for (int i = 0; i < numbers.Length; i++)
{
if (IsEven(numbers[i]))
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// פונקציית עזר
bool IsEven(int number)
{
return number % 2 == 0;
}פצלו לולאות גדולות ללולאות קטנות וממוקדות יותר:
int[] data = { 1, 2, 3, 4, 5 };
// לפני: לולאה אחת גדולה שמבצעת כמה פעולות
for (int i = 0; i < data.Length; i++)
{
// עיבוד הנתונים
data[i] = data[i] * 2;
// הדפסת התוצאות
Console.WriteLine(data[i]);
}
// אחרי: לולאות נפרדות עם מטרות ברורות
// עיבוד הנתונים
for (int i = 0; i < data.Length; i++)
{
data[i] = data[i] * 2;
}
// הדפסת התוצאות
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}אתגר
בינוניצרו מתודה בשם refactorArrayFilter ש:
- מקבלת מערך של מספרים שלמים כפרמטר
- מממשת שתי גרסאות של קוד שסופרות מספרים שמתחלקים ב־3:
- מקורית: השתמשו בלולאת for מסורתית עם פקודת if
- לאחר שכתוב: השתמשו בלולאת foreach כשהלוגיקה מועברת למתודת עזר
- מחזירה את הספירה מהגרסה שלאחר השכתוב כמספר שלם
לדוגמה, עבור המערך [3, 4, 6, 7, 9], המתודה אמורה להחזיר 3 כי יש שלושה מספרים (3, 6 ו־9) שמתחלקים ב־3.
הערה: אין צורך להדפיס דבר — רק להחזיר את הספירה כמספר שלם.
נסו בעצמכם
public class RefactorArrayFilter
{
// ממשו את המתודה refactorArrayFilter
public static int refactorArrayFilter(int[] numbers)
{
// כתבו כאן את הקוד שלכם
}
// ממשו את כל מתודות העזר הנחוצות לכם
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםהכרזה ואתחול של מערכים דו־ממדייםגישה לאיברי מערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםמערכים משונניםפעולות מטריצה נפוצותחזרה – מערכים רב־ממדיים7אופרטורים לוגיים מתקדמים
הערכה בקיצור דרךאופרטורים לוגיים מותניםקדימות אופרטוריםסיכום – אופרטורים מתקדמים2קבלת החלטות מתקדמת
תנאים מרוביםלוגיקה בוליאנית מורכבתהשוואה בין If ל-Switchהצהרות Switch מקוננותסיכום — קבלת החלטות מתקדמת5טיפול בחריגות
יסודות try-catchסוגי חריגותבלוקי catch מרוביםעבודה עם קבציםבלוק finallyשימוש ב-using לעומת try-finallyחריגות מותאמות אישיתסיכום – טיפול בשגיאות3שיפורים בלולאות
ביצועי לולאותאיטרציה במבנים מורכביםכל אחד מסוגי הלולאותרפקטורינג של לולאותסיכום – לולאות שעברו אופטימיזציה6טיפול בערכי Null
יסודות הפניה ל-Nullטיפוסי ערכים שניתנים ל-Nullדפוסי בדיקת Nullתכנות הגנתיסיכום – בטיחות מול Nullתרגלו בעצמכם: קומפיילר C# אונליין