2018年8月25日土曜日

if文

条件文ifの構文

ファミリのパラメータには条件文を組み込むことができます。構文は

=if(条件,条件が真の場合の値,条件が偽の場合の値)

です。

【条件は数字しか判断できない】

条件には他のパラメータの値を用いることができますが、その真偽の判断が可能なのは数字のみで、文字は判断できません。たとえば「文字列が一致する」などの判断はできません。

例1
パラメータ名 パラメータタイプ
paramA           文字
paramB           文字

=if(paramA=paramB,…,…)

条件式に用いることができるパラメータタイプは、
  • 数値
  • パラメータタイプが数値のパラメータ名
  • パラメータタイプがはい/いいえのパラメータ名
です。

【異なるタイプを比較するには?】

例2
パラメータ名 パラメータタイプ
paramA           長さ
paramB           実数

=if(paramA=paramB,…,…)


パラメータタイプが異なる場合は直接比較することはできません。そう、Revitは単位にうるさいのです。こういうときは「魔法の/1」を使って
=if(paramA / 1 = paramB, …,…)
とすればOKです。

【以上・以下の判断】

大きい小さいを比較する演算子は>,<,=のみであり、>=や<=を用いることはできません。これは「未満ではない」という理屈でnotを使って条件式を作ります。notは真偽の値を反転します。

例3
パラメータ名 パラメータタイプ
paramA           長さ
paramB           長さ



paramAがparamB以上である
=if(paramA >= paramB, …, …)
=if(not(paramA < paramB), …, …)

【値の差が±1.0に納まっている】

値が±○○以内にあることを判断するには絶対値absを使います。

例4
パラメータ名 パラメータタイプ
paramA           長さ
paramB           長さ



paramA-paramBが±1未満である
=if(abs(paramA - paramB) < 1 , …, …)

paramA-paramBが±1以内(1より大きくない)である
=if(not(abs(paramA - paramB) > 1 ), …, …)

【○○より大きく○○より小さい】

値がある範囲に収まっているかどうかを判断するにはandを使って二つの式を結合します。
andの構文  and(式1,式2)
式1と式2がともに真ならば、真を返します。つまり両方成り立っている場合だけ真を返します。

例5
パラメータ名 パラメータタイプ
paramA           長さ

paramAが1より大きく10より小さい場合


=if(and(paramA>1, paramA<10) , …, …)

paramAが1以上10以下の場合


=if(and(not(paramA < 1), not(paramA > 10)),…, …)

paramAが1以上10未満の場合


=if(and(not(paramA < 1), paramA < 10),…, …)

【条件式をはい/いいえのパラメータが受け取るとき】

条件式を「はい/いいえ」のパラメータが受け取る場合はifは不要です。

例6
パラメータ名 パラメータタイプ
paramA           長さ
paramB           はい/いいえ

paramAが10より小さいとき

paramB = paramA<10

【範囲外】

ある範囲に値がないことを判断するにはORを使います。
orの構文  or(式1, 式2)
式1または式2のどちらかが真であれば真を返します。つまりどちらかが成り立っていればよい、ということです。
例7
パラメータ名 パラメータタイプ
paramA           長さ

paramAが0未満、または10より大きい
=if(or(paramA<0, paramA>10) , …, …)
paramAが0以下、または10以上
=if(or(not(paramA>0), not(paramA<10)) , …, …)

【二つ以上の式を判断する】

andとorは引数として式を2しか受け取ることができませんが、使い方を工夫すれば3つ以上の条件を判断することができます。
考え方のポイントは

  • ☑真=1(0でない整数)
  • □偽=0
  • andは掛け算(式1×式2)----一つでも0があれば答えは0=偽
  • orは足し算(式1+式2)-----一つでも1があれば答えは0ではない=真

とすればわかりやすいと思います。

すべての式が成り立っていることを判断するには
and(and(式1,式2),式3)
                         --------(式1×式2)×式3
and(and(式1, 式2), and(式3, 式4))
                         --------(式1×式2)×(式3×式4)
一つでも偽=0があれば答えは0=偽です。

どれかが成り立っていることを判断するには
or(or(式1,式2),式3)
                         --------(式1+式2)+式3
or(or(式1, 式2), or(式3, 式4))
                         --------(式1+式2)+(式3+式4)
一つでも真=1があれば答えは0ではない=真です。