שפות תכנות פרק 1 צעדים ראשונים

43
1 פרק צעדים ראשונים "וכי אין כל אלו דקדוקי עניות?", אתה עשוי לשאול, ולהוסיף ולהקשות: "וכי חשוב הדבר כל דווקא?"writeln או שמאprintf כך אם כדי להציג טכסט מסויים, עלי לכתוב אכן, לפרקים, אין הדבר חשוב כלל וכלל, שהלא אם איש אמיד, נשוא פנים ורב נכסים אתה, לֶ מה לך לטרוח בכל אלו. השלך נא במטותא שתי פרוטות או אסימון שחוק אחד אל קופתו שׁ ל עמל יומו, הוא יבצע אתֶ מתכנת קשה יום, והוא אשר ייגע עצמו בכל הקטנות הללו, ובסופו שׁ כל אלו בעבורך. אלא, שאם נסתחפה שדך, ומתכנת אתה, אין בידך ברירה: על כרחך אתה למד את דקדוקי רק חרס תעלה בידך ומפח נפש יהיה מנת חלקך. ישPrintf העניות הללו. שאם תקליד חו"ח ל הגולם איתו נגזר עליך לעבוד, ואם חפץֶ , כך ולא אחרת, כך חשקה נפשו שׁprintf לכתוב אתה שהוא יציית להגיגיך, עליך לבטאם בשפה המובנת לו.printf- אומר אתה, "ובכן, אין בכך כלום! אחבוש ספסל ואלמד את שפתו! חשקה נפשו ב דווקא? יהי כן! מה בכך? סוף סוף, כמה מילים יש לו?" דא עקא, שאמנם מילים הרבה אין לו, אבל, לא שפה אחת יש לו, ולא שבעים לשונות הוא ל לשונות יש לגולם הזה, וחכמי הדור, מוסיפים עליהם מדי יום. גם אםֶ דובר. אלפי אלפים שׁ ה ארוכת השנים, אין מספיקין בידך, ולא תוכלָ חוּפְ לַ ַ ירבו לך משמיים בריאות, כח ועזוז כּ ללמוד את כל הלשונות המשונות הללו. אם כן, בואה, התחכמה לו! אין לך ללמוד לא לשון אחת ולא שבעים, אלא את תורת הסוד המסתתרת מאחורי כל השפות. למדת אותה, ומצא לך! לא תהא שפה העומדת בפני כוחותיך. ולא זו בלבד, אם חריף שכל ואמיץ תבונה אתה, אף אתה לחכם הדור תחשב, ותוכל אף אתה לשעשע נפשך ולהוסיף אף אתה לשון כזו משלך. יםִ נָ יְ נִ עָ ןהֶ כֹ 2 ................................... שלום, עולם!1.1 4 ........................... מרכיבים דקדוקיים יסודיים1.2 7 ................................... אוצר המילים1.3 7 .............................. הצורך במזהים1.3.1 7 ............................ הגדרת מזהה חוקי1.3.2 8 .................... אבחנה בין אותיות גדולות וקטנות1.3.3 8 ................... הגבלת מזהים לישויות מסוג מסויים1.3.4 1

Upload: moshonn13126

Post on 29-Dec-2015

64 views

Category:

Documents


24 download

DESCRIPTION

שפות תכנות פרק 1 צעדים ראשונים

TRANSCRIPT

Page 1: שפות תכנות פרק 1  צעדים ראשונים

1 פרק

ראשונים צעדים

כל הדבר חשוב "וכי ולהקשות: ולהוסיף לשאול, עשוי אתה עניות?", דקדוקי אלו כל אין "וכידווקא?" writeln שמא או printf לכתוב עלי מסויים, טכסט להציג כדי אם כך

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

בעבורך. אלו כל

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

לו. המובנת בשפה לבטאם עליך להגיגיך, יציית שהוא אתה

printf-ב נפשו חשקה שפתו! את ואלמד ספסל אחבוש כלום! בכך אין "ובכן, אתה, אומרלו?" יש מילים כמה סוף, סוף בכך? מה כן! יהי דווקא?

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

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

הענינים תכן2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . עולם! שלום, 1.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . יסודיים דקדוקיים מרכיבים 1.27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . המילים אוצר 1.37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . במזהים הצורך 1.3.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . חוקי מזהה הגדרת 1.3.28 . . . . . . . . . . . . . . . . . . . . וקטנות גדולות אותיות בין אבחנה 1.3.38 . . . . . . . . . . . . . . . . . . . מסויים מסוג לישויות מזהים הגבלת 1.3.4

1

Page 2: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

8 . . . . . . . . . . . . . . . . . . מילים כמה של מהלחם הבנוי מזהה 1.3.510 . . . . . . . . . . . . . . . . . . . . . . . . . . . מזהים וסוגי שמורות מילים 1.410 . . . . . . . . . . . . . . . . . . . . . . רקורסיבית מוגדרות קבוצות 1.4.111 . . . . . . . . . . . . . . . . . . . . . . . . . לשגרות שמורים מזהים 1.4.212 . . . . . . . . . . . . . . . . . . . . . . . . . . מראש מוגדרים מזהים 1.4.312 . . . . . . . . . . . . . . . . . . . . . . . . . . . . מזהים סוגי סיכום: 1.4.413 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . מהספריה מזהים יבוא 1.514 . . . . . . . . . . . . . . . . . . . . . . שמורה מילה באמצעות יבוא 1.5.114 . . . . . . . . . . . . . . . . . . . . . . מקדים עיבוד באמצעות יבוא 1.5.215 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . אוטומטי יבוא 1.5.316 . . . . . . . . . . . . . . . . . . . . הביצוע התחלת ונקודת העבודה סביבת 1.617 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . האוטרקית הגישה 1.6.118 . . . . . . . . . . . . . . . . . . . . . . . . . . . . המטאפיסית הגישה 1.6.218 . . . . . . . . . . . . . . . . . . . . . . . . . . . . ההוליסטית הגישה 1.6.319 . . . . . . . . . . . . . . . . . . . . . . . . . . . אינטראקטיבי ביצוע 1.6.421 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . בלוקים מסגור 1.721 . . . . . . . . . . . . . . . . . . . . . . . . . . . ה-{} שפות משפחת 1.7.122 . . . . . . . . . . . . . . . . . . . . . . . . . . אוקאם של המינימליזם 1.7.222 . . . . . . . . . . . . . . . . . . . . . . . . . . begin…end-ה שיטת 1.7.323 . . . . . . . . . . . . . . . . . . . . . . הבלוק. בסוגר הפתיח אזכור 1.7.424 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . if…fi-ה שיטת 1.7.524 . . . . . . . . . . . . . . . . . . . . . . . . . . . . מסיימים לעומת מפרידים 1.824 . . . . . . . . . . . . . . . . . . . . . . . . . . . . ספראטיסטי דקדוק 1.8.126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . טרמינסטי דקדוק 1.8.226 . . . . . . . . . . . . . . . . . . . . . ספראטיסטי-טרמיניסטי דקדוק 1.8.326 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ליברלי דקדוק 1.8.427 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . הערות 1.927 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . שורה הערות 1.9.127 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . בלוק הערות 1.9.228 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . מקוננות הערות 1.9.330 . . . . . . . . . . . . . . . . . . . . . . . . . . . הערות של סמנטיקה 1.9.430 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . סדרית מילולוני 1.1032 . . . . . . . . . . . . . . . . . . . . . . . סדרית מילולוני עבור דקדוק תכנון 1.1132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . האורך הצהרת 1.11.133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . המילוט שיטת 1.11.234 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . הגדר הכפלת 1.11.335 . . . . . . . . . . . . . . . . . . . . . . . . . . מסגור אפשרויות ריבוי 1.11.436 . . . . . . . . . . . . . . . . . . . . מיוחדים ותוים ארוכים מילולונים 1.11.539 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . תרגילים 1.1241 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . מונחים מילון

לם! ע ם, של 1.1

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

text editor=1עורךIDE: Interactive Development Environment=אינטראקטיבית פיתוח 2סביבת

2

Page 3: שפות תכנות פרק 1  צעדים ראשונים

לם! ע ם, של .1.1

לדעת ויש (ב), הללו הקבצים את לנהל כיצד לדעת כדי ההפעלה3, מערכת את מעט להכיר יש(ג). המהדר4 את להפעיל כיצד

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

בשפה. פשוטה תכנית כתיבתכל כזו. פשוטה תכנית היא (“Hello, World!” program (ובאנגלית לם!" ע ם, "של תכניתמסורת הצג. פני על האנגלית בשפה לם!" ע ם, "של הסדרית5 את להציג הוא עושה היא אשר

זו. תכנית דווקא ראשונה כתכנית לכתוב היא עתיקה

אכתוב ,C שפת של הלימוד בספר הוא המסורת של שתחילתה וכיוון בזריזות, זאת אדגיםזו. בשפה לם!" ע ם, "של התכנית את ראשית

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

% rm −f hello.c; cat << EOF > hello.c/*** hello.c: My first C program; it prints** "Hello, World!", and dies.*/

#include <stdio.h>

int main(int argc, char *argv[], char **envp){

printf("Hello, World!\n");return 0;

}EOF

אחרת פקודות מעטפת או bash את מעט מכיר אתה אם הזרז7. את מציין % הסימן bash-ב תזכורת,שכתבתי הפקודות8 שתי את לזהות ודאי תוכל יוניקס, דמויית בסביבה או יוניקס בסביבת הפועלת כלשהימעתיקה cat הפקודה מבראשית. הקובץ ויצירת קיימת, זו אם הקובץ של קודמת גירסה מחיקת כאן:

התכנותית11 הלשון מטבע ואילו הסטנדרטי10, הפלט אל הסטנדרטי9 מהקלט

cat << EOF

operating systems=ההפעלה 3מערכתcompiler=4מהדרstring=5סדרית

command shell=הפקודות 6מעטפתprompt=7זרז

command=8פקודות

standard input=הסטנדרטי 9קלט

standard output=הסטנדרטי 10פלט

programmatic idiom=התכנותית הלשון 11מטבע

3

Page 4: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

לבדה. EOF המילה מופיעה שבה שורה תופיע בקלט אשר עד הסטנדרטי מהקלט העתקה משמעו

1.1 איור למשל הנה בעורך. להשתמש היא הקובץ, את להכין יותר יעילה אחרת, דרך.hello.c הקובץ הכנת לשם עלי, החביב העורך ,gvim בעורך שימוש מדגים

gvim העורך באמצעות C תכנית המכיל קובץ עריכת :1.1 איור

בסביבת הקובץ את להדר כדי אותו. להדר עלי נוצר, שהקובץ לאחר כך, ובין כך, ביןאכתוב: שלי, החישוב

% cc hello.c

לכתוב: הוא התכנית, את להריץ כדי לעשות לי שנותר כל כך, ואחר

% ./a.outHello, World!

להדרה הזו, הפשוטה התכנית את ליצור בכדי הנדרשת הפעולות סדרת הרואות, עיניךבפעולות אמצעית בלתי התנסות מכך: מנוס אין אבל, מורכבת. מעט להיות עשוייה ולהפעילה,

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

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

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

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

ושוב. שוב עצמן על חוזרות אשר

במנגנון המתכנת את לצייד הצורך עם להתמודד חייבת תכנות שפת כל הגדרת למשל, כךבעיות בעבור השפות מתכנני בוחרים בהם הפתרונות אף כי נראה אנו הערות12. לכתיבת

comment=12הערות

4

Page 5: שפות תכנות פרק 1  צעדים ראשונים

יסודיים דקדוקיים מרכיבים .1.2

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

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

יסודיים דקדוקיים מרכיבים 1.2

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

.hello.c הקובץ הצגת

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

זה. צורך המשרתות תכנה ספריות13 שישנן עד נפוצה,

של דקדוקית בהבלטה התומכת gtksourceview בשם ספריה ישנה למשל, בגנו/לינוקסהיכולת תכנות. שפות משבעים ביותר תומכת gtksourceview של רגילה התקנה שונות. שפותאינה השונים היסודיים המרכיבים שרשימת בכך מוסברת שפות של רב כה במספר לתמוך

עיקריים: סוגים שישה מכילה כלל בדרך והיא ארוכה,

וסדרית. תו ממשי, מספר שלם, מספר של מסוג מילולונים14 .1

הערות .2

שמורות15 מילים .3

מזהים16 .4

והצבה. מתימטיים אופרטורים כגון שונים, פעולה סימני .5

השונים. התכנית חלקי את לזהות ולמהדר לקורא המסייעים שונים, פיסוק סימני .6

אף ייחודית. ויזואלית להבלטה כלל בדרך הזוכים אלו הם הראשונים הסוגים שלושת1.1 תכנית היסודיים. הדקדוקיים המרכיבים להבלטת ויזואליות במוסכמות17 נשתמש זה בספר

אלו. במוסכמות שימוש תוך שכתבתי hello.c התכנית את שוב מציגה

ם, "של תכנית למשל נכתוב הנה אחרות. תכנות שפות בעבור גם תשמשנה אלו מוסכמותפסקל. בשפת לם!" ע

library=13ספריות

literal=14מילולונים

reserved word=שמורות 15מיליםidentifier=16מזהים

convention=17מוסכמות

5

Page 6: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

1/*2** hello.c: My first C program; it prints3** ”Hello, World!”, and dies.4*/

6#include <stdio.h>

8int main(int argc, char *argv[], char **envp)9{10printf("Hello, World!\n");11return 0;12}

C בשפת לם!" ע ם, "של :1.1 תכנית

% rm hello.p; cat << EOF > hello.p{hello.p: My very first Pascal program. It does not dotoo much−−−it prints the string "Hello, World!" (followedby a new line), and then terminates.}

program HelloWorld(output);begin

WriteLn('Hello, World!')end.EOF

שגיתי שלא לבדוק כדי אהדר, זו תכנית את גם

% pc hello.p

לעשות. עליה אשר את עושה אכן שהיא לבדוק בכדי התכנית, את אריץ וכמובן,

% ./a.outHello, World!

שלנו. במוסכמות שימוש תוך שכתבתי הפסקל תכנית את מציגה 1.2 תכנית כעת,

1{hello.p: My very first Pascal program. It does not do2too much−−−it prints the string ”Hello, World!” (followed3by a new line), and then terminates.}

5program HelloWorld(output);6begin7WriteLn('Hello, World!')8end.

פסקל בשפת לם!" ע ם, "של :1.2 תכנית

ברוחב בגופן תכניות לכתוב נוהגים אנו ,1.2 בתכנית והן 1.1 בתכנית הן לראות שניתן כפי

6

Page 7: שפות תכנות פרק 1  צעדים ראשונים

המילים אוצר .1.3

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

יחסי19..return-ו char ,int :C בשפת שמורות מילים שלוש לזהות יכולים אנו 1.1 בתכנית בעיוןשהדבר כמה עד בהמשך, שנווכח וכפי שמורה, מילה אינה #include ההוראה זאת, לעומת

.C בשפת בעצם כתובה אינה כולה 6 שורה מבלבל,program המילה פסקל: בשפת שמורות מילים שלוש לזהות יכולים אנו 1.2 בתכנית בעיוןוהמילה לביצוע, הפקודות תחילת את המציינת begin המילה התכנית, תחילת את המציינת

לביצוע. הפקודות רשימת סוף את המציינת end

C בשפת שהצגנו. התכניות בשתי האחרים היסודיים הדקדוקיים המרכיבים את לזהות גם קלmain (המילה מזהים שני ,(1.1 בתכנית 1-4 שורות על (המשתרעת אחת הערה רואים אנושלם מספר מסוג המילולון את ,(10 (בשורה סדרית מסוג המילולון את ,(printf והמילה

שונים: פיסוק סימני שמונה וכן (11 בשורה 0 (המספר

( ) { } [ ] ; *

,HelloWorld (המילים מזהים שלושה ,(1 (בשורה אחת הערה רואים אנו 1.2 בתכניתהבאים: הפיסוק סימני ארבעת ואת (WriteLn-ו output

( ) ; .

כלל. פעולה סימני אין שלעיל, התכניות בשתי זאת, לעומת

המילים אוצר 1.3

מילים במונחים השתמשתי שכתבתי, לם!" ע ם, "של תכניות שתי של תכנן של לעיל בהסברכדאי זאת, ובכל מחשב, תכנית שכתב מי לכל ודאי מוכרים הללו המונחים ומזהים. שמורותנבחין כך, אחר התכנות. שפת של המילים אוצר מוגדר שבו באופן ולדון משמעותם, את להזכירספריה22, מזהי מראש21, המוגדרים מזהים שמורים20, מזהים ובהם השונים, המזהים סוגי בין

סתם. ומזהים

במזהים הצורך 1.3.1

מודולארי. באורח תמיד כמעט נעשה והתיאור חישובי, תהליך מתארת מחשב תכנית כידוע,

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

אותן. המכילות יותר מורכבות סדרות לבנות כדי

monospace font=קבוע ברוחב 18גופןproportional font=יחסי 19גופן

reserved identifier=שמורים 20מזהיםpredefined identifier=מראש המוגדרים 21מזהים

library identifier=ספריה 22מזהי

7

Page 8: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

כך ואחר שמות, הללו לפונקציות נותן פונקציות, מגדיר המתכנת ,C בשפת למשל כךלהגדיר ובכך אחרות, מפונקציות אליהן לפנות כדי לפונקציות, ניתנו אשר בשמות משתמש

יותר. מורכבות פונקציותולישויות26 לטיפוסים25, לקבועים24, למשתנים23, שמות לתת ניתן שמות. יש לפונקציות רק לאישות מזהה הוא הוא: כן כשמו ומזהה מזהה. נקרא כזו ישות של שם בתכנית. המופיעות אחרות

שנוצרה. אחרי אליה לפנות ומאפשר

חוקי מזהה הגדרת 1.3.2

מזהה ,C בשפת למשל, כך חוקי. מזהה מהו המגדירים כללים מכיל התכנות שפת של הדקדוקהוא:

,a-z קטנה לטינית אות ,A-Z גדולה, לטינית אות להיות היכולים תוים של סדרהבספרה. מתחילה אינה זו שסדרה ובלבד ,_ התחתון27 הקו תו או 0-9 ספרה

המזהים בקהל כן ועל אלו, בכללים עומדות ,1.1 בתכנית שראינו printf-ו main המיליםתחשבנה. הן

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

יכול מזהה TEX של המקרו בשפת להרגיז: אפילו העשויים הכלל, מן יוצאים ישנם כרגיל,אות בן להיות היה יכול מזהה בייסיק, שפת של מוקדמות ובגירסאות בלבד, אותיות להכיל

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

וקטנות גדולות אותיות בין אבחנה 1.3.3

הבחנה כל אין אלו, בשפות וקטנות, גדולות אותיות בין מבחינות אינן אשר שפות ישנן ראשית,היסטורית להיות יכולה השפה, של כזה לתכנון הסיבה .hello-ו ,Hello ,HELLO המזהים ביןוקטנות), גדולות אותיות בין הבדיל לא התוים אוסף שבהם מחשבים על פותחה פסקל (שפתאו מבלבלת הינה וגדולות, קטנות אותיות בין האבחנה השפה, מתכנן לדעת אם עקרונית, או

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

variable=23משתניםconstant=24קבועיםtype=25טיפוסיםentity=26ישויות

underscocre=התחתון הקו 27תו

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

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

class=29מחלקה

8

Page 9: שפות תכנות פרק 1  צעדים ראשונים

המילים אוצר .1.3

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

תכנית עדיין היא למוסכמות, מצייתת שאינה ותכנית הללו, המוסכמות את אוכף אינו המהדרכאשר התכנית: כתיבת על מקלות שהן בכך הללו, למוסכמות חשיבות יש זאת, בכל חוקית..hello או ,HELLO המחלקה את לכנות אם להתלבט צריך הייתי לא ,1.7 תכנית את כתבתי

למחלקה. Helloבמזהה והשתמשתי המוסכמות, לפי מוכני באורח פעלתי

הפקודה מופיעה ג'וה בתכנית כאשר הקורא. על גם מקל במוסכמות שימוש

foo.bar();

הפונקציה מופעלת עליו אשר למשתנה, מתייחס foo המזהה כי לנחש, מתחיל לכל קלהכתיב זאת, לעומת .bar()

Foo.bar();

סטאטית30 לפונקציה מתייחס bar המזהה וכי ,Foo הוא שמה אשר במחלקה מדובר כי רומזבתוכה. המוגדרת

למשל, אייפל בשפת לשפה. שפה בין להשתנו עשויות הללו המוסכמות כי לב לשים צריךלתת דווקא מקובל C# ]?[ ובשפת גדולות, באותיות כולו נכתב מחלקה של המזהה כי מקובל

גדולה. באות המתחילים שמות לפונקציות

מסויים מסוג לישויות מזהים הגבלת 1.3.4

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

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

ממשי. מספר הוא X-באות מתחיל שמו אשר משתנה של הטיפוס

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

לפונקציה. ורק אך להתייחס

מילים כמה של מהלחם הבנוי מזהה 1.3.5

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

לפונקציה. ביותר סביר שם הוא Γ השם מתימטי, אלגוריתם של

static=30סטאטית

9

Page 10: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

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

.file_open

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

.open המילה עם file המילה של מהלחם שמורכב המזהה את לציין כדי fileOpen

בשורה WriteLn כתבתי כאשר וקטנות. גדולות אותיות בין מבחינה אינה פסקל שפת כזכור,המילה בין להפריד כדי PascalCase בשם הידועה במוסכמה השתמשתי ,1.2 בתכנית 7 מס'PascalCase-ב הזה. המזהה את להציג כדי ,(line למילה קיצור (שהיא ln המילה ובין writeמבחינה אינה שפסקל שכיוון לכך לב (שים גדולה. באות מתחילות המולחמות המילים כלכלל.) מהתכנית לשנות מבלי WRITELN או writeln לכתוב יכולתי וקטנות גדולות אותיות בין

להופיע יכול החיסור פעולת לציון כלל בדרך המשמש ,(-) המקף סימן קובול, בשפתמזהים של קטן לא מספר רואים אנו קובול), בשפת לם!" ע ם, ("של 1.3 בתכנית במזהה.

מקף. בתוכם המכילים

1IDENTIFICATION DIVISION.2PROGRAM−ID. HELLO−WORLD.

4*** Hello, World! in the COBOL programming language

6ENVIRONMENT DIVISION.7CONFIGURATION SECTION.8SOURCE−COMPUTER. RM−COBOL.9OBJECT−COMPUTER. RM−COBOL.

11DATA DIVISION.12FILE SECTION.

14PROCEDURE DIVISION.

16MAIN−LOGIC SECTION.17BEGIN.18DISPLAY " " LINE 1 POSITION 1 ERASE EOS.19DISPLAY 'Hello, World!' LINE 15 POSITION 10.20STOP RUN.21MAIN−LOGIC−EXIT.22EXIT.

קובול בשפת לם!" ע ם, "של :1.3 תכנית

דבר מזהים, בתוך המופיעים מרווחים מתעלמת פורטרן שפת גם כמו ,68 אלגול שפת

10

Page 11: שפות תכנות פרק 1  צעדים ראשונים

מזהים וסוגי שמורות מילים .1.4

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

מזהים וסוגי שמורות מילים 1.4

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

.int הוא שמה אשר C בשפת פונקציה לכתוב ניתן לא מזהה. אינה היא

רקורסיבית מוגדרות קבוצות 1.4.1

משמשות השמורות המילים רבים, במקרים השמורות? המילים כן אם משמשות צרכים לאילועוד יש כאלו. בבירור הן פסקל בשפת end-ו begin ,program המילים פיסוק. סימני כעיןנתמקד אנו כאן אלו. כל את למנות המקום זה ואין השמורות, למילים אחרים רבים שימושיםישויות לזיהוי משמשות שמורות מילים לעיתים, שמורות. מילים של חשוב אחד בשימוש

הבאה: להגדרה נזדקק אטומית, ישות המונח את להבין כדי "אטומיות".

התבנית פי על בנויה הקבוצה הגדרת אם רקורסיבית31 מוגדרת היא כי קבוצה על נאמרהבאה:

יסודיים. ערכים של וקצרה סופית כלל בדרך רשימה, .1

מורכבים וערכים היסודיים מהערכים מורכבים ערכים של לבניה מנגנונים או מנגנון .2אחרים.

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

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

בפקודה נעיין אם אבל, אטומית. פקודה היא הצבה33 פסקל, בשפת

a := b + c;

הפקודה זאת, בכל .b+c הביטוי למשל מרכיבים, תתי בה לזהות נוכל אטומית, פקודה שהיאבעצמו. פקודה שהוא תת-מרכיב בה לזהות ניתן לא שכן פרימטיבית, פקודה היא לעיל

בפסקל, הבאה הפקודה זאת, לעומת

recursively defined set=רקורסיבית 31מוגדרתexpression=32ביטוייםassignment=33הצבה

11

Page 12: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

begina := b + c;

end

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

קבוצה היא אף פסקל) שפת של הטיפוסים קבוצת גם (כמו C שפת של הטיפוסים קבוצתמיחידות מורכבים הם כי לזהות ניתן אשר מורכבים, טיפוסים ישנם רקורסיבית: המוגדרתאת יותר קטנות כיחידות לזהות ניתן למשל רשומה בטיפוס טיפוסים. הן אף אשר יותר, קטנותמורכב34, טיפוס הוא רשומה של שהטיפוס אומרים אנו הרשומה. את הבונים השדות טיפוסי

טיפוסים. הן אף אשר תתי-יחידות בו שיש משום

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

כאלו. לטיפוסים דוגמאות

שמורות מילים שלם. מספר של האטומי הטיפוס את מזהה C בשפת int השמורה המילהשמור. מזהה נקראות כמזהים המשמשות

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

אחרת. לשפה הזה המזהה את לקשור

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

.C בשפת פונקציה כגון המורכבות, החישוביות הפעולות ישנן וכנגדן

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

הפקודה שמורה. מילה

return 0;

כזו. שמורה במילה שימוש עושה ,1.1 בתכנית 11 בשורה אשר

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

compound type=מורכב 34טיפוס

12

Page 13: שפות תכנות פרק 1  צעדים ראשונים

מזהים וסוגי שמורות מילים .1.4

לשגרות שמורים מזהים 1.4.2

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

קלט. וקבלת פלט

באמצעות נעשית אליהן והגישה השפה, לתוך בנויות ופלט קלט של פעולות בהן שפות ישנן.1.4 בתכנית כמודגם ,[?] AWK בשפת המצב כזהו שמורים. מזהים

1#!/usr/bin/gawk −f

3#4# ”Hello, World!” in the AWK programming language5#

7BEGIN {8print("Hello, World!")9exit10}

AWK בשפת לם!" ע ם, "של :1.4 תכנית

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

.AWK שפת מהגדרת חלק

מראש מוגדרים מזהים 1.4.3

הנוהגת מזו שונה מעט היא ופלט קלט של בפעולות שימוש פסקל שפת מאפשרת שבו האופןהמוגדרים מזהים הוא והפלט הקלט פעולות של שמן שמורות, מילים במקום .AWK בשפתשגרה זוהי כזו. בדיוק היא ,1.2 תכנית של 4 בשורה נקראה אשר WriteLn35השגרה מראש.יכול אינו המתכנת כלומר, אליה. גישה אין למתכנת ואשר פסקל, התכנות בשפת הבנויההשגרה את אחר באופן מחדש לממש יכול אינו אף והוא השגרה, של המימוש אופן את לבחון

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

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

output המילה שגם רואים אנו כחול. בצבע מראש המוגדרים המזהים נצבעו 1.2 בתכניתבו. נעמיק לא אנו אך מראש, מוגדר מזהה מהווה היא אף זו מילה זה. בצבע צבועה

מסתבר ?C בשפת printf הפונקציה מומשה כיצד בפסקל? WriteLn השגרה מוממשה כיצדהפעולות באמצעות רק אותן לממש אפשר אי מורכבות, חישוביות בפעולות שמדובר אף על כיהזה. הפער נסגר כיצד בה למשתמש מגלה אינה פסקל שפת שבשפה. האטומיות החישוביות

routine=35שגרה

13

Page 14: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

בסביבת מובנההעבודה

חשוף מימושובר למתכנת

ידו על שינוי

מפני מוגן שםנוספים שימושים

דוגמא סוג

כן לא כן AWK בשפת print שמור מזההכן לא לא פסקל בשפת WriteLn מראש מוגדר מזההכן כן לא C בשפת printf ספריה מזההלא כן לא 1.2 בתכנית HelloWorld אחר מזהה

תכנות בשפות מזהים סוגי :1.1 טבלה

.printf את לממש אפשר שבאמצעותה אחורית" "דלת מכילה ,C שפת של ההגדרה זאת, לעומתבשפת חישוביות פקודות C שפת מתוך להפעיל היכולת הן היא זו אחורית דלת של מהותהשל הגדרתה ההפעלה. מערכת של לשירותים ישירות C משפת לקרוא היכולת והן מכונה,המתכנת יכול אותן הפעולות כזו---כל אחורית דלת המשתמש בפני חושפת אינה פסקל שפתWriteLn של המימוש כמובן, אך עצמה. השפה מהגדרת כחלק מוגדרות פסקל בשפת לעשותעצמה. לשפה מחוץ המצויים במנגנונים להשתמש חייב בשפה) למשתמש חשוף אינו (אשר

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

מחדש. אותה לממש המתכנת בידי נתונה והרשות

מזהים סוגי סיכום: 1.4.4

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

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

כלל. מראש מוגדרים מזהים אין

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

שמורים. מזהים באמצעותשהכרנו. המונחים באמצעות ,[?] Go בשפת לם!" ע ם, "של תכנית ,1.5 תכנית את ונבחן הבה

בתכנית, מופיעות אשר שבשפה השמורות שהמילים להסיק קל ,Go שפת את להכיר מבלי אףתכנותית. ישות של בשמה נוקבות אינן שהן משום מזהים, בבחינת אינן ,func-ו ,import ,package

ספריה. מזהה היא הסדרית, להצגת אחראית אשר Printf הפונקציה שם לעומתן,

14

Page 15: שפות תכנות פרק 1  צעדים ראשונים

מהספריה מזהים יבוא .1.5

1// Hello world in the Go programming language2package main3import "fmt"4func main() {5fmt.Printf("Hello, World!\n")6}

Go בשפת לם!" ע ם, "של :1.5 תכנית

מהספריה מזהים יבוא 1.5

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

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

נעשה. הדבר שבו האופן את תגלה ספריה

שמורה מילה באמצעות יבוא 1.5.1

ההוראה באמצעות נעשה מהספריה מזהים של היבוא Go בשפת הכתובה 1.5 בתכנית

import "fmt"

המזהה. ליבוא36 אחראית השפה של שמורה מילה ובה ,3 מס' בשורה המצוייה

ההוראה וכי fmt שמה אשר חבילה בתוך מצוייה Printf שהפונקציה לכך לב נשים

import "fmt"

כולה. החבילה את מייבאת,fmt החבילה מתוך נלקחת שהיא מציינת Printf לפונקציה שהקריאה לכך גם לב נשים

:1.5 בתכנית 5 מס' בשורה ככתוב

fmt.Printf("Hello, World!\n")

זו בשפה הכתובה לם!" ע ם, "של בתכנית עיון ספריה. במזהי משתמשת עדה שפת גםאחרות. הן המילים כי אם ,Go שפת של לזה לחלוטין כמעט זהה מבנה מגלה ,(1.6 (תכנית

.Text_IO הוא שמה אשר בחבילה מצוייה והיא ,Put_Line הוא עדה בשפת הפלט פעולת שםההוראה

with Text_IO;

import=36יבוא

15

Page 16: שפות תכנות פרק 1  צעדים ראשונים

������� ����� 1. ���

1−− Hello, World! in the Ada programming language2with Text_IO;3procedure Hello_World is4begin5Text_IO.Put_Line("Hello, World!");6end Hello_World;

עדה בשפת לם!" ע ם, "של :1.6 תכנית

חבילה לייבא בכדי עדה שפת של שמורה במילה משתמשת היא אף בתכנית) 2 מס' (שורההחבילה את מציינת Text_IO של ההפעלה עדה, בשפת אף ועוד, זאת, התכנית. לתוך זו

המכילה:

Text_IO.Put_Line("Hello, World!");

מקדים עיבוד באמצעות יבוא 1.5.2

C בשפת הכתובה 1.1 בתכנית אחר. מעט באופן נעשה הספריה מזהי של היבוא C בשפתההוראה כך על אחראית

#include <stdio.h>

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

ההידור. ביצוע לשם עצמו למהדר כקלט הללו

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

#include <stdio.h>

יחפש אותו ואשר ,stdio.h שמו אשר קובץ של בתוכנו המקדים המעבד ידי על תוחלףהפונקציה את מתאר זה קובץ של תוכנו הקבצים. במערכת שונים במקומות המקדים המעבד

התכנית. משתמשת בה אשר printf

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

% cpp −P hello.c > hello.P.c

הקבצים: שני של גדלם את נשווה הבה

% wc −l hello.c

preprocessor=המקדים 37המעבד

16

Page 17: שפות תכנות פרק 1  צעדים ראשונים

הביצוע התחלת ונקודת העבודה סביבת .1.6

12 hello.c

% wc −l hello.P.c355 hello.P.c

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

printf הפונקציה את המגדירה

% grep −n "\<printf\>" hello.P.c225:extern int printf (__const char * __restrict __format, ...);353: printf("Hello, World!\n");

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

התכנות.

אוטומטי יבוא 1.5.3

שאף מסתבר ג'וה. בשפת לם!" ע ם, "של תכנית ,1.7 בתכנית נעייין היבוא, בשאלת הדיון לסיוםאת שם תגלה לא 1.7 תכנית של שבדיקתה אלא, הספריה, מזהי של יבוא לבצע יש זו בשפה

היבוא. פקודת

1// Hello.java: my first Java program. It prints2// the string ”Hello, World!” on the standard output3// stream, and then terminates.

5class HelloWorld {6static public void main(String args[]) {7System.out.println("Hello, World!");8}9}

ג'וה בשפת לם!" ע ם, "של :1.7 תכנית

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

האמורים.

הביצוע התחלת ונקודת העבודה סביבת 1.6

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

preprocessing=המקדים 38העיבוד

17

Page 18: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

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

כאלו---שגרות. בלוקים של נוסף סוג ישנו פסקל בשפת פונקציה. בשם

כל בתוך ההוראות. ביצוע סדר את לקבוע צורך יש בתכנית, אחת מהוראה יותר יש אםתבוצע מסויימת, בקבוצה מסויימת הוראה ביצוע אחרי כלל, בדרך מוגדר: הסדר קבוצהההוראה את יבצע AWK של שהמפרש39 אחרי 1.4 בתכנית למשל כך אחריה. הבאה ההוראה

print("Hello, World!")

.(9 מס (שורה exit העוקבת ההוראה את יבצע הוא (1.4 בתכנית 8 מס' (שורה

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

סיימה. האחרת הקבוצה כאשר

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

זה. במנגנון התכנית השתמשה וכיצד ההתחלה, נקודת לקביעת התכנות

הכלול הקוד של מדוייקת קביעה כלומר, התכנית: גבולות התווית של זה הוא קשור עניןprintf הפונקציה של המימוש כי למעלה נאמר כאשר בה. כלול אינו אשר והקוד בתכניתקביעה בתוכה כוללת התכנית גבולות התווית הרי הסטנדרטית", ה"ספריה שקראנו במה נמצא

הזו. הסטנדרטית" ב"ספריה כלול בדיוק מה של

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

לה. מחוץ מצויים

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

למעלה, כתבתי כאשר למשל, כך לעומקו. התהליך בהכרת צורך אין

% cc hello.c

,stdio.h הקובץ את בעבורי מצא אשר המקדים, המעבד את C שפת של המהדר הפעילהסטנדרטית מהספריה הנדרשים החלקים את לה מוסיף שהמהדר תוך התכנית, הודרה כך ואחר

לפעול. תוכל שהתכנית כדיגם קשורות אלו גישות הביצוע. תחילת נקודת לקביעת עיקריות גישות בשלוש להבחין ניתן

התכנית. גבולות נקבעים שבו לאופן

interpreter=39מפרש

18

Page 19: שפות תכנות פרק 1  צעדים ראשונים

הביצוע התחלת ונקודת העבודה סביבת .1.6

האוטרקית הגישה 1.6.1

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

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

בתכנית. הופעתם סדר פי על יהיה BEGIN-ב המסומנים הבלוקים

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

מהתכנית. חלק הוא זה בקובץ האמור וכל מצויה, היא שבו היחיד בקובץ

המטאפיסית הגישה 1.6.2

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

עצמה. התכנות שפת מהגדרת חלק אינה הזו ההתחלה נקודת

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

.main-ב הראשונה הפקודה היא printf-ל הקריאה ,1.1 בתכנית ובאמת, ,main הוא

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

מיקרוסופט. חברת של חלונות סביבת בעבור C בשפת לם!" ע ם, "של תכנית מציגה 1.8 תכנית.WinMain הוא הביצוע מתחיל ממנה הפונקציה שם זו שבסביבה רואים אנו

כתבתי כאשר כזכור,

% cc hello.c

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

ולהפעלתה. main לפונקציה הארגומנטים להכנת אחראי זה קוד קטע עצמה. התכנית

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

התכנות. שפת מהגדרת

19

Page 20: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

1/* Hello, World! in C for MS−Windows */

3#include <windows.h>

5int PASCAL WinMain(HINSTANCE hInstance,6HINSTANCE hPrevInstance, LPSTR CmdLine, int Show)7{8MessageBox(9GetActiveWindow(),10"Hello, World!",11"Hello Windows World",12MB_OK);13return 0;14}

מיקרוסופט חברת של חלונות בסביבת C בשפת לם!" ע ם, "של :1.8 תכנית

ההוליסטית הגישה 1.6.3

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

הביצוע. התחלת נקודת את זה ובכלל התכנית, של גבולותיה את המתכנת

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

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

עצמה. אייפל שפת של לדקדוק מאוד דומה המאגר

ג'וה. שפת אלו ובכלל אחרות מודרניות בשפות גם מופיעה ההוליסטית הגישה

אינטראקטיבי ביצוע 1.6.4

פקודה יש זו, בתכנית .OCaml בשפת לם!" ע ם, "של המדפיסה ,1.9 בתכנית כעת נסתכל

1(* Hello World in OCaml *)

3print_string "Hello, World!\n";;

OCaml בשפת לם!" ע ם, "של :1.9 תכנית

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

20

Page 21: שפות תכנות פרק 1  צעדים ראשונים

הביצוע התחלת ונקודת העבודה סביבת .1.6

הוא OCaml-ב הבסיסי החישוב מודל שכן יותר, מעט מורכבת שהתמונה תגלה בדיקה אךמשערכת ocaml ותכנת ביטוי, כותב המתכנת ,ocaml תכנית הפעלת לאחר אינטראקטיבי:

.1.2 באיור מודגם זה תהליך התוצאה. את ומציגה זה, ביטוי

ocaml בתכנת אינטראקטיבי שימוש :1.2 איור

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

לפני,

Objective Caml version 3.11.2

הביטוי את זה זרז אל הקלדתי כאשר .# הזרז את לי בהצגה נוסף, קלט ממני ביקשה ואחרשל הטיפוס את ocaml הציגה החישוב, בתום הביטוי. של ערכו את חישבה ocaml תכנת ,2+2את שוב לי והציגה ocaml חזרה אלו כל ולאחר .4 המספר ערכו, ואת ,int שהקלדתי, הביטוי

ממני. נוסף לקלט ממתינה שהיא לציין כדי הזרז,

הביטוי את הזרז אל הקלדתי כאשר

print_string "Hello, World!\n";;

הסדרית לפני הוצג לוואי, תוצאת היתה זה שלחישוב ומכיוון הביטוי, בחישוב ocaml הגיבה

Hello, World!

,unit זה, ביטוי של הטיפוס את ocaml הציגה שהקלדתי, הביטוי של החישוב תום לאחר40.() ערכו ואת

הקלט את המכיל קובץ להכין יכולתי ,ocaml תכנת עם האינטראקטיבית העבודה במקוםאליה:

והיא זה, בשלב חשובה אינה משמעותם .() הערך משמעות ואת unit הטיפוס פשר את מבין אינך 40אולי

בטיפוסים. לדון בבואנו יותר, מאוחר תבואר

21

Page 22: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

% cat << EOF >input.ml2+2;;print_string "Hello, World!\n";;EOF

הקלט תקרא היא שבו באופן ocaml את להפעיל אוכל ,input.ml הקובץ את שהכנתי ואחריזה: מקובץ שלה

% ocaml < input.mlObjective Caml version 3.11.2

# − : int = 4# Hello, World!− : unit = ()#

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

כרגיל:

% ocaml input.mlHello, World!

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

הוליסטית.

בלוקים מסגור 1.7

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

לקינון41. משמעות ואין בבלוקים, מאורגנות אינן הפקודות שבהן

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

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

nesting=41קינוןcloser=42פתיח

22

Page 23: שפות תכנות פרק 1  צעדים ראשונים

בלוקים מסגור .1.7

סופה המציינת התוים לסדרת או לתו ייוחד בריח43 השם ואילו ממוסגרת, ישות של פתיחתהכזו. ישות של

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

פשוט. אינו

ה-{} שפות משפחת 1.7.1

C שפת של השפעתה .{} מסולסלים בסוגריים ממוסגרים בלוקים (1.1 (תכנית C שבשפת ראינושפות של שלמה שמשפחה כך כל גדולה בלוקים, למסגור שלה המינימליסטית הגישה ושלכוללת והיא ה-{}, שפות משפחת בשם גם זו משפחה נודעת לעיתים שמה. על נקראת תכנות

ועוד. AWK שפת ,C# שפת ,C++ שפת ג'וה, שפת את השאר בין

לפקודות מתירה אינה שהיא בכך לקיצוניות, ה-{} שיטת את הביאה המודרנית Go שפתב-{}. ממוסגרת שאינה בודדת פקודה על לחלוש while-ו if כגון

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

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

אוקאם של המינימליזם 1.7.2

אוקאם44. התכנות שפת ידי על הותוותה ה-{} שפות משפחת של מזו יותר אף מינימליסטית דרךלהזיח45 מתכנתים נוהגים שבמילא מכיוון פקודות. של לבלוק בריח או פתיח אין אוקאם בשפתמידת פי על בלוקים של הקינון את קובעת אוקאם שפת מקונן, בבלוק הרשומות פקודות פנימה

הפקודות. של ההזחהזאת. מדגימה 1.10 תכנית

1−− Hello world in the Occam programming language2#INCLUDE "hostio.inc"3#USE "hostio.lib"4PROC hello.world (CHAN OF SP fs, ts)5SEQ6so.write.string.nl(fs, ts, "Hello, World!")7SEQ i = 1 FOR 108SEQ9so.write.int(fs, ts, i, 0)10so.write.nl(fs, ts)

אוקאם בשפת לם!" ע ם, "של :1.10 תכנית

opener=43בריח

הידוע התמציתיות, של הפילוסופי-לוגי העיקרון מיוחס שלו אוקאם, איש ויליאם של שמו על קרוייה 44השפה

אוקאם". של "תערו בשםindentation=45להזיח

23

Page 24: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

,7 מס' שבשורה (SEQ) סדרתי לביצוע בפקודה מקוננות 8-9 בשורות הפקודות למשל כך.6 מס' שבשורה הסדרתית בלולאה מקוננת מצידה וזו

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

begin…end-ה שיטת 1.7.3

פקודות של בלוק של שהפתיח בכך בעליל, שונה פסקל ששפת מראה 1.2 בתכנית חוזרת הצצהיש .end השמורה במילה מסומן הבלוק של הבריח ואילו begin השמורה במילה מסומנת

התכנית. של הקריאות את מגדיל מלאות במילים השימוש כי הטוענים

של המיוחדת משמעותן את להבין הקורא נדרש ממילא כי לומר אפשר זאת, טענה כנגדלמשמעות זהה אינה זו ומשמעות התכנות, בשפת שימוש בהן נעשה כאשר end-ו begin המילים

אלו. מילים של הטבעית בשפה

אוסף ואף קטן, היה המחשב ידי על ליצוג הניתן השונים התוים אוסף כאשר קדם, בימייתרון היה אחרת, במערכת המוכר לזה זהה בהכרח היה לא אחת, במערכת המוכר התויםמיוחדים. סימנים של קיומם על הסתמכות דרשה שלא begin…end-ה בשיטת בלוקים במסגור

קיימים. היו לא ו-{ { הסימנים ,CDC חברת של הרגיל התוים באוסף למשל, כך

הבלוק. בסוגר הפתיח אזכור 1.7.4

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

הבלוק. נפתח שבה בתכנית

נפוץ זה נוהג הבלוק. תחילת את להזכיר בכדי לבריח בצמוד הערה להוסיף הנוהגים יש.begin…end-ה שפות במשפחת יותר

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

(6 מס' (שורה כתבנו עדה, בשפת

end Hello_World;

.Hello_World שמה אשר הפרוצדורה סוף את לציין בכדיאוברון. בשפת והפעם נוספת, דוגמא מציגה ,1.11 תכנית

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

בשורה התחיל אשר הפקודות בלוק את מסיימת 14 מס' שורה בלוקים. שני יש בתכניתנכתב 10 מס' שבשורה הסיבה זו .9 מס' בשורה שהתחילה Do הפרוצדורה את ובעצם ,10 מס'

End Do.

24

Page 25: שפות תכנות פרק 1  צעדים ראשונים

בלוקים מסגור .1.7

1MODULE HelloWorld;2(* Hello, World! in Oberon for the Oberon System *)

4IMPORT Oberon, Texts;

6VAR7W: Texts.Writer;

9PROCEDURE Do*;10BEGIN11Texts.WriteString(W,"Hello, World!");12Texts.WriteLn(W);13Texts.Append(Oberon.Log, W.buf)14END Do;

16BEGIN17Texts.OpenWriter(W)18END HelloWorld.

אוברון בשפת לם!" ע ם, "של :1.11 תכנית

את זאת עם ויחד ,16 מס' בשורה התחיל אשר הפקודות בלוק את מסיימת 18 מס' שורהנכתב 18 מס' שבשורה הסיבה זו .1 מס' בשורה התחיל אשר HelloWorld המודול

END HelloWorld.

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

אוברון.

השמורה המילה הוא הפתיח שבהן שפות יש .begin…end-ה לשיטת רבים ואריאנטים ישפתיח אין שבהן שפות אף וישנן ,end השמורה המילה או done השמורה המילה הוא והבריח do

לבלוקים.

if…fi-ה שיטת 1.7.5

if בפקודת המקונן לבלוק זו, בשפה .68 אלגול בשפת מופיע הפתיח אזכור שיטת של שכלולבריח יש case בפקודת המקונן פקודות לבלוק .fi השמורה המילה לו: רק המיוחד בריח ישod השמורה המילה for...do בפקודת המקונן ובבלוק ,escac השמורה המילה כן: גם יעודיהשמורה המילה הוא טבעי באורח הבריח, ,repeat לולאות (בעבור יעודי. כבריח משמשת

(.C בשפת do…while ללולאת בדומה ,until

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

הקריאות. על ושומר begin…end-מה יותר תמציתי הוא if…fi שהזוג שיאמר מי אף אולי יהיה

בשפה שהשימוש הסיבה זו 46.1968 בשנת פותחה ,68 אלגול שפת עליה, מעיד ששמה כפי

ALGOrithmic Language ל-1968 קיצור הוא ALGOL 68 46השם

25

Page 26: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

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

מדעי. לחישוב כיום ביותר הפופולריות המערכות

מסיימים לעומת מפרידים 1.8

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

ספראטיסטי דקדוק 1.8.1

על מופרדות הבלוק בתוך הפקודות למשל, פסקל בשפת הנוהגת הספראטיסטית הגישה פי עליש אזי פקודות, n יש בבלוק שאם היא הפקודות הפרדת משמעות מיוחד. סימן מפריד47, ידימפריד. אף הבלוק בתוך אין אז בלבד, אחת פקודה יש בבלוק אם בפרט, מפרידים. n− 1 בו

ה- בתוך מופיע אינו ; והסימן אחת, פקודה רק יש בפסקל, הכתובה 1.2 בתכנית כך,העוטף. begin…end

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

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

הפקודות. ממספר באחד קטן להיות ממשיך ובמטרה במקור הן

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

beginWriteLn('Hello, World!')

end.

הבא באופן והן אחת, פקודה בדיוק יש הבלוק בתוך שבו

beginWriteLn('Hello, World!');

end.

ריקה. מתוכן השניה כאשר פקודות, שתי יש הזה בבלוק שבו

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

separator=47מפריד

26

Page 27: שפות תכנות פרק 1  צעדים ראשונים

מסיימים לעומת מפרידים .1.8

function max(a,b: Integer):Integer;begin

if a > b thenmax := b

elsemax := a;

end

max := b הפקודה אחרי נקודה-ופסיק סימן הוספנו שבו הדומה, הכתיב אולם,

function max(a,b: Integer):Integer;begin

if a > b thenmax := b;

elsemax := a;

end

למעלה שמופיע במה ואילו אחת, פקודה רק מותרת else-ה ובין then שבין משום חוקי, אינוהריקה. הפקודה אחריה, ומיד max := a ראשית, פקודות: שתי יש

טרמינסטי דקדוק 1.8.2

הנקודה- סימן ה-{}, במשפחת האחרות השפות כל ובכמעט ,C בשפת הנוהג טרמינסטי, בדקדוקבלתי חלק הוא הנקודה-ופסיק סימן למעשה, אותן. מסיים אם כי פקודות, בין מפריד אינו ופסיק

מהפקודה. נפרד

פקודות משתי מורכב היה ,(1.1 (תכנית C בשפת לם!" ע ם, "של בתכנית הראשי הבלוקכן: על

printf("Hello, World!\n");return 0;

הנקודה-ופסיק. בסימן מסתיימת מהן אחת שכל

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

ספראטיסטי-טרמיניסטי דקדוק 1.8.3

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

הפקודות. סדרת

27

Page 28: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

בכל יותר. הרבה קלה היא לאחר, אחד מבלוק פקודות של וההעברה ההעתקה זה, במיזוגעומדת, בעינה if בפקודת המקוננת בפקודת הנקודה-ופסיק הוספת איסור של המכשלה זאת,

ויחידה. אחת פקודה רק לשים עדיין מותר else-ה לבין then-ה בין שכן זאת

ליברלי דקדוק 1.8.4

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

פקודה. כל בתום אלא הסדרה,

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

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

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

הערות 1.9

לם!". ם,ע "של תכנית זוהי כי צויין ובה הערה הכילה שראינו, לם!" ע ם, "של מתכניות אחת כלהתכנית. נכתבה בה התכנות שפת שם גם ננקב זו בהערה

שתי מבין לאחת נופל ההערות של הדקדוק יש כי יגלה שראינו הרבות בהערות בוחן עיוןבלוק. והערות שורה הערות תבניות:

שורה הערות 1.9.1

בפתיח מתחילה ההערה כלל, בדרך כאשר אחת, שורה פני על משתרעות שורה הערותשפת היא זה מכלל יוצאת הבריח. הוא השורה סוף סימן כלומר השורה, סוף עד וממשיכה

שלמה. שורה פני על תמיד משתרעת הערה שבה פורטרן,

גם וכך ,# הסולמית48 סימן הוא הפתיח זו, בשפה ,(1.4 (תכנית AWK בשפת שראינו כפי.bash ובכללן רבות סקריפט בשפות הדבר

כך .// לוכסנים49, זוג כלל בדרך הוא שורה הערות של הפתיח ה-{}, ממשפחת בשפותהערות התירה לא C שפת בתחילה .(1.7 (תכנית ג'וה ובשפת (1.5 (תכנית Go בשפת הדבראלו של הפתיח וכמובן שורה, הערות התירו השפה הגדרת של מודרניות גירסאות אך שורה,

.// הואבשפת הדבר גם וכך ,-- מקפים, זוג הוא שורה הערות של הפתיח ,(1.6 (תכנית עדה בשפתnote השמורה במילה להשתמש גם ניתן אייפל בשפת אייפל. ובשפת (1.10 (תכנית אוקאם

hash sign=48סולמית

slash character=49לוכסנים

28

Page 29: שפות תכנות פרק 1  צעדים ראשונים

הערות .1.9

זו. בשפה לם!" ע ם, "של תכנית ,1.12 בתכנית כמודגם כפתיח,

1note "Hello World in the Eiffel programming language"2class HELLO3create run4feature run5do6print ("Hello, World!%N")7end8end HELLO

אייפל בשפת לם!" ע ם, "של :1.12 תכנית

בלוק הערות 1.9.2

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

(כלומר, /* התוים זוג הוא הערות של הפתיח שבה ,C בשפת בלוק הערות למשל ראינוהופיעו בלוק הערות לוכסן). ואחריה (כוכבית */ הוא הבריח ואילו כוכבית50) ואחריו לוכסן,ואחריו סוגריים, פתיחת (תו (* היה הפתיח אלו, שפות בשתי .OCaml ובשפת אוברון בשפת גם

כוכבית). ואחריו סוגריים, סגירת (תו ב-(* היה והבריח כוכבית)מתו מורכב היה הבריח אם שכן יותר, או תוים שני בו אשר הערה בריח בקביעת יתרון ישבהן פסקל בשפת בהערות ההערה. בתוך כלל זה בתו להשתמש ניתן היה לא בלבד, אחדניתן לא מסולסלים), סוגריים (סגור } הוא והבריח מסולסלים) סוגריים (פתיחת { הוא הפתיחמתירה פסקל ששפת הסיבה הנראה ככל זו הערה. בתוך ,} ההערה, סגירת בתו להשתמש כללהוא והבריח (* הוא הפתיח בהן הערות כלומר ,OCaml-וב באוברון שראינו בסגנון הערות גם

ב-(*.פני על הפרושות ארוכות הערות לכתיבת שורה מהערות יותר מעט נוחות בלוק הערותהבלוק בהערת למשל, כך ושורה. שורה בכל הפתיח על לחזור צורך אין שכן שורות, מספר

:1.2 בתכנית 1--3 בשורות

{hello.p: My very first Pascal program. It does not dotoo much−−−it prints the string ”Hello, World!” (followedby a new line), and then terminates.}

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

ושורה:

// Hello.java: my first Java program. It prints// the string ”Hello, World!” on the standard output// stream, and then terminates.

asterisk=50כוכבית

29

Page 30: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

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

/*** hello.c: My first C program; it prints** ”Hello, World!”, and dies.*/

לכתוב ניתן ,Go ושפת ,C++ שפת ג'וה, בשפת כך ההערות, סוגי בשני תומכות רבות שפות.*/ לבין /* בין הלכודות בלוק הערות והן לוכסנים, זוג באמצעות שורה הערות הן

מקוננות הערות 1.9.3

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

ובריח. פתיח של בזוג עטיפתו

,C בשפת והן בפסקל הן תכניות, של בתחזוקה חשיבות יש הערות לקנן שליכולת למרותבהערה הראשון והבריח כלל, הערות לקנן ניתן לא C בשפת מפותחת. אינה בקינון התמיכה

לפניו. ההערה בתוך המצויים הפתיחים במספר תלות ללא כולה, ההערה את סוגר

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

ולהיפך. {…} מסוג הערות בתוך (*…*)

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

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

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

האחרות. הגדרות

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

יחסית. נדירים שהם

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

שכתבתי 1.7 תכנית כל את להערה להפוך כדי sed בתכנית שימוש לדוגמא הנה הערות.

delimiter=51גדר

30

Page 31: שפות תכנות פרק 1  צעדים ראשונים

סדרית מילולוני .1.10

% cat Hello.java | sed s+^+//+//// Hello.java: my first Java program. It prints//// the string "Hello, World!" on the standard output//// stream, and then terminates.////class HelloWorld {// static public void main(String args[]) {// System.out.println("Hello, World!");// }//}

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

% cat Hello.java | sed s+^+//+ | sed s+//++// Hello.java: my first Java program. It prints// the string "Hello, World!" on the standard output// stream, and then terminates.

class HelloWorld {static public void main(String args[]) {

System.out.println("Hello, World!");}

}

הערות של סמנטיקה 1.9.4

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

המקדים: המעבד של בפלט

% cpp −P hello.c | grep / | wc0 0 0

אייפל ג'וה, כמו בשפות להערות. משמעות מתן של מגמה ישנה יותר, מודרניות בשפותהתכנית. של תיעוד ליצור בכדי מעובדות להיות יכולות מקצתן, או כולן ההערות, ופיית'ון,לכדי מעובדות כוכביות) שתי ואחריו (לוכסן, /** בפתיח המתחילות הערות ג'וה, בשפת כך,

לתכנית. תיעוד יצירתהערות, להופיע יכולות בהם בתכנית מסויימים מקומות מגדיר אף אייפל שפת של הדקדוק

אלו. במקומות המופיעות הערות שייכות ישויות לאילו וקובע

סדרית מילולוני 1.10

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

31

Page 32: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

שורה סוף סימון מילולון שפה\n "Hello, World!\n" OCaml ,Go ,C

'Hello, World!' ,פסקל קובול"Hello, World!" AWK ,אוברון, עדה, ג'וה,אוקאם

%N "Hello, World!%N" אייפל

השונות בשפות לם!" ע ם, "של בתכניות Hello, World! הסדרית מילולוני :1.2 טבלה

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

מהבריח). השונה פתיח ידי על (ולא גדרות ידי על מצויינותבמרבית אך ,(') בודד הגרש הוא מילולונים של הגדר בהן וקובול, פסקל כמו שפות, ישנןהשורה סוף סימן בהן אייפל כמו שפות ישנן .(") גרשיים צמד תו הוא הגדר שראינו, השפותנעשתה הסדרית הצגת בתום חדשה שורה הצגת בהן ג'וה כמו שפות וישנן המילולון, בתוך כלול

הנכונה. לשגרה קריאה ידי על

בין לבחור מסויימות בשפות ניתן כי בידענו יותר עוד אולי תצטמצם ההבדלים מראיתהכתיב

'Hello, World!'

הכתיב ובין כגדר, (') בתו שימוש כלומר,

"Hello, World!"

,1.3 תכנית את היטב נבדוק אם ואכן, קובול, בשפת הדבר כך כגדר. (") בתו שימוש כלומרכפולים. גרשיים שני בין התחום 18 מס' בשורה סדרית מילולון שם נגלה

DISPLAY ""LINE 1 POSITION 1 ERASE EOS.

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

% sed s/\'/\"/g < hello.p > hello\".p; pc hello\".p; ./a.outHello, World!

(א), hello.p הקובץ מתוך ,hello".p חדש, קובץ יוצרות לעיל הפקודות שלוש כי לב שיםבגרשיים הבודד הגרש החלפת שאכן, לבדוק כדי (ג) התוצאה את ומריצות (ב), אותו מהדרות

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

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

System.out.print("Hello, World!\n");

התכנית. של ממשמעותה דבר לשנות מבלי

32

Page 33: שפות תכנות פרק 1  צעדים ראשונים

סדרית מילולוני עבור דקדוק תכנון .1.11

סדרית מילולוני עבור דקדוק תכנון 1.11

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

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

תכנית. הוא תכנית של הפלט שבו ישומים,

בהן שפות ישנן זהים, היו והבריח הפתיח ,1.2 שבטבלא שבדוגמאות שלמרות לכך לב שיםהוא והבריח ( הסוגריים פתיחת סימן הוא הפתיח ,PostScript בשפת למשל כך כך. הדבר אין

.1.13 תכנית בתכנית כמודגם ,) הסוגריים סגירת סימן

1% Hello, World in Postscript2%!PS3/Palatino−Roman findfont4100 scalefont5setfont6100 100 moveto7(Hello, World!) show8showpage

PostScript בשפת לם!" ע ם, "של :1.13 תכנית

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

אחד. תוהמילולון), היא ותת-הסדרה כולה, התכנית היא (הסדרה למילולונים גם מתאים זה כללי ניסוחההערה, היא תת-הסדרה כולה, התכנית היא (הסדרה מקוננות בלוק בהערות שלנו לדיון וגם

ההערה). של הבריח היא והגדר

האורך הצהרת 1.11.1

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

בדיוק. זו בדרך שימוש נעשה (FORTRAN 66) פורטרן שפת של ישנה בגירסה

delimiter collision=הגדר 52גידור

33

Page 34: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

1PROGRAM HELLO2C A HELLO, WORLD! PROGRAM IN FORTRAN IV3WRITE (6,100)4100 FORMAT(14H HELLO, WORLD!)5STOP6END

66 פורטרן בשפת לם!" ע ם, "של :1.14 תכנית

סדרת .H באות המסומן הולרית'53 קבוע שקוראים מה יש ,100 במספר המסומנת בשורהואכן תוים, 14 בן מילולון יופיע שאחריה מציינת זו בשורה המופיעה 14H התוים שלושתשלא (ובלבד בדיוק תוים 14 יש HELLO,␣WORLD! שבסדרית תגלה וזהירה מדוקדקת ספירההיתרונות אף שעל הדבר ברור מאליו הזו). הסדרית את הפותח הרווח סימן את לספור נשכח

קל. אינו תמותה בני ידי על בה השימוש מילולונים, לסימון הזו ההצהרתית השיטה של

הולרית'. בקבועי השימוש בוטל ,77 בפורטרן כבר משימוש. נכחדה ההצהרתית השיטה

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

המילוט שיטת 1.11.2

מילוט54, של זו היא התכנות שפות ברוב הגדר גידור בעית לפתרון כיום המקובלת השיטהשל מופע בפרט, אחריו. המופיע לתו מיוחדת משמעות נותן אשר ממלט55 תו מיוחד, תו ובהמקובל תת-הסדרית. את לסגור כגדר) המשמש אחר תו כל (או מהגרשיים מונע המילוט תו

אחרים. מילוט תוי גם מוכרים אך המילוט, כתו הפוך56 בלוכסן להשתמש

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

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

בשפת לם!" ע ם, "של תכנית ,1.9 תכנית על ונסתכל נחזור בוריו, על זה ענין להבין כדיהפלט אשר המילוט, בשיטת המשתמשת שפה ,C בשפת תכנית בכתיבת הוא האתגר .OCaml:1.9 בתכנית הבודדת הביצועית הפקודה בהדפסת נסתפק לקצר, בכדי .1.9 תכנית יהיה שלה

print_string "Hello, World!\n";;

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

המילוט. תו של מופעים חמישה בסה"כ נדרשים לעיל, הפקודה

Hollerith constant='הולרית 53קבוע

escaping=54מילוט

escaping character=ממלט 55תו

backslash=הפוך 56לוכסן

34

Page 35: שפות תכנות פרק 1  צעדים ראשונים

סדרית מילולוני עבור דקדוק תכנון .1.11

1#include <stdio.h>2int main(int argc, char *argv[], char **envp) {3printf("print_string \"Hello, World!\\n\";;\n");4return 0;5}

Outputprint_string "Hello, World!\n";;

C בשפת מילוט :1.15 תכנית

ביטויים של בהפעלתם נוספת סיבוך ברמת הוא בחובה טומנת המילוט ששיטת נוסף קושיעלול (\n (הרצף C בשפת הרגיל השורה סוף סימון אחר 1.15 בתכנית חיפוש רגולריים.כדי שנדרש מה הזו. התבנית של אחד מופע רק יש זו בתכנית למעשה, אך כאלו, שניים לאתרזוגי אי מספר אחרי המופיעה n האות את המחפש רגולרי ביטוי הוא זה, סימון של מופע לאתר

ההפוך. הלוכסן תו של מופעים של

לכלול מאפשרת שהיא בכך הוא המילוט, שיטת של חשוב יתרון אלו, חסרונות לעומתיכול שלהם הגרפי שהיצוג או גרפי, יצוג להם אין אשר אחרים, מיוחדים תוים המילולון בתוךאחרים וסימונים ,\n באמצעות לסמן ניתן החדשה השורה תו את כי ראינו כך מטעה. להיותASCII-ה תוי 256 מבין תו כל מילולון תוך אל להכניס גם ניתן C בשפת למכביר. ישנם כאלותומכות וג'וה Go שפות המבוקש. התו של הסידורי מספרו את המקדים ממלט תו באמצעותניתן זה), ספר כתיבת לעת רבבות עשתי-עשרה (כמעט היוניקוד תוי של וגודל ההולך במספרשל למספרו ממלט תו הקדמת באמצעות הללו, מהתוים אחד כל סדרית מילולון בתוך לכלול

המבוקש. התו

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

כך. על להתריע או זה, מסוג ל"שגיאות" סובלנות

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

למלט. אין שאותם תוים מלמלט להזהר יצטרך

הגדר הכפלת 1.11.3

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

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

35

Page 36: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

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

במילולון פעמים 2n אותו לכתוב יש סדרית, בתוך הגדר של מופעים n לכלול כדי כן, עלהסדרית. את המגדיר

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

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

הגדר. הכפלת בשיטת קיים הוא אף רגולורים ביטויים בבנית הקושי

מסגור אפשרויות ריבוי 1.11.4

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

כפולים. גרשיים של בזוג התחום מילולון

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

1program makeHelloWorld(output);2begin3WriteLn('program HelloWorld(output);');4WriteLn('begin');5WriteLn(" WriteLn('Hello, World!')");6WriteLn('end.')7end.

Outputprogram HelloWorld(output);begin

WriteLn('Hello, World!')end.

פסקל שפת של גנו במימוש מילולונים לתיחום שונות דרכים שתי :1.16 תכנית

למעשה בפסקל. הכתובה לם!" ע ם, "של תכנית הוא 1.16 תכנית של הפלט כי רואים אנו.1.2 תכנית של הביצועיות הפקודות בדיוק הוא זו תכנית של הפלט

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

כולם. התוים כל את המכיל מילולון בכתיבת הוא

36

Page 37: שפות תכנות פרק 1  צעדים ראשונים

סדרית מילולוני עבור דקדוק תכנון .1.11

הפתיח את לסלק כדי sed בתכנית השתמשנו כאשר למעלה, זו להכללה דוגמא כבר ראינובג'וה: שורה בהערות לוכסנים זוג של

sed s+//++

ידי על נקבעת וסיומה הסדרית תחילת באחרת. אחת סדרית מחליפה sed של s הפקודהוההוראה כגדר, משמש + התו sed s+//++ בהוראה לכן ,s הפקודה אחרי מיד המופיע התוהיה כמובן, הריקה. בסדרית לוכסנים זוג המכילה הסדרית של להחלפה בקשה מציינת כולה

בכתיב למשל, כגדר. אחר תו בכל שימוש תוך זו הוראה לכתוב ניתן

sed sa//aa

תשתנה. לא ההוראה משמעות אך כגדר, משמש a התו

מיוחדים ותוים ארוכים מילולונים 1.11.5

לעיתים נדרשות מחשב תכניות אך ביותר, קצרה היתה שהצגנו, "!Hello, World" הסדריתבסדריות התמיכה היא מילולונים של הדקדוק בבחינת מעניינת שאלה ארוכים. טכסטים להציג

שורות. מספר פני על להשתרע היכולים ארוכותתכנית, לכתוב ננסה כאלו, ארוכים מילולונים לבניית המקובלות השיטות את להדגים כדיארבעת את כלומר ההערות, מבלעדי 1.2 תכנית את כפלט תפיק ,1.16 לתכנית בדומה אשר,

הבאות: השורות

program HelloWorld(output);begin

WriteLn('Hello, World!')end.

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

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

פסקל. בשפת לם!" ע ם, "של התכנית

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

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

concatenation=57ישורשרו

37

Page 38: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

1#include <stdio.h>2int main(int argc, char *argv[], char **envp) {3printf(4"program HelloWorld(output);\5begin\n\6WriteLn('Hello, World!')\n\7end.\n");8return 0;9}

C בשפת ארוכים מילולונים בנית לשם שורה סוף מילוט :1.17 תכנית

באורח אך ,1.17 תכנית של הפלט אותו את את מפיקה אשר ,1.18 בתכנית מודגם C בשפתהקלדה. שגיאות בפני יותר עמיד

1#include <stdio.h>2int main(int argc, char *argv[], char **envp) {3printf("program HelloWorld(output);\n"4"begin\n"5" WriteLn('Hello, World!')\n"6"end.\n");7return 0;8}

C בשפת סמוכים מילולונים שרשור ידי על ארוכים מילולונים יצירת :1.18 תכנית

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

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

שורות. רב במילולון

את להפיק כדי ג'וה בשפת סדריות של השרשור באופרטור שימוש מדגימה 1.19 תכניתפסקל. בשפת לם!" ע ם, "של התכנית של השורות ארבעת

1class MakePascalHelloWorld {2static public void main(String args[]) {3System.out.println(4"program HelloWorld(output);\n" +5"begin\n" +6" WriteLn('Hello, World!')\n" +7"end.\n"); } }

ג'וה בשפת מילולונים שרשור :1.19 תכנית

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

38

Page 39: שפות תכנות פרק 1  צעדים ראשונים

סדרית מילולוני עבור דקדוק תכנון .1.11

השורה. סוף סימן את גם

קל הוא בפסקל הללו השורות ארבעת הוא שלה הפלט אשר Go בשפת תכנית כתיבת.1.20 בתכנית ומודגם במיוחד,

1package main2import "fmt"3func main() {4fmt.Printf(5`program HelloWorld(output);6begin7WriteLn('Hello, World!')8end.`)9}

Go בשפת רב-שורות סדרית מילולון :1.20 תכנית

מתפרש שם, יופיע אם הפוך, ולוכסן ממלט, תו אין Go, בשפת ארוכים מילולונים בתוךכפשוטו.

אינם שהם הגדר, גידור מבעיית כתוצאה אלו, מילולונים של תכנם על העיקרית המגבלהלהתגנב יכולים שורה בסוף בלתי-נראים שרווחים העובדה בנוסף, .` התו את להכיל יכולים

מסויים. מטרד מהווה כאלו מילולונים תוך אל

כפי זאת, לעומת ארוכות. סדריות כתיבת של למטרה רק נועד ` ידי על התחום מילולוןניתן ובו קצרות, לסדריות מיועד " באמצעות התחום Go של מילולון ,1.5 בתכנית שראינו

ממלט. כתו ההפוך בלוכסן להשתמש

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

אלו: בשורות

% rm −f hello.c; cat << EOF > hello.c/*** hello.c: My first C program; it prints** "Hello, World!", and dies.*/

#include <stdio.h>

int main(int argc, char *argv[], char **envp){

printf("Hello, World!\n");return 0;

}EOF

תכנותית לשון "מטבע שקראנו במה השימוש כי רואים אנו

cat << EOF

39

Page 40: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

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

זה. ארוך

תרגילים 1.12

בחיפוש העזר משמעותה. את לשנות מבלי שניתן, כמה עד 1.1 תכנית את לצמצם נסה א..C בשפת אחרות עולם!" "שלום, תכניות אחרי באינטרנט

מקבל המהדר האם מקבל? שלך שהמהדר C בשפת ביותר הקצרה התכנית מהי בדוק ב.ריקה? תכנית

המהדר האם מקבל? שלך שהמהדר פסקל בשפת ביותר הקצרה התכנית מהי בדוק ג.ריקה? תכנית מקבל

זה? מושג עבור זה בפרק בו שהשתמשנו המונח היה מה בויקיפדיה. sigil המונח את חפש ד.

זה? בפרק המתוארת בייסיק בשפת להגדיר היה ניתן שונים מזהים שמות כמה ה.

ישנות? תכנות בשפות מזהה של אורכו הוגבל מדוע ו.

במזהים? כלליים יוניקוד בתוי שימוש בהיתר החסרון מהו ז.

יהיה לקטנות גדולות אותיות בין אבחנה אין בה תכנות שבשפת סביר לא מדוע הסבר ח.יוניקוד. בתוי שימוש

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

המונח במקום מפתח58 מילת במונח שימוש לעיתים עושה שונות תכנות שפות הגדרת י.שמורות למילים הן אבחנה ללא מפתח מילת במונח שימוש נעשה לעיתים שמורה; מילהשפת של מהמימושים באחד המפתח מילות רשימת חפש מראש. מוגדרים למזהים והן

שמורות? מילים הן מהן ואלו מראש מוגדרים מזהים הן מהן אילו פסקל.

:C שפת של השמורות המילים רשימת הנה יא.

auto break case char const continue default do double else entryenum extern float for goto if int long register return shortsigned sizeof static struct switch typedef union unsigned voidvolatile while

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

משמעותן. את הסבר מהקטיגוריות. אחת באף תיפולנה לא enum-ו sizeof המילים

ג'וה: שפת של השמורות המילים רשימת הנה יב.

keyword=מפתח 58מילת

40

Page 41: שפות תכנות פרק 1  צעדים ראשונים

תרגילים .1.12

abstract assert boolean break byte case catch char class constcontinue default do double else enum extends final finally floatfor goto if implements import instanceof int interface long nativenew package private protected public return short static strictfpsuper switch synchronized this throw throws transient try voidvolatile while

אטומיים טיפוסים לציון המיועדות מילים (א) הבאות: הקטיגוריות לפי אלו מילים מייןופונקציות משתנים לתיאור המיועדת מילים (ג) ביצועיות לפקודות המיועדות מילים (ב)package ,import ,assert המילים עצמים. מונחה בתכנו לתמיכה המיועדות מילים (ד)

משמעותן. את הסבר מהקטיגוריות. אחת באף תיפולנה לא instanceof-ו

תכנות. שפת להיות יכולה bash כגון פקודות מעטפת מדוע הסבר יג.

אוטרקית. להיות יכולה לא פקודות מעטפת מדוע הסבר יד.

אוטרקית. בהכרח היא JavaScript שפת מדוע הסבר טו.

והוליסטית. יבילה59 תכנות שפת בתכנון הקושי את הסבר טז.

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

פסקל? בשפת מראש המוגדרים האטומיים הטיפוסים כל מהם יח.

טענה קשורה איך חוקי. אריתמטי ביטוי אינו אריתמטיים ביטויים שני של ששרשור הוכח יט.ליברלי? לדקדוק זו

מספריים? במילולונים במילוט צורך אין מדוע כ.

שורה? במילולוני במילוט צורך אין מדוע כא.

במילוט. שימוש יש כאשר מדוייק אינו מילולון המונח מדוע הסבר כב.

בודד? תו של במילולונים במילוט יש צורך איזה כג.

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

פסקל. בשפת ריק מילולון המוצא רגולרי ביטוי כתוב כה.

כתבתי: שלי, בפסקל עולם!" "שלום, בתכנית כפולים בגרשיים בודד גרש להחליף בכדי כו.

% sed s/\'/\"/g < hello.p > hello\".p; pc hello\".p; ./a.out

ואת הבודד הגרש את למלט עלי היה מדוע sed? בפקודת השתמשתי בו הגדר סימן מהוההחלפה? בפקודת הכפולים הגרשיים

פסקל? בשפת גרפיים לא תוים המכילה סדרית בונים כיצד כז.

portable=59יבילה

41

Page 42: שפות תכנות פרק 1  צעדים ראשונים

ראשונים צעדים .1 פרק

.C בשפת עצמה את המדפיסה ריקה לא תכנית כתוב כח.

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

42

Page 43: שפות תכנות פרק 1  צעדים ראשונים

39 ,3 .programmatic idiom תכנותית לשון מטבע

,25 ,19 ,17 ,13--11 ,7 ,5 .reserved word שמורה מילה40

41 ,34 .escaping מילוט

41 ,39--35 ,32 ,31 ,7 ,5 .literal מילולון

40 .keyword מפתח מילת

18 ,16 .preprocessor מקדים מעבד

3 .command shell פקודות מעטפת

3 .operating systems הפעלה מערכת

26 .separator מפריד

18 .interpreter מפרש

11 ,9 ,8 .variable משתנה

IDE: Interactive אינטראקטיבית פיתוח סביבת2 .Development Environment

39--37 ,35 ,34 ,31 ,17 ,14 ,7 ,5 ,3 .string סדרית

28 .hash sign סולמית

9 .static סטאטית

19 ,5 .library ספריה

5 ,4 ,2 .text editor עורך

17 .preprocessing מקדים עיבוד

3 .standard output סטנדרטי פלט

,28--22 ,19--17 ,14 ,12 ,11 ,9 ,7 ,3 .command פקודה40 ,34

40 ,37 ,33--28 ,26--22 .closer פתיח

8 .constant קבוע

34 .Hollerith constant הולרית' קבוע

.recursively defined set רקורסיבית מוגדרת קבוצה11

30 ,25--22 .nesting קינון

3 .standard input סטנדרטי קלט

32 ,19 ,18 ,13 .routine שגרה

38 ,37 .concatenation שרשור

39 ,37 ,35 ,34 .escaping character ממלט תו

9 ,8 .underscocre תחתון קו תו

מונחים מילון

41 ,11 .expression ביטוי

40 ,33 ,32 ,30--28 ,26--23 .opener בריח

41 ,37--32 ,30 .delimiter גדר

6 .monospace font קבוע ברוחב גופן

7 .proportional font יחסי גופן

39 ,34 ,33 .delimiter collision הגדר גידור

23 .indentation הזחה

31--28 ,7 ,5 ,4 .comment הערה

11 .assignment הצבה

22 ,21 ,3 .prompt זרז

40 ,12 ,8 .type טיפוס

12 .compound type מורכב טיפוס

17 ,15 .import יבוא

41 .portable יבילה

31 ,24 ,14--11 ,9 ,8 .entity ישות

29 .asterisk כוכבית

31--28 .slash character לוכסן

34 .backslash הפוך לוכסן

40 ,30 ,28 ,19--15 ,9 ,5 ,3 .compiler מהדר

10--8 ,6 ,5 .convention מוסכמה

40 ,19 ,15--7 ,5 .identifier מזהה

12 ,7 .reserved identifier שמור מזהה

7 .library identifier ספריה מזהי

40 ,7 .predefined identifier מראש מוגדרים מזהים

9 ,8 .class מחלקה

43