כללים ויוצאים מן הכלל
30/11/2019
כשאנחנו מזהים מבנים דומים בין שפות שונות מפתה לחשוב שהמבנים עובדים אותו דבר גם מתחת לפני השטח, למרות שהרבה פעמים זה לא כך. דוגמא קלאסית היא הקוד הבא בשפת Ruby:
data = { name: 'my item', price: 15 }
שנראה ממש דומה לקוד הבא בשפה JavaScript:
data = { name: 'my item', price: 15 }
רק שב Ruby המפתחות במילון הם מסוג Symbol וב JavaScript מדובר על מחרוזות רגילות. הקוד המקביל האמיתי ברובי אגב היה נראה כך:
data = { 'a' => 10, 'b' => 20 }
או נסתכל על פייתון ונקבל את הרושם שהלולאה הזו:
for i in range(10):
print(i)
דומה באיזשהו אופן ללולאה הזו מ JavaScript (עם קצת עזרה של lodash):
for (let i in _.range(10)) {
console.log(i);
}
ושתי התוכניות באמת מדפיסות את אותו דבר אבל עושות משהו אחר לגמרי. במציאות המילה of ב JavaScript היא הדרך לדמות את ההתנהגות של פייתון:
for (let i of _.range(10)) {
console.log(i);
}
אי תאימויות כאלה בין שפות הן הנורמה, ושווה לזכור את זה בפעם הבאה שמשהו נראה לכם מוכר. עדיף תמיד לוודא קודם בתיעוד שהקוד עושה את מה שהתכוונתם.