いつ
Scheme では、if はエレガントで多用途ですが、明示的な else なしで使用すると混乱を招く可能性があります。これは、false の場合に代替アクションを行わずに、条件が true の場合にのみコードの単一分岐を実行することを目的としている場合に特に当てはまります。このようなシナリオでは、when 構造がより明確で簡潔な代替手段を提供します。
when の基本的な形式は次のようになります。
(when test-is-true
do-this
do-that)testが true (#t) と評価された場合、when構造体の本体内のすべての式が順番に実行されます。testが false (#f) と評価された場合、何も起こらず、値は返されません。
例
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))if と when の対照
if と when の違いをよりよく理解するために、両方を一緒に使用する次の例を考えてみましょう。
(if (= 0 1)
(lumi-message "This will not run")
(when (< 0 1)
(lumi-message "The 'when' condition is true!")
(lumi-message "Executing multiple actions within 'when'.")))説明:
if条件:- テスト
(= 0 1)は、0 が 1 に等しいかどうかをチェックします。 - false(
#f)なので、ifのelseブランチが実行されます。
- テスト
elseブランチのwhenコンストラクト:whenテスト(< 0 1)は、0 が 1 より小さいかどうかをチェックします。- これは true (
#t) なので、whenの本文内のすべての式が順番に実行されます。- First, it prints
"The 'when' condition is true!". - Then, it prints
"Executing multiple actions within 'when'.".
- First, it prints
ここで when を使用する理由
- 別の
ifの代わりにwhenを使用すると、条件の明示的なelse分岐が必要ない場合にロジックが簡素化されます。 whenは、真のブランチのみが関連することを明確にし、潜在的な混乱を軽減します。
概要
- true と false の両方の分岐が必要な場合は、
ifを使用します。 - 実際のケースに分岐が 1 つしかない場合、特に複数のアクションを実行する必要がある場合は、
whenを使用します。 ifとwhenを組み合わせると、より複雑な条件を明確かつ簡潔に構造化できます。