מחשבים אמיתיים סופרים מאפס. נקודה.

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

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

כמה חושים יש? פעם חשבו 5. אבל בעצם יש הרבה חושים. אם נגדיר חוש כמתווך דרכו אנו יכולים לקבל מידע ולהגיב לו, יש הרבה יותר מ5. יש חוש חום, חוש איזון, חוש התמצאות במרחב ועוד. מחקר של פרופסור בארי ס. סמית' מנה 22-33 חושים מהסוג הזה. לצורך ההפשטה, נניח שלכל חוש נקרא ״מתווך חוויה״, בה דרך המושג האובסרקטי של החוש, אנו חויים חוייה מסוימת והיא מתורגמת למידע לגוף, ודרכו הוא מחליט לפעול בהתאם (באופן רצוני או שלא רצוני).

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

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

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

די חופר, ולא חייבים להסכים, בפרט שזה לא נותן שום דבר לאף אחד. אבל לי אישית זה נתן טעם וחן בפניה לאבר האחרון במערך: arr[arr.length-1].

2 תגובות בנושא “מחשבים אמיתיים סופרים מאפס. נקודה.

  1. הרעיון שכתבת של מספר כיחידת מניה מייצג את התפיסה של המספרים הטבעיים (N) ומסביר מדוע היא אינה מכילה את האיבר 0 או מספרים שליליים ורציונאליים (שברים).
    לענ"ד בשפות תכנות זה יותר עניין של עיצוב השפה.
    בימי חורפי כשלמדתי שפות עתיקות כגון Pascal או Basic שבהן אינדוקס המערכים מתחיל דווקא מ1, זה היה לי מאוד אינטואיטיבי. כשעברתי משם ל-C, וראיתי שכל מערך מוגדר באופן גלוי כמצביע, אז השלמתי עם הרעיון של היסט, כי המשתנה של המערך מצביע לתחילתו, והאינדקס מציין היסט. ומסתמא למתכנני השפה היה קל יותר להגדיר אינדקס כהיסט, ולחסוך את ההזחה באחד מאחורי הקלעים.
    מכל מקום, כיון שבחפירות עסקינן, אני חושב שזה עדיין לא אינטואיטיבי להשתמש באינדוקס במתחיל מ-0, כי אינדקס והיסט הן מושגים שונים בעצם, והראיה שבשאר תחומי החיים משתמשים דווקא באינדקס טבעי, כגון מספרי בתים או קומות, ולא מציינים את הבית הראשון ברחוב עם המספר 0.

    אהבתי

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

    אהבתי

כתיבת תגובה

אתר זו עושה שימוש ב-Akismet כדי לסנן תגובות זבל. פרטים נוספים אודות איך המידע מהתגובה שלך יעובד.

עם WordPress.com אפשר לעצב אתרים כאלה
להתחיל