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

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

היסטוריה
--------

את עידן שפות התכנות האימפרטיביות פתחה שפת פורטרן שפותחה על ידי ג'ון באקוס מ-IBM ‏(1953–1957). שפה זו הייתה שפת התכנות הגדולה הראשונה שהצליחה להתגבר על הבעיות שנבעו מקוד מכונה. שפה זו היא שפה מהודרת שאיפשרה להגדיר משתנים בשם, ביטויים מורכבים, תת-תוכניות, ותכונות רבות אחרות שכיום נפוצות בשפות האימפרטיביות. בשנות ה-50 המאוחרות ובשנות ה-60 פותחה שפת אלגול במטרה לאפשר ביטוי קל של אלגוריתמים מתמטיים, וכללה בתוכה חידושים תכנותיים, כמו בלוקים של קוד, הגבלת תחום ההכרה של משתנים, שתי דרכים שונות להעברת פרמטרים לפרוצדורה, וקריאה רקורסיבית בשפה אימפרטיבית. 

לאחריה פותחה שפת קובול (1959–1960) דמוית האנגלית שזכתה לפופולריות עצומה כשפה לפיתוח מערכות מידע בעולם העסקי. בשנות ה-60 פותחה בייסיק (1964) כשפת תכנות ראשונה לצורכי לימוד, וזכתה לפופולריות במחשבים האישיים שנפוצו עשרים שנה אחר כך. שפת PL/I פותחה באמצע שנות ה-60 על ידי חברת IBM. השפה ניסתה לאחד את הטוב מפורטרן, קובול ואלגול 6 ונועדה להיות שפה למטרות כלליות ולשמש ליישומים מדעיים, הנדסיים ומסחריים ואף לתכנות מערכות והופיעו בה לראשונה בשפה אימפרטיבית מספר רב של טיפוסי נתונים פרימיטיביים, תכנות מקבילי, מצביע כטיפוס נתונים, יכולת לטפל בחריגות ובניפוי שגיאות. 

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

אפיוני השפה
-----------

שפה אימפרטיבית מאופיינת במשתנים, פקודות ומבני בקרה.

דוגמה לתכנות אימפרטיבי בשפת Java:

```
for (int i = 0, j = 9; i < 10; i++, j -= 3) {
 if (i == 3) {
 doSomething();
 } else if (i == 2) {
 doSomethingElse();
 } else {
 doSomethingDifferent();
 }
}

```

| תחומים במדעי המחשב |
| --- |
| יסודות מתמטים | לוגיקה מתמטית • תורת הקבוצות • תורת המספרים • תורת הגרפים • תורת הטיפוסים • תורת הקטגוריות • אנליזה נומרית • תורת האינפורמציה |
| תורת החישוביות | תורת האוטומטים • תורת הרקורסיה • תורת הסיבוכיות • מחשוב קוונטי |
| אלגוריתמים ומבנה נתונים | אנליזה של אלגוריתמים • גאומטריה חישובית |
| שפות תכנות ומהדרים | מפרש • פרדיגמת תכנות (תכנות פרוצדורלי • תכנות מונחה עצמים • תכנות פונקציונלי • תכנות לוגי) |
| חישוב מבוזר ועיבוד מקבילי | עיבוד מקבילי • מחשוב סריגי • בקרת מקביליות |
| הנדסת תוכנה | ניתוח מערכות מידע • עיצוב תוכנה • תכנות מחשבים • שיטות פורמליות • בדיקות תוכנה • מתודולוגיית פיתוח תוכנה |
| תקשורת | ניתוב • טופולוגיית רשת • קריפטוגרפיה |
| מסד נתונים | מסד נתונים יחסי • SQL • תנועה • אינדקסים • כריית מידע • CAP theorem |
| בינה מלאכותית | חשיבה אוטומטית • בלשנות חישובית • ראייה ממוחשבת • עיבוד שפה טבעית • בינה חישובית • מערכת מומחה • למידה חישובית • רובוטיקה |
| גרפיקה | הדמיה ממוחשבת • הנפשה ממוחשבת • עיבוד תמונה |
| שפות פורמליות | שפה רגולרית • שפה חסרת הקשר • שפה תלוית הקשר • ההיררכיה של חומסקי |
| שימושים במדע | ביואינפורמטיקה • מדעים קוגניטיביים • כימיה חישובית • פיזיקה חישובית • אנליזה נומרית |

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

 |