APL
תכונות השפה > עיצוב

בניגוד לשאר השפות המובנות, קוד טיפוסי של APL בדרך כלל בנוי כשירשור של אופרטורים, פונקציות מונאדיות ודיאדיות (המונחים של APL עבור פעולות אונאריות ובינאריות) על/בין מערכים. ל־APL קיימים פרימיטיבים (המונח של APL לפונקציות ופעולות המובנות בשפה) רבים המתוארים על ידי סימן בודד או הרכבה של מספר סימנים. לכל הפרימיטיבים ב־APL יש קדימות שווה, והם אסוציאטיביים עם קדימות לימין. כתוצאה מכך, הבנת הקוד ב־APL נוחה יותר בקריאה מימין לשמאל.
מימושים מוקדמים של APL (בסביבות שנות ה־70) לא כללו בקרת זרימה, כגון do, while או מבני קוד מהצורה if-then-else. ‏APL עודדה הפעלת פונקציות על פני מערכים שלמים, דבר שפטר את המתכנת מהצורך לכתוב קוד מובנה עם בקרת זרימה מפורשת. לדוגמה הפונקציה iota (בסימונו של אייברסון: ι) יכלה להחליף איטרציה של לולאת for:‏ ιN כאשר N הוא סקלר חיובי ושלם תחזיר מערך חד־ממדי מהצורה  [1,2,3...N]. מימושי APL חדשים יותר כוללים בקרת זרימה ומבני קוד מקיפים המאפשרים הפרדה ברורה בין בקרת הזרימה של התהליכים למבני הנתונים.
סביבת התכנות של APL נקראת workspace (עברית: סביבת עבודה). בסביבת עבודה משתמש יכול להגדיר משתנים עבור נתונים ושגרות עבור תהליכים ב־APL. המשתמש יכול לבצע פעולות על המשתנים תוך שימוש במפרש כמו בשפת תסריט. בדוגמאות למטה, המפרש מזין 6 רווחים בתחילת השורה לפני קבלת הקלט מהמשתמש, ומדפיס פלט בהתאם.
| --- | --- |
 n ← 4 5 6 7 : המשתמש יוצר מערך חדש מהצורה  [4,5,6,7] ומייחס אותו למשתנה n בסביבת העבודה. הדרך התמציתית והמקובלת יותר לעשות את זה ב־APL תהיה להשתמש בפ' ⍳ כך: n ← 3 + ⍳4, מבלי להיעזר בלולאות, הכנסת נתונים ידנית או בקרת זרימה.
 n 4 5 6 7 : המשתמש מבקש להדפיס את תוכן המשתנה n, שכרגע מייצג את המערך שהגדיר בשלב הקודם.
 n+4 8 9 10 11 : המשתמש מעתיק את המערך הישן לתוך מערך חדש בזיכרון, ומוסיף 4 על כל ערך. המפרש מדפיס מיד את המערך החדש שנוצר בתור פלט מאחר שלא נעשה שימוש בפעולת ההשמה← למשתנה חדש.
 +/n 22 : המשתמש מסכם את כל ערכי המערך n בעזרת סימון תמציתי זה המכונה "plus, over...".
 m ← +/(3+⍳4)  m 22 : כל הצעדים שנעשו עד כה יכולים להכתב בהצהרה אחת. מאחר ש־APL מפענחת את הביטויים עם קדימות מימין לשמאל, ⍳4קודם תיצור מערך חדש מהצורה  [1,2,3,4]ואז +3 תוסיף 3 על כל אחד מהערכים בתוך המערך. לאחר מכן כל הביטוי שנוצר (המוקף בסוגריים) יעבור סיכום בעזרת /+. המשתמש יבקש להציג את הפלט בקריאה למשתנה m בשורה השנייה.  בסימון מתמטי רגיל, הביטוי שקול ל־ \displaystyle m=\sum \limits _{i=1}^{4}(i+3).
המשתמש יכול לשמור את סביבת העבודה יחד עם כל המשתנים והשגרות שהגדיר בה, ולהקפיא את מצב הריצה הנוכחי שלה.
APL משתמשת בסימנים שאינם כלולים ב־ASCII. הסימנים גם מרחיבים את הסימון המקובל באלגברה ובפעולות חשבון בסיסיות. היכולת לבטא פעולות המטפלות בריבוי נתונים (SIMD) על גבי מערכים בעזרת תו ייחודי בודד מאפשרת לנסח אלגוריתמים כמו משחק החיים בשורה אחת בלבד. תאורטית, ברוב הגרסאות של APL, ניתן לבטא כל פונקציה בעזרת ביטוי בודד, כלומר בשורה אחת.
כדי לכתוב את הסימנים המיוחדים של APL, מתכנתים נוהגים להשתמש במקלדות ייעודיות עם מקשים שעליהם מוצגים הסימנים. אף על פי שיש מספר דרכים לכתוב קוד ב־APL בעזרת תווי ASCII, אין זה מקובל בפועל (עובדה זו יכולה לתמוך בתזה של אייברסון - "סימון ככלי חשיבה"). רוב המימושים המודרניים משתמשים בפריסה הסטנדרטית של המקלדות, עם שיטת קלט הממפה את המקשים לתווים הייחודיים של APL. היסטורית, הגופן של APL התאפיין באותיות אלפביתיות גדולות בכתב נטוי, וכתב ישר עבור המספרים והסימנים. רוב המימושים עדיין מספקים גופנים ייעודיים כדי להציג קוד APL.
חסידי השפה מתמודדים עם הטענה שהסימון של APL הפך אותה לשפת כתיבה בלבד (באנגלית: write-only language, ביטוי לעגני לשפת תכנות לא מובנת, שקשה לקרוא ולהבין קוד מקור שנכתב בהן. הביטוי נגזר מניגוד של המונח קבצים לקריאה בלבד המוגנים מכתיבה במערכת), בכך שקוד בלתי קריא הוא ברוב המקרים תוצאה של חוסר מיומנות של המתכנת, או טעויות של מתכנתים מתחילים שאינם בקיאים באופן הכתיבה המקובל והאופייני לשפה, דבר שיכול לקרות בכל שפה. יתר על כך, נטען כי APL מאפשרת לכתוב קוד הרבה יותר מתומצת שדורש פחות זמן גם בכתיבה וגם בעיון, ובסופו של דבר חוסך בזמן ובמתכנתים[דרוש מקור].
טיעון נוסף הוא כי מאחר שהשפה היא מאוד תמציתית, היא מתאימה יותר לפיתוח תוכנות בקנה מידה גדול, כיוון שהיא מאפשרת הקטנה ניכרת של מספר שורות הקוד. מתכנתי APL רואים שפות אחרות כגון Java ו־COBOL כמסורבלות וטרחניות. APL אכן נפוצה במקומות שבהם לזמן הפיתוח יש חשיבות קריטית מהיבט עסקי, כמו במערכות מסחר אלגוריתמיות ואוטומטיות.