COBOL

**קובול** (**COBOL**) ראשי תיבות של: **Common Business Oriented Language** (בתרגום חופשי: שפה פשוטה המכוונת לעסקים), היא שפת תכנות ותיקה, שמיועדת בעיקר לניהול ועיבוד נתונים.

מאז נוצרה השפה בשנת 1959 היא עברה שינויים ושיפורים שונים על מנת להפכה לשפה תקנית.

מכון התקנים האמריקני (ANSI) פיתח תקן קובול המשמש את רוב התעשייה המכונה ANSI COBOL (להרחבה ראו בהמשך).

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

## היסטוריה
על פיתוחה של השפה הוחלט בוועדה שהוקמה ביוזמת משרד ההגנה של ארצות הברית, ובה השתתפו נציגים של שש חברות המחשבים המובילות ושלוש מרשויות הממשל האמריקאי. ועדה זו הקימה ועדת-משנה ובה שני נציגים מכל אחת מהחברות IBM, RCA וסילבניה. לקראת סוף 1959 סיימה ועדת-משנה זו את הגדרתה של שפת קובול. ההגדרה הושפעה רבות משפת FLOW-MATIC שפותחה על ידי גרייס הופר ומשפת COMTRAN שפותחה על ידי איש IBM בוב במר. הוועדה הראשית אישרה את המפרט של השפה, ותוך חצי שנה פותח מהדר לשפה.

קובול זכתה לפופולריות עצומה כשפה לפיתוח מערכות מידע בעולם העסקי, וגם כיום נעשה בה שימוש, בעיקר במוסדות פיננסים ומשרדי ממשלה, בעיקר לתחזוקה של תוכניות קיימות ולא לפיתוח של תוכניות חדשות. בעיית "באג 2000" גרמה לביקוש מוגבר למתכנתי קובול, במקביל להחלפתן של מערכות שפותחו בקובול במערכות מודרניות יותר. כיום ניתן למצוא פיתוחים בקובול גם בתחום האינטרנט ואף ישנה גרסה של קובול עבור NET.. הגרסאות האחרונות של המהדר מכילות גם תמיכה מלאה ב-OBJECT ORIENTED COBOL וב-XML ו-Web Services.

## מאפייני השפה

בהגדרתה של קובול נעשה מאמץ לפתח שפה שסגנונה מזכיר אנגלית מדוברת, כך שהתכנות בה ייעשה בקלות ובטבעיות. לשפה שנוצרה היו תכונות טובות מבחינת תיעוד עצמי של התוכנית, טיפול בקבצים והגדרה של סוגי נתונים. כל תוכנית בשפה זו מורכבת **מארבע חטיבות**:
#IDENTIFICATION DIVISION: חטיבה קצרצרה, ובה פרטים מזהים של התוכנית.
#ENVIRONMENT DIVISION: פרטי הקבצים שבהם מטפלת תוכנית זו.
#DATA DIVISION: הגדרת כל המשתנים שבהם משתמשת תוכנית זו, כולל שטחים לרשומות שבהן מטפלת התוכנית.
#PROCEDURE DIVISION: החטיבה העיקרית של התוכנית, ובה הלוגיקה שלה.

על-פי תקנים מודרניים לשפות תכנות, היו בקובול פגמים חמורים: תחביר שמרבה במילים, חוסר תמיכה במשתנים לוקליים, ברקורסיה ובהקצאת זיכרון דינמית. חוסר מודולריות פנימית ושימוש רב בפקודת GO TO, גרמו ליצירת "קוד ספגטי". השפה לא תמכה בתכנות מובנה, רעיון שנוצר כעשר שנים לאחר יצירת השפה. כל המילים של השפה הן מילים שמורות, שאסור להשתמש בהן כשמות של משתנים. כיוון שמדובר במילים שגרתיות של השפה האנגלית, הגבלה זו מהווה מטרד למתכנת. ההגדרה הראשונית של השפה אף כללה יכולת של תוכנית לשנות את הקוד של עצמה, באמצעות הפקודה ALTER X TO PROCEED TO Y. אחדים מפגמים אלה תוקנו בגרסאות מתקדמות של השפה.

תוכנית Hello world בקובול:

```cobol
IDENTIFICATION DIVISION.
PROGRAM ID. HELLO-WORLD.
PROCEDURE DIVISION.
 DISPLAY "Hello, world!"
 STOP RUN.
```


## ANSI COBOL
תקן לכתיבה בשפת COBOL שפותח על ידי מכון התקנים האמריקני (ANSI), על מנת לאפשר ניידות גמישה יותר של קוד כתוב בשפה זו.התקן הראשון היה ANSI74 COBOL, אך למעשה התקן המשמעותי הראשון של השפה היה ה- ANSI85 COBOL.לתקן התייחסות שונה לפלטפורמה שעליה התוכנית כתובה, אם על מחשבי UNIX או אם על מחשבים מרכזיים.

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

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

## המחשה של תחביר השפה
הדוגמה הבאה ממחישה את צורתה המיוחדת של שפת קובול. את הביטוי המתמטי

x=\frac{-b + \sqrt {b^2-4ac\ }}{2a},

אפשר אמנם ליישם באמצעות הפקודה COMPUTE, דהיינו

```cobol
COMPUTE X = (-B + (B ** 2 - (4 * A * C)) **.5) / (2 * A)
```

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

```cobol
MULTIPLY B BY B GIVING B-SQUARED.
 MULTIPLY 4 BY A GIVING FOUR-A.
 MULTIPLY FOUR-A BY C GIVING FOUR-A-C.
 SUBTRACT FOUR-A-C FROM B-SQUARED GIVING RESULT-1.
 COMPUTE RESULT-2 = RESULT-1 ** .5.
 SUBTRACT B FROM RESULT-2 GIVING NUMERATOR.
 MULTIPLY 2 BY A GIVING DENOMINATOR.
 DIVIDE NUMERATOR BY DENOMINATOR GIVING X.
```


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

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

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

* קובול-ישראל, קהילת מתכנתי קובול
* 
* 

קטגוריה:שפות תכנות מונחות עצמים
קטגוריה:תקנים בתחום המחשוב