'''زبان برنامهنویسی کوبول''' (تلفظ: کوبول) یکی از قدیمی ترینقدیمیترین [[زبان هایزبانهای برنامه نویسی]] است. نام کوبول که [[مخفف]] کلمهٔ '''CO'''mmon '''B'''usiness-'''O'''riented '''L'''anguage است، حوزهٔ اصلی کار خود را در زمینه [[تجارت]]، امور مالی و سیستم هایسیستمهای اجرایی برای شرکت هاشرکتها و دولت هادولتها قرار داد. کوبول استاندارد ۲۰۰۲، از [[زبان هایزبانهای برنامه نویسی شیشیء گرا]] و ویژگی هایویژگیهای دیگر زبا ن هاینهای مدرن حمایت می کندمیکند. <ref>{{cite book | last = Oliveira | first = Rui | title = The Power of Cobol | publisher = BookSurge Publishing | location = City | year = ۲۰۰۶ | isbn = ۰۶۲۰۳۴۶۵۲۳}}</ref>
== تاریخچه و معیارها ==
ویژگی هایویژگیهای «کوبول» به وسیلهٔ فردی به نام [[گریس هاپر]] در نیمه دوم سال ۱۹۵۹ ایجاد شد. ماجرا در هشتم آوریل ۱۹۵۹ در یک همایش بین تولیدکنندگان کامپیوتر، استفاده کنندگان کامپیوتر و دانشگاهیان در مرکز کامپیوتر [[دانشگاه پنسیلوانیا]] اتفاق افتاد. [[وزارت دفاع آمریکا]] سپس حامی و اسپانسر فعالیت هایفعالیتهای بعدی شد. همایشی بوسیله کارلس آ. فیلیپس در [[پنتاگون]] در ۲۸ و ۲۹ ام ماه می (دقیقاً یک سال بعد از همایش الگول ۵۸ در [[زوریخ]] برقرار شد. در آنجا تصمیم گرفته شد ۳ کمیته تشکیل شود: کوتاه مدت، میان مدت و بلند مدت (البته آخری هرگز تشکیل نشد). کمیته کوتاه مدت، که بوسیلهٔ (جوزف وگستین) به عنوان رئیس سازمان ملی استانداردهای ایالات متحده رهبری می شد،میشد، توانست در طول آن مدت نخستین نسخه کوبول را به وجود بیاورد. <ref>{{cite book | last = Garfunkel | first = Jerome | title = The Cobol 85 Example Book | publisher = Wiley | location = New York | year = ۱۹۸۷ | isbn = ۰۴۷۱۸۰۴۶۱۴}}</ref> آن کمیته تشکیل شد تا یک دسترسی کوتاه مدت به یک زبان تجاری متداول را ارائه کند. این کمیته از شش تولید کنندهٔ کامپیوتر و سه آژانس دولتی تشکیل شده بود. شش تولید کننده کامپیوتر عبارتند از موسسهمؤسسه باروگ، [[IBM]]، هانی ول، اسپرس راند، آر-سی-ای و سیلوانیا الکتریک، سه آژانس دولتی عبارتند از: نیروی هوایی ایالات متحدهٔ آمریکا، ''David Taylor Model Basin'' و اداره ملی استانداردها (که امروزه به نام موسسهٔمؤسسهٔ ملی استاندارد و تکنولوژی نامیده میشودمیشود). کمیتهٔ میان مدت تشکیل شد ولی هرگز عملی نشد. در انتهای زمان کمیته اصلی کوتاه مدت، این کمیته موفق شد ویژگیهای زبان کوبول را ارتقاارتقاء دهد. این کمیته اصلی توسط شش نفر تشکیل شده بود. این کمیته اصلی ویژگی هایویژگیهای کوبول را تا دسامبر ۱۹۵۹ کامل کرد. این ویژگی هاویژگیها حوزهٔ وسیعی است که از زبانهای فلوماتیک –که به عنوان مادر زبان کوبول از آن یاد میشودمیشود- که توسط فردی به نام]]گریس هاپر [[ابداع شد و نیز زبان هایزبانهای کامترن که توسط فردی به نام باب بمر ابداع شد ونیز زبان فکت الهام گرفته شد. تصمیم بر استفاده از نام «کوبول» در یک همایش در ۱۸ سپتامبر ۱۹۵۹ گرفته شد.
اولین کامپایلر برای کوبول در سال ۱۹۶۰ تکمیل شد.
=== کوبول ۱۹۶۸ ===
بعد از سال ۱۹۵۹ کوبول دستخوش تغییرات و اصلاحات متعددی شد. در یک تلاش برای غلبه بر مشکلات ناسازگاری بین نسخه هاینسخههای متفاوت کوبول، موسسهمؤسسه استاندارد جهانی ایالات متحده ([[ANSI]]) فرم استاندارد زبان را در سال ۱۹۶۸ به وجود آورد.
=== کوبول ۱۹۷۴ ===
در سال ۱۹۷۴، موسسهمؤسسه استاندارد جهانی نسخه اصلاح شده کوبول را منتشر کرد که شامل تعدادی از ویژگی هاییویژگیهایی بود که در نسخهٔ ۱۹۶۸ وجود نداشت.
=== کوبول ۱۹۸۵ ===
در سال ۱۹۸۵، موسسسه استاندارد جهانی نسخه اصلاح شدهٔ دیگری را منتشر کرد که شامل ویژگی هاییویژگیهایی بود که درنسخه استاندارد سال ۱۹۷۴ وجود نداشت و ساخت یافته ترینیافتهترین زبان ساخته شد که شامل <code>END-IF</code>، <code>END-PERFORM</code>، <code>END-READ</code> و غیره است.
=== کوبول ۲۰۰۲ و کوبول شیشیء گرا ===
این زبان تا به امروز رو به پیشرفت است. در اوایل دهه ۱۹۹۰ تصمیم گرفته شد تا ویژگی شیشیء گرایی به نسخه کامل بعدی کوبول اضافه شود. تخمین اولیه این بود که این اصلاح تا سال ۱۹۹۷ انجام میشودمیشود. بعضی از مجریان کار (از قبیل Micro Focus، Fujitsu، Veryantو[[IBM]]) قواعد نحوی شیشیء گرایی را بر اساس نسخه ۱۹۹۷ ونسخه هایونسخههای کامل دیگر به وجود آوردند.
مثل زبانهای برنامه نویسی [[C++]] و [[جاوا]] کامپایلرهای شیشیء گرای کوبول مانند زبان هاییزبانهایی که به سمت استاندارد سازی پیش می روندمیروند در دسترس هستند. Fujitsu و Micro Focus] از کامپایلرهای شیشیء گرای کوبول با هدف قالب بندی [[دات نت]] حمایت کردند. <ref>[http://www.adtools.com/products/windows/netcobol.html NetCOBOL for.NET supports COBOL migration and software development in the.NET environment<!-- Bot generated title -->]</ref>
کوبول سال ۲۰۰۲ شامل ویژگی هایویژگیهای دیگری فراتر از شیشیء گرایی است. این ویژگی هاویژگیها عبارتند از:
* حمایت ملی از زبان
* پردازش محلی
* حمایت برای اجرا در محیط کار مثل مایکروسافت [[دات نت]] و [[جاوا]]
* حمایت بیتی و باینری
* حمایت باینری “True”
* حمایت ممیز شناور
* نتایج ریاضی استاندارد
* نسل ''[[XML]]'' و تجزیه کردن
=== تاریخچهٔ استانداردهای کوبول ===
ویژگی هاییویژگیهایی که به وسیلهٔ کمیته کامل کوتاه مدت تصویب شده بود به وسیلهٔ هیاتهیئت اجرایی در سوم ژانویهٔ ۱۹۶۰تصویب شد و به چاپخانهٔ حکومتی ارسال شد که آنجا این ویژگی هاویژگیها ویرایش و به عنوان «کوبول ۶۰» چاپ شد. موسسهمؤسسه استاندارهای جهانی ایالات متحده [[َANSI]] چندین نسخهٔ بازبینی شدهٔ کوبول استاندارد را تولید کرد از جمله:
* کوبول ۶۸
* کوبول ۷۴
* کوبول ۸۵
بعد از اصلاح نسخه سال ۱۹۸۵، تکامل عمده و حق مالکیت بوسیله موسسهمؤسسه بینالمللی استاندارد گرفته شد. ویرایش اخیر و گزارش هایگزارشهای تکنیکی به وسیلهٔ استانداردهای زیر موسسهمؤسسه بینالمللی استاندارد صادر شد (و به وسیلهٔ موسسهمؤسسه استانداردهای ملی آمریکا پذیرفته شد):
* کوبول ۲۰۰۲
* گزارش نهایی تکنیکی
* کلاسهای کتابخانهای شیء گرا
* کلاس های کتابخانه ای شی گرا
از سال ۲۰۰۲ استاندارد [[ISO]] برای کدهای عمومی مثل استاندارد ۱۹۸۹در دسترس است.
== ویژگی هاویژگیها ==
کوبول همچنین که در مشخصات عمومی تعریف شده از جمله شکل عبارت برای خصوصیات میدانی جرئی. این زبان از متغیر هایمتغیرهای محلی، بازگشتی، اختصاص دینامیک حافظه و [[برنامه نویسی ساخت یافته]] حمایت نمیکند. حمایت از قسمتی یا همهٔ این ویژگی هاویژگیها به آخرین نسخهٔ کوبول استاندارد اضافه شد. کوبول تعداد زیادی [[کلمات رزرو]] دارد (بیش از ۴۰۰ تا) که تحت عنوان کلمات کلیدی خوانده می شوندمیشوند.
=== کلمات خود اصلاح کننده ===
ویژگی هایویژگیهای اصلی کوبول حمایت می کنندمیکنند از کد خود اصلاح کننده از طریق عبارت نا مشهور «ALTER X TO PROCEED TO Y». X و Y برچسب هایبرچسبهای عبارتی هستند و هر عبارت «GOTO X» ای که بعد از عبارت ALTER اجرا می شودمیشود دارای معنی «GOTO Y» است. بیشتر کامپایلرها هنوز از آن حمایت می کنند،میکنند، اما این در برنامه هایبرنامههای جدید استفاده نمیشود.
=== ویژگی هایویژگیهای نحوی ===
کوبول یک به روز کردن درجای نحوی را فراهم میکندمیکند از جمله:
<source lang="cobol">
ADD YEARS TO AGE
</source>
ساختار معادل در بسیاری از زبانزبانهای های رویه ایرویهای باید باشد
<source lang="cobol">
age = age + years
OR SALARY = PREV-SALARY
</source>
کوبول «شرایط مشخص» را فراهم می کندمیکند (همچنین نامیده می شودمیشود ۸۸ مرحله). این هااینها به عنوان آیتم هایآیتمهای اصلی در بین دیگر آیتم هاآیتمها مشخص شدهشدهاند اند(متغیرهای محلی). نام شرطی می تواندمیتواند در یک عبارت IF استفاده و تست شود هرچند متغیرهای محلی معادل با هر متغیری است که در یک عبارت شرطی مشخص VALUE استفاده می شودمیشود. عبارت SET می تواندمیتواند برای یک عبارت شرطی مشخص TRUE استفاده شود (بوسیله مشخص کردن اولین متغیر به عنوان متغیر شرطی).
کوبول به وسیله شناسه هاشناسهها اجازه می دهدمیدهد تا بتواند تا ۳۰ کاراکتر طول داشته باشد. وقتی کوبول معرفی شد، بیشتر طولطولهای هایکم کم(مثلاً ۶ کاراکتر برای فرترن) رایج شدند.
مفهوم copybook) به وسیلهٔ کوبول معرفی شد. اینها تعدادی کد هستند که می توانندمیتوانند در یک کد برنامه نویسی قرار داده شوند. این کار با عبارت COPY انجام میشودمیشود که اجازه می دهدمیدهد که قسمتی از یک کدبا کدهای دیگر جایگزین شود (با استفاده از عبارت REPLACING... BY…)
=== انواع داده ===
کوبول]]انواع داده[[زیر را ایجاد می کندمیکند.
{| class="wikitable" width="۹۰٪"
|-
|کاراکتر
|<code>[[picture clause|PIC]] X(۲۰){{سخ}}PIC A(۴)۹(۵)X(۷)</code>
|الفبا عددی و الفبا{{سخ}}مجموعه کاراکترهای تک بایتی
|-
|کاراکترهای ویرایش شده
|اعداد اعشاری دودویی
|<code>PIC S999V۹۹{{سخ}}[USAGE] COMPUTATIONAL</code>{{سخ}}or{{سخ}}<code>BINARY</code>
|اعداد دودویی ۱۶٬۳۲ یا ۶۴ بیتی (۲ یا ۴ یا ۸ بایت){{سخ}}علامت دار یا بی علامت. کامپایلرها بیشترین مقدار متغیرها را بر اساس ظاهرعبارت و نه براساس تعداد بیتهای رزرو شده برای ذخیره محدود می کنندمیکنند.
|-
|اعداد اعشاری ممیز ثابت (دهدهی فشرده)
|<code>PIC S999V۹۹{{سخ}}<code>PACKED-DECIMAL</code>
| اعداد رقمی دهدهی ۱ تا ۱۸{{سخ}}علامت دار یا بی علامت.
|-
|اعداد اعشاری ممیز ثابت (دهدهی محلی)
|<code>PIC S999V۹۹{{سخ}}<nowiki>[</nowiki>USAGE DISPLAY<nowiki>]</nowiki></code>
| اعداد رقمی دهدهی ۱ تا ۱۸{{سخ}}علامت دار یا بی علامت
|-
|اعداد اعشاری ممیز شناور
|کاراکترهای قالب دار و رقمی
|-
|گروهها
|گروه ها
|<code>۰۱ CUST-NAME.{{سخ}} ۰۵ CUST-LAST PIC X(۲۰).{{سخ}} ۰۵ CUST-FIRST PIC X(۲۰).</code>
|عناصر جمع شده
|-
|جدول (آرایه)
|<code>OCCURS 12 TIMES</code>
|آرایه هاآرایهها با طول ثابت، مرتب سازیمرتبسازی بر اساس ردیف{{سخ}}حداثر ابعاد ۷
|-
|جدول با طول متغیر
|<code>OCCURS 0 to 12 TIMES{{سخ}}DEPENDING ON CUST-COUNT</code>
| آرایه هاآرایهها با طول متغیر، مرتب سازیمرتبسازی بر اساس ردیف{{سخ}}حداثر ابعاد ۷
|-
|Renames ''([[variant record|variant]] or [[union (computer science)|union]] data)''
|<code>۶۶ RAW-RECORD{{سخ}} RENAMES CUST-RECORD</code>
|داده هایدادههای کاراکتری که متغیرهای دیگر را می پوشاندمیپوشاند
|-
|اسم شرطی
|آرایه شاخص
|<code>[USAGE] INDEX</code>
|آرایهٔ زیر نویسزیرنویس
|}
بیشتر فروشنده هافروشندهها انواع دیگری را به وجود می آورندمیآورند مثل:
{| class="wikitable" width="۹۰٪"
!style="width:۳۰٪"| Data type
|اعداد دودویی ممیز ثابت
|<code>PIC S999V۹۹{{سخ}}[USAGE] COMPUTATIONAL-۵</code>
| اعداد دودویی ۱۶٬۳۲ یا ۶۴ بیتی (۲ یا ۴ یا ۸ بایت){{سخ}}علامت دار یا بی علامت. کامپایلرها بیشترین مقدار متغیرها را بر اساس تعداد بیتهای رزرو شده برای ذخیره و نه براساس ظاهرعبارت محدود می کنندمیکنند.
|-
|اعداد ممیز ثابت{{سخ}}بر اساس ترتیب بایتی محلی
|<code>PIC S999V۹۹{{سخ}}[USAGE] COMPUTATIONAL-۴</code>
|اعداد دودویی ۱۶، ۳۲،۶۴۳۲٬۶۴ بیتی (۲،۴٬۸۲٬۴٬۸ بایتی){{سخ}}علامت دار یا بی علامت
|-
|اعداد ممیز ثابت{{سخ}}با ترتیب بایتی[[big-endian]]
|<code>PIC S999V۹۹{{سخ}}[USAGE] COMPUTATIONAL-۵</code>
| اعداد دودویی ۱۶، ۳۲،۶۴۳۲٬۶۴ بیتی (۲،۴٬۸۲٬۴٬۸ بایتی){{سخ}}علامت دار یا بی علامت
|-
|کاراکترهای پهن
|<code>PIC G(۲۰)</code>
|الفبا عددی{{سخ}}کاراکترهای دو بایتی
|-
|کاراکترهای پهن پیرایش شده
|اشاره گر به داده
|<code>[USAGE] POINTER</code>
|داده هایدادههای آدرس حافظه
|-
|اشاره گر به کد
|فیلد بیتی
|<code>PIC ۱(''n'') [USAGE] COMPUTATIONAL-۵</code>
|n میتواندمیتواند بیت ۱ تا ۶۴ باشد و به عنوان عدد nبیتی تعریف می شودمیشود{{سخ}}علامت دار یا بی علامت
|-
|شاخص
|Binary value corresponding to an occurrence of a table element{{سخ}}May be linked to a specific table using <code>INDEXED BY</code>
|}
=== Hello، world ===
یک مثال برای برنامهٔ Hello، world در کوبول:
== منابع ==
{{پانویس}}
<!--See [[Wikipedia:Footnotes]] for an explanation of how to generate footnotes using the <ref(erences/)> tags-->
== منابع ==
* Ebbinkhuijsen، Wim B.C. ، ''COBOL'' Alphen aan den Rijn/Diegem: Samson Bedrijfsinformatie bv، ۱۹۹۰. ISBN ۹۰۹۰–۱۴-۱۴-۰۴۵۶۰-۳۰۴۵۶۰–۳. (Dutch)
{{Major programming languages}}<!--Need a more specific «۳rd-generation» prog lang templ-->
{{Computer language}}<!--Need a more specific «۳rd-generation» prog lang templ-->
|