נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

שיפור סגנון קוד ה-PHP

מחבר:
בתאריך:

אחד האתגרים המרכזיים שעומד בפני מתכנתים מתחילים ומתקדמים הוא כיצד לשפר את הקוד כדי שיהיה קריא. מפני שקוד קריא מקל על ההבנה, ומסייע לתחזוקת הקוד. במדריך זה תמצאו רשימה של 7 בעיות אופייניות למתכנתים בראשית דרכם, ואת השיטות הפשוטות לפתור את הבעיות.

 

בעיה 1 : לא משתמשים בפונקציות

זו הבעיה הראשונה במעלה שמאפיינת מתכנתים של PHP ו-JavaScript בראשית דרכם. זו בעיה שנובעת מכך שניתן לכתוב PHP ו-JS כסקריפטים בני עשרות שורות בלי שמוכרחים לעטוף את חלקי הקוד בפונקציות. זה בעייתי מפני שקשה להבין מה הקוד עושה בלי להתעמק בו, והמתכנת עלול לחזור על עצמו בלי כוונה. המסקנה מזה היא שצריך לחלק את הקוד לפונקציות שעושות כל אחת דבר אחד בלבד.

 

בעיה 2 : לא משתמשים בפונקציות מובנות

שפות PHP ו-JS מציעות מאות פונקציות שימושיות שמונעות את הצורך להמציא את הגלגל, ובדרך כלל עושות את העבודה באופן יעיל בהרבה ממה שמתכנת רגיל יכול. לכן, אם אתם נתקלים בצורך לכתוב פונקציה מסובכת שאתם חושבים שמישהו אחר כבר כתב אותה בשבילכם, עדיף לחפש באינטרנט, ובפרט בדוקומנטציה, לפני שמנסים לכתוב את הפונקציה.

 

בעיה 3 : שמות מעורפלים לפונקציות ולמשתנים

בעיה נוספת שמופיעה גם אצל מתכנתים מנוסים היא שמות משתנים ופונקציות מעורפלים ולא מובנים מספיק. לדוגמה, פונקציה ששמה doSomething. הבעיה יכולה לנבוע מכמה סיבות: מהעדר מודעות, מעצלות או כתוצאה מכך שפונקציה שנכתבה לעשות פעולה מסוימת בסופו של דבר עושה פעולה אחרת. הבעיה הזו תורמת לקוד לא קריא, שקשה לתחזק אותו ולהכניס בו שינויים. הפתרון הוא שמות תיאוריים ומדויקים בני 2-3 מילים לפונקציות ולמשתנים.

 

בעיה 4 : מספרים ומחרוזות קסם

מספר קסם הוא מספר שמוצאים בקוד בלי שום הסבר או שם. לדוגמה, המספר 5 בלולאה:

for($i=0;$i<5;$i++)
{
  //do check
}

מזה לא ברור מדוע הקוד צריך לרוץ 5 פעמים. כדי להפוך את הקוד לקריא יותר, מומלץ להגדיר את המספר כערך של משתנה בעל שם תיאורי. לדוגמה:

$maxCheckNumbers = 50;
 
for($i=0; $i<$maxCheckNumbers; $i++)
{
  //do check
}

באופן דומה, מחרוזות קסם הן מחרוזות שמופיעות בקוד ללא כל הסבר, וגם אותם מומלץ להגדיר בתור ערך של משתנה בעל שם תיאורי.

 

בעיה 5 : שכפול הקוד

אם אתם מוצאים את עצמכם חוזרים שוב ושוב על אותו קוד, סימן שאתם עובדים לא נכון. למעשה אם אתם נוהגים כך, אתם מפירים את אחד העקרונות החשובים ביותר בכתיבה של קוד מודרני : Dont repeat your self או בקיצור DRY. הסיבה לכך ש-DRY הוא עיקרון כל כך חשוב היא פרקטית. תארו לכם שאחרי שסיימתם לכתוב את הקוד, אתם צריכים לשנות בו משהו. אם לא הקפדתם מספיק, וחזרתם על עצמכם, תצטרכו להתאמץ ולשנות את הקוד במספר מקומות, מה שעלול לתרום להופעתם של באגים. אבל אם תקפידו לא לחזור על עצמכם, תוכלו לשנות את הקוד רק במקום אחד. הדרך הטובה ביותר להימנע משיכפול הקוד היא לעטוף את הקוד שחוזר על עצמו בפונקציה, ולקרוא לפונקציה מהיכן שצריך בקוד.

 

בעיה 6 : פונקציות שעושות יותר מדבר אחד

פונקציה יעילה צריכה לעשות דבר אחד בלבד על-מנת שניתן יהיה לקרוא לה ממקומות שונים בקוד בביטחון מלא שהיא תעשה בדיוק את מה שהיא אמורה לעשות, ושום דבר אחר. לכן, צריך להקפיד שכל פונקציה תבצע פעולה אחת בלבד.

במקום שתי פעולות בפונקציה- בדיקת התנאי וגם הצגת התוצאה במסגרת של הטמ"ל:

function a($string)
{
  // Action 1 : Check if matches.
  $a = 'a';
  
  if($string===$a)
  {
    $b='yes';
  }
  else
  {
    $b='no';
  }
 
  // Action 2 : Outputs result.
  echo "<p>$b</p>";
}

עדיף להפריד לשתי פונקציות, פונקציה doMatch שבודקת את התנאי, ופונקציה output שמציגה את התוצאה:

function doMatch($string)
{
  $a = 'a';
  return($string===$a)? true : false;
}
 
function output($binary)
{
  $string=($binary)? "yes" : "no";
  return "<p>$string</p>";
}
 
$string = 'b';
$doMatch = doMatch($string);
echo output($doMatch);

כך הפונקציה output יכולה להיות חופשית לקבל מידע גם מפונקציות נוספות.

 

בעיה 7 : יותר מדי משפטי תנאי מקוננים

אחת הסיבות העיקריות לקוד מבולגן קשורה במשפטי תנאי מקוננים (if בתוך if). בעיה שניתן לפתור בקלות על ידי שימוש בפונקציות וב-return.

במקום תנאים מורכבים:

if($string==='a' || $string==='b')
{
  if($string==='a')
  {
    echo "a indeed";
  }
  
  if($string==='b')
  {
    echo "b";
  }
}
else
{
  echo "x";
}

 

ניתן לכתוב פונקציה שמחזירה מה שצריך לעשות אם עומדים באחד התנאים:

function eliminateNestedConditionals($string)
{
  if($string==='a') return "a indeed";
  
  if($string==='b') return "b";
  
  return "x";
}
 
$string = "m";
echo eliminateNestedConditionals($string);

אם אתם מעוניינים להרחיב על בנושא של שיפור סגנון הקוד, אני ממליץ לחפש ב-google עם מילות המפתח: clean code ו- code smells .

תכנתו בהנאה.

 

לכל מדריכי ה-PHP

 

 

הוסף תגובה חדשה

 

= 9 + 7