**HyperTalk** היא שפת תכנות עילית ופרוצדורלית מבית תאגיד התוכנה "אפל" אשר נוצרה בשנת 1987 על ידי דן וינקלר והייתה בשימוש יחד עם תוכנת ההיפר-מדיה HyperCard, שיצר מהנדס המחשבים ביל אטיקסון (אנ'). קהל היעד של HyperTalk היה בעיקר מתכנתים מתחילים אשר נקראו "מחברים" (באנגלית: Authors). תהליך כתיבת הקוד בשפה נקרא יצירת תסריטים (ובאנגלית Scripting). התסריטים, או בשמם באנגלית, סקריפטים, חלקו ב-HyperTalk קווי דמיון לשפה האנגלית, ולכן השתייכו לפרדיגמת תכנות הנקראת עיבוד שפה טבעית (NLP). לשפות תכנות אשר תומכות בפרדיגמה זו יש תחביר אשר מזכיר שפות טבעיות של בני אדם, ופעמים רבות הן מכוונות למתכנתים מתחילים. בנוסף, יש ל-HyperTalk מבנה לוגי אשר מזכיר את שפת התכנות פסקל.

HyperTalk תומכת במספר מאפיינים בסיסיים של תכנות פרוצדורלי, כגון לולאות repeat for / while / until, התניות if / then / else וכן בפרוצדורות ובסאב רוטינות.

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

תיאור השפה
----------

### תהליכים בסיסיים

בניגוד למרבית שפות התכנות הפרוצדורליות כגון BASIC, אופן ביצוע התהליכים ב-HyperTalk מושפע יותר מ-NLP. לדוגמה, פעולת השמה פשוטה תתבצע באמצעות המילים השמורה `put` ו-`into`, כאשר שם המשתנה ממוקם בסוף ההצהרה.

```
 put 5 * 4 into theResult
```

לעומת זאת, ב-BASIC ובשפות תכנות פרוצדורליות רבות אחרות, תתבצע השמה זו בכתיב מתומצת שבו שם המשתנה ממוקם בהתחלה ההצהרה, ומתבצע שימוש באופרטור =, בדומה למתמטיקה:

```
 theResult = 5 * 4
```

קוד ההשמה ב-HyperTalk גם יוצר את המשתנה theResult תוך כדי ההשמה. ניתן לבצע השמה של כל ערך או משתנה באמצעות הפעולה `put` ולפיכך הטיפוסיות של HyperTalk נחשבת למאוד חלשה.

המרות בין מבני נתונים יתבצעו מאחורי הקלעים באופן אוטומטי ( Implicit Casting ). לדוגמה, ניתן להכפיל את המחרוזת "3" במספר 5, ולקבל את התוצאה 15,או לחלופין לשרשר את המספר 5 עם המחרוזת "3", ולקבל "35".

### טיפול במחרוזות

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

```
  put the third word of theFilesText into colThree
```

יתר על כן, ניתן לגשת לכל חלק במחרוזת - מרמת השורה עד לרמת התו הבודד. בדוגמה זו, הוכנס התו הראשון של המילה השלישית בשורה 5, של שדה שערכו "an example of a text....", לתוך המשתנה theChar. כפי שהוזכר מוקדם יותר, במידה והמשתנה אינו קיים, הוא ייווצר באופן אוטומטי כתוצאת לוואי של ההשמה.

```
put the first character of the third word of line 5 of card field "an example of a text...." into theChar
```

תהליך זה, בו מתייחסים לטקסט כאל מבנה נתונים מסוג container, נקרא chunking, והפעולות האחראיות לכך ( ובין היתר על תהליכים אחרים כגון טיפול וניהול קבצים ) נקראות chunk expressions.

### עבודה על קבצים

```
 on mouseDown
    answer file "Please select a text file to open."
    if it is empty then exit mouseDown
    put it into filePath
    if there is a file filePath then
      open file filePath
      read from file filePath until return
      put it into cd fld "some field"
      close file filePath
      set the textStyle of character 1 to 10 of card field "some field" to bold
    end if
  end mouseDown
```

בקוד שלעיל, כאשר אירוע של לחיצת עכבר מתקיים, המשתמש בוחר את שם קובץ הטקסט שברצונו לבצע עליו פעולות. במידה שהמידע שהוזן על ידי המשתמש הוא תוכן ריק( `if it is empty` ), תצא התוכנית מהרצת סט הפקודות המשויכות לאירוע לחיצת העכבר. לאחר מכן, שם וכתובת הקובץ (ה-path שלו) יוכנסו למשתנה ששמו filePath. אם filePath קיים במערכת ( `if there is a file filePath` ), ייפתח הקובץ עם השם והכתובת הנתונים במשתנה filePath, תוכנו יישמר לתוך משתנה מסוים ויעובד על המשתנה, קרי, תבוצע פעולת **קריאה** מהקובץ. בסיום הרצת הפעולות הללו, ייסגר הקובץ `( close file filePath )`.

שימו לב כי אירועים ב-HyperTalk, כגון אירוע לחיצת העכבר על ידי המשתמש, מתחילים במילה השמורה `on`,שלאחריה שם האירוע ומסתיימים במילה השמורה `end`שלאחריה גם כתוב שם האירוע. התניות, כלומר, ביטויי if ו-then, יסתיימו בביטוי `end if` ("סיים את המקטע של התנאי").

ראו גם
------

* ECMAScript
* AppleScript

קישורים חיצוניים
----------------

* HyperTalk, באתר אנציקלופדיה בריטניקה (באנגלית)

הערות שוליים
------------

1. ↑  **מחרוזת** היא אוסף של תווים. מחרוזות נכתבות בדרך כלל בתוך גרשיים כפולים, לדוגמה: "dog", ו "hello world 1234 !!! "הן מחרוזות.

|  |  |
| --- | --- |
| בקרת זהויות עריכת הנתון בוויקינתונים | 
* NLI: 987007529822005171
* LCCN: sh88000439

 |