if
في أبسط صوره، يقيّم الشرط if في Scheme اختبارًا، وبناءً على النتيجة ينفّذ إحدى كتلتي التعليمات البرمجية المحتملتين. أبسط شكل يبدو كالتالي:
(if test-is-true
do-this)- إذا قيّم
testإلى true (#t)، تُنفَّذ كتلة consequent. قد تُرجع الكتلة قيمة أو تنفّذ إجراءات أخرى، مثل تعيين متغير أو طباعة مخرجات.
مثال
(if (< 0 1)
(lumi-message "True!"))- هنا،
testهو(< 0 1)(التحقق مما إذا كان 0 أقل من 1). - بما أن نتيجة الاختبار صحيحة (
#t)، تُنفَّذ كتلة التعليمات البرمجية(lumi-message "True!")، التي تطبع"True!".
إضافة فرع else: if-else
عند استخدام if مع كتلة بديلة (حالة else)، تبدو البنية كالتالي:
(if test
do-this
else-do-this)- إذا قيّم
testإلى true (#t)، تُنفَّذ كتلة consequent. - إذا قيّم
testإلى false (#f)، تُنفَّذ كتلة alternative.
(if test
consequent
alternative)كيف يعمل
تعبير الاختبار:
- يُقيَّم تعبير
testأولًا.
- يُقيَّم تعبير
النتيجة بناءً على الاختبار:
- إذا قيّم
testإلى true (#t)، تُنفَّذ كتلة consequent. - إذا قيّم
testإلى false (#f)، تُنفَّذ كتلة alternative.
- إذا قيّم
يمكن لكل من كتلتي consequent وalternative تنفيذ أي عملية Scheme صالحة، بما في ذلك إرجاع القيم أو تعديل المتغيرات أو تشغيل إجراءات.
أمثلة
مثال 1: إرجاع قيمة
(if (< 0 1)
1
0)- هنا،
testهو(< 0 1)(التحقق مما إذا كان 0 أقل من 1). - بما أن نتيجة الاختبار صحيحة (
#t)، تُنفَّذ الكتلة consequent (1) وتُرجع قيمتها.
النتيجة: 1
مثال 2: تقييم كتلة begin
عندما تحتاج إلى تنفيذ إجراءات متعددة عندما يكون الشرط صحيحًا أو خاطئًا، يمكنك استخدام begin أو let لتجميعها.
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- هنا،
testهو(= 0 1)(التحقق مما إذا كان 0 يساوي 1). - بما أن نتيجة الاختبار خاطئة (
#f)، تُنفَّذ الكتلة alternative:- أولًا، تطبع
"False condition met, calculating...". - ثم تحسب
(* 3 4)وتُرجع12.
- أولًا، تطبع
النتيجة: تطبع « False condition met, calculating… » وتُرجع 12.
مثال 3: تقييم تعبير let
يتيح let الإعلان عن متغيرات محلية داخل كتلة التعليمات البرمجية.
(if (= 1 1)
(let (x -1)
(lumi-message "True condition met, calculating...")
(* x 10))
(let (y 4)
(lumi-message "This won't run")
(* 3 y)))- هنا،
testهو(= 1 1)(التحقق مما إذا كان 1 يساوي 1). - بما أن نتيجة الاختبار صحيحة (
#t)، تُنفَّذ كتلة consequent:- أولًا، تطبع
"True condition met, calculating...". - ثم تحسب
(* -1 10)وتُرجع-10.
- أولًا، تطبع
النتيجة: تطبع « True condition met, calculating… » وتُرجع -10.
ملخص
- الشرط
ifأداة قوية في Scheme لتقييم الاختبارات وتنفيذ كتل التعليمات البرمجية المقابلة. - يمكنه التعامل مع التعبيرات البسيطة وكتل التعليمات البرمجية المعقدة التي تُرجع قيمًا أو تعدّل المتغيرات أو تنفّذ تأثيرات جانبية.
- تذكّر: إذا لم تكن هناك كتلة
elseصريحة، يقيّمifوينفّذ consequent فقط إذا كان الاختبار صحيحًا؛ وإلا يقيّم وينفّذ alternative.