مخطط مسار العبارة الشرطية If
مخطط مسار عبارة If-then-else
في علم الحاسوب، **العبارات الشرطية** أو **التعبيرات الشرطية** و **البناء الشرطي** هي من مزايا لغة البرمجة، حيث يؤدوا عمليات وإجراءات مختلفة بحسب تحديد المبرمج للشرط المنطقي المقيد بـ صح أو خطأ.

عالم الحاسوب
------------

إن تعليمة `if–then` (تُدعى في بعض الأحيان  `if–then–else`) شائعة في الكثير من لغات البرمجة، رغم أن الشكل قد يختلف من لغة برمجة لأخرى، إلا أن الشكل الأساسي يبدو على كالتالي:

```
 If (boolean condition) Then
 (consequent)
 Else
 (alternative)
 End If

```
عندما يرى المُفسِّر تعليمة `If`, فإنه يتوقع شرط منطقي، على سبيل المثال `x> 0`, أي أن «المتغير x يحوي رقم أكبر من الصفر» – ويقيِّم الشرط. إذا كان الشرط `true`, أي صحيحاً فيتم تنفيذ العبارة التي تلي `then` أما إن لم يكن الشرط صحيحاً فيتم تنفيذ الأسطر البرمجية اللاحقة – إما ضمن حقل `else`  (وهو اختياري عادةً), أو إن لم يكن هناك تعليمة `else` فيتم تنفيذ التعليمات التي تلي `end If`.

بعد الانتهاء من اختبار التعبير الشرطي وتنفيذ تعليماته، يعود تدفق التحكم للسطر الذي يلي   `end If`.

في لغات البرمجة الأولى، خاصة بعض اللغات المتفرعة من بيسيك ضمن الحواسيب المنزلية لثمانينيات القرن الماضي، فعبارة  `if–then` قد تحوي فقط على عبارات `GOTO` . مما يؤدي لتنسيق برمجي يصعب قراءته، وهو ما يعرف بـ برمجة سباغيتّي!  البرامج التي تحوي على مثل هذا التنسيق تسمى كود سباغيتّي. ونتيجةً لذلك، فقد كسبت البرمجة المهيكلة \_والتي تسمح (افتراضياً) بوضع العبارات العشوائية في حقول ضمن عبارة `if` \_ شعبية واسعة، إلى أن أصبحت معياراً حتى في معظم حلقات برمجة بيسيك.  اعتمدت مثل هذه الطرق والمبادئ على عائلة لغات ألغول القديمة ولكن الأكثر تقدماً آنذاك. وقد أثّرت لغات البرمجة الشبيهة بألغول مثل باسكال وModula-2 على لغات بيسيك الحديثة للعديد من السنوات. وفي حين أنه من الممكن أثناء استخدام عبارة `GOTO` فقط، ضمن عبارات `if-then` لكتابة برامج ليست «سباغيتي» ومهيكلة بشكل جيد وقابل للقراءة مثل لغة البرمجة المهيكلة، فإن البرمجة المهيكلة تجعل هذه العملية أسهل وبشكل إجباري. العبارات المهيكلة في عبارات `if-then-else` كالمثال أعلاه، هي واحدة من العناصر المفتاحية (الأساسية) للبرمجة المهيكلة، وهي موجودة في معظم لغات البرمجة الشهيرة والعالية المستوى مثل سي وجافا وجافا سكريبت وفيجوال بيسيك. 

أحد المشاكل الدقيقة هي أن عبارة else الاختيارية والموجودة في العديد من اللغات تؤدي إلى تنسيق قواعدي مُبهم وغير واضح، حيث يمكن تحليل الشروط المتداخلة بطرق مختلفة، فمثلاً

```
**if** a **then** **if** b **then** s **else** s2
```

يمكن أن تُفهم بالشكل

```
**if** a **then** (**if** b **then** s) **else** s2
```

أو

```
**if** a **then** (**if** b **then** s **else** s2)
```

وذلك بحسب كون `else`مرتبطة مع أول `if` أو ثاني `if`. يُعرف هذا بمشكلة Dangling else، ويتم حله بطرق عدة وحسب لغة البرمجة.

### Else if

يمكن باستخدام `else if`, الجمع بين شروط عديدة. وفي هذه الحالة يتم تنفيذ أول شرط يكون صحيحاً، ويتم تجاهل باقي العبارات. 

### تعبيرات If-then-else

تدعم العديد من اللغات *تعبيرات* if، وهي مشابهة لعبارات if، ولكنها تُعيد قيمة كنتيجة. وبالتالي فهي تعبيرات صحيحة (والتي تُقيِّم مقدار معين) وليست عبارات (والتي تغير مسار البرنامج لتنفيذ بعض أنواع المهام).

#### عائلة ألغول

تسمح ألغول 60 وأفراد أخرى من عائلة ألغول باستخدام `if-then-else` كتعبير:

```
  myvariable := if x> 10 then 1 else 2
```

#### في فيجوال بيسيك

في فيجوال بيسيك وبعض اللغات الأخرى، هناك وظيفة تدعي `IIf` والتي يمكن استخدامها كتعبير شرطي. على أية حال فإن هذه الوظيفة لا تسلك سلوك التعبير الشرطي الصحيح وذلك لأنه دائماً يتم تقييم كلا الحالتين الصحيحة والخاطئة، ويتم تجاهل نتيجة أحداهم والنتيجة الأخرى تُعاد من قبل وظيفة IIF.

المصادر
-------



|  |  |
| --- | --- |
| مشاريع شقيقة | في كومنز صور وملفات عن: تعبير شرطي |



| * ع
* ن
* ت
لغة برمجة ليسب |
| --- |
| الميزات | 

|  |
| --- |
| 
* جمع القمامة (حاسوب)
* تعبير شرطي
* نظام الأنواع
* Higher-order function
* قائمة متصلة
* M-expression (deprecated)
* Read–eval–print loop
* استدعاء ذاتي (علم الحاسوب)
* S-expression
* استضافة ذاتية محول برمجي
* شجرة (بنية بيانات)

 |
| برمجة كائنية التوجه | 
* Common Lisp Object System (CLOS)
* CommonLoops
* Flavors

 |

 |
| تنفيذ لغات البرمجة | 

|  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- |
| وجود المعاييرالتقنية | 

|  |  |
| --- | --- |
| ليسب شائع | 
* Allegro Common Lisp
* Armed Bear Common Lisp (ABCL)
* CLISP
* Clozure CL
* CMU Common Lisp (CMUCL)
* Corman Common Lisp
* Embeddable Common Lisp (ECL)
* GNU Common Lisp (GCL)
* LispWorks
* Macintosh Common Lisp
* Mocl
* Movitz
* بوبلوج
* Steel Bank Common Lisp (SBCL)
* Symbolics Common Lisp

 |
| سكيم | 
* *History*
* Bigloo
* Chez Scheme
* Chicken
* Gambit
* Game Oriented Assembly Lisp (GOAL)
* Ikarus
* JScheme
* Kawa
* Larceny
* MIT/GNU Scheme
* MultiLisp
* Pocket Scheme
* Racket
* RScheme
* Scheme 48
* SCM
* SIOD
* T
* TinyScheme

 |
| ISLISP | 
* OpenLisp

 |

 |
| غير قياسي | 

|  |  |
| --- | --- |
| لوغو | 
* MSWLogo
* NetLogo
* StarLogo
* UCBLogo

 |

* Arc
* أوتوليسب
* BBN LISP
* كلوجر (لغة برمجة)
* ديلان (Apple, *history*)
* Emacs Lisp
* EuLisp
* Franz Lisp, PC-LISP
* Hy
* Interlisp
* Knowledge Engineering Environment
* \*Lisp
* LeLisp
* LFE
* Lisp Machine Lisp
* Maclisp
* MDL
* MLisp
* نيو ليسب
* NIL
* PC-LISP
* Picolisp
* Portable Standard Lisp
* RPL
* S-1 Lisp
* SKILL
* Spice Lisp
* Zetalisp
 |
| نظام التشغيل | 
* Common Lisp Interface Manager, McCLIM
* Genera
* Scsh

 |

 |
| عتاد الحاسوب | 
* Lisp machine
* TI Explorer
* لوحة مفاتيح سبيس كاديت

 |
| مجتمع الممارسة | 

|  |  |
| --- | --- |
| المعايير التقنية | 
* Scheme Requests for Implementation
* Common Lisp HyperSpec
* X3J13

 |
| التعليم | 

|  |  |
| --- | --- |
| كتب | 
* Common Lisp the Language
* How to Design Programs (HTDP)
* On Lisp
* Practical Common Lisp
* Structure and Interpretation of Computer Programs (SICP)

 |
| منهج دراسي | 
* ProgramByDesign

 |

 |
| المنظمات | 

|  |  |
| --- | --- |
| الشركات | 
* أبل
* بي بي إن للتكنولوجيا
* Harlequin
* Lucid Inc.
* سيمبوليكس
* Xanalys

 |
| التعليم | 
* معهد ماساتشوستس للتكنولوجيا (MIT)
* MIT Computer Science and Artificial Intelligence Laboratory (CSAIL)
* Stanford Artificial Intelligence Laboratory
* جامعة كاليفورنيا (بركلي)

 |

 |
| أشخاص | 

|  |
| --- |
| 
* إدموند بيركلي
* دانيال ج. بوبرو
* William Clinger
* R. Kent Dybvig
* Matthias Felleisen
* Robert Bruce Findler
* Matthew Flatt
* فيليس فوكس
* بول غراهام
* Richard Greenblatt
* Timothy P. Hart
* لويس هودز
* Mike Levin
* David Luckham
* جون مكارثي (عالم)
* روبرت تابان موريس
* جويل موزس
* ديفيد بارك (مهندس)
* ستيف راسيل (مهندس)
* ريتشارد ستولمن

 |
| ليسب شائع | 
* سكوت فالمان
* Richard P. Gabriel
* Philip Greenspun (10th rule)
* David A. Moon
* Kent Pitman
* قاي إل. ستيل
* Daniel Weinreb

 |
| سكيم | 
* Shriram Krishnamurthi
* قاي إل. ستيل
* Gerald Jay Sussman
* Julie Sussman

 |
| لوغو | 
* هال أبيلسون
* Denison Bollay
* Wally Feurzeig
* برايان هارفي (عالم حاسوب)
* سيمور بابيرت
* Mitchel Resnick
* سينثيا سولومون

 |

 |

 |
| 
* **تصنيف:ليسب**
* **تصنيف**
* **قائمة**

 |

* أيقونة بوابةبوابة برمجة الحاسوب
* أيقونة بوابةبوابة تقانة المعلومات
* أيقونة بوابةبوابة علم الحاسوب