פניני קוד

מדי פעם יוצא לי לתחזק התקנת PHP Nuke ממש ישנה, ואני כל פעם מופתע מחדש מה”איכות” של הקוד: PHP Nuke הוא הדוגמה לכל מה שגרוע ב-PHP – זו טכנולוגיה לא רעה שהביאה את תכנות ה-Web להמוני אנשים שלא היתה להם דרך אחרת להתחיל, אבל זה גם הצד הרע שלה – PHP הביאה את התכנות להמוני אנשים שאין להם מושג בתכנות ואז אתה מקבל דברים כמו קוד שמביא פריטים מעץ הירארכי בעזרת הפונקציות GetKids ו-GetBabies (שקוראות אחת לשניה בלולאה), או את הקוד המבריק הזה:


if ( (isset($tid)) && (!isset($pid))) {
// do something
} elseif ( ($mainfile) xor ( ($pid==0) AND (!isset($pid)))) {
// do something else
} else {
if(!isset($pid)) $pid=0;
// do a third thing
}

כל הקוד הזה מטופש, אבל הכי משך את עיני החלק האחרון של ה-if השני: “אם pid שווה לאפס וגם אינו מוגדר”1 .

אני רואה את ה-Script Kiddie שכותב את הקוד הזה – מוסיף תנאי ועוד אחד, וזה עדיין לא עובד כמו שצריך, אז נוסיף עוד תנאי פה ועוד תנאי כאן ואולי קצת סוגריים, עד שזה יעבוד.

זה לא שחסרה למרבית מתכנתי ה-PHP השכלה בסיסית במדעי המחשב – חסרה להם יכולת בסיסית לקרוא מדריכים, להבין אותם ולהסיק מסקנות, או חמור מזה – יכולת להסתכל על קוד ולהגיד “איכס! אפשר לכתוב את זה יותר טוב”.

  1. שזה בעצם אותו הדבר ב-PHP, בגלל שדברים לא מוגדרים שווים (אך לא זהים) לאפס. בשפות אחרות שבהן דברים לא מוגדרים לא שווים לכלום יתכן שזה תנאי “וגם” שאי אפשר לממש אותו []

Leave a Reply