# ロジック

ロジックブロックは、数式や論理式の結果を条件にして、異なるオペレーションを実行できます。

以下のロジックブロックは、条件の結果に応じてオペレーションを実行します。値ブロックまたはロジックブロックで [If] または [If Else] 条件を設定します。

- If
- If Else

以下のロジックブロックは、条件に使用する数値や論理値を出力します。

- Math
- 比較条件
- 論理的条件
- Not

MEMO:

- オペランドの値に以下のいずれかが発生すると、その値は未定義となります。

- 通信エラー (変数のクオリティが「bad」)

- 範囲外の配列要素番号へのアクセス

- ゼロ除算

- ロジックブロックに未定義の値が含まれると、結果は未定義となります。ただし、[論理的条件] の場合は結果を出力できる場合があります。

論理的条件

## If

このブロックは、[If] 条件の評価が真のときに [Do] ブロックの下のオペレーションを実行します。

##### ブロック

##### テキスト

'if(CONDITION){}'

MEMO: スクリプトの実行中、[If] 条件が未定義の場合、ブロックは終了します。

## If Else

このブロックは、[If] 条件の評価が真のときに [Do] の下のオペレーションを実行し、[If] 条件の評価が偽のときには [Else] の下のオペレーションを実行します。

##### ブロック

##### テキスト

'if(CONDITION){}else{}'

MEMO: スクリプトの実行中、[If] 条件が未定義の場合、ロジックは [Do] を実行せず [Else] オペレーションを実行します。

## Math

このブロックは数式です。値ブロックを左のオペランド (X) と右のオペランド (Y) に挿入し、演算子を選択します。

##### ブロック

##### テキスト

'SOURCE1 * SOURCE2'

演算子 | 式 | 説明
+ | X + Y | 加算
- | X - Y | 減算
* | X * Y | 乗算
/ | X / Y | 除算
% | X % Y | 除算の余り
& | X & Y | ビット単位の AND 演算の結果を返します。X = 0110; Y= 1100 の場合、結果は 0100 です。
| | X | Y | ビット単位の OR 演算の結果を返します。X = 0110; Y= 1100 の場合、結果は 1110 です。
^ | X ^ Y | ビット単位の XOR 演算の結果を返します。X = 0110; Y= 1100 の場合、結果は 1010 です。
<< | X << Y | 左シフト。X 内のビットが、ビットの位置から左に Y 個分シフトします。符号は保持されます。
>> | X >> Y | 右シフト。X 内のビットが、ビットの位置から右に Y 個分シフトします。符号は保持されます。
>>> | X >>> Y | ゼロ挿入、右シフト。X 内のビットが、ビットの位置から右に Y 個分シフトします。シフトされた左側は 0 が挿入され、符号は保持されません。

MEMO:

- AND/OR/XOR は、常に 32 ビット符号なし整数値を返します。
- 入力値が負の場合、ビットシフト式は 32 ビットの整数値を返します。
- 入力値が正の場合、ビットシフト式は 32 ビット符号なし整数値を返します。

MEMO:

数式の結果には、小数点が含まれます。

(例 1)
以下の場合、INT1 の値が 101 であれば、結果は 10.1 になります (.1 は切り捨てされません)。

##### ブロック

##### テキスト

'INT1 / 10'

小数点を切り捨てるには、floor ブロックを使用します。
(例 2)
以下の場合、INT1 の値が 101 であれば、結果は 10 になります。

##### ブロック

##### テキスト

'$Math.floor((INT1 / 10))'

## 比較条件

このブロックは比較条件です。値ブロックを左のオペランド (X) と右のオペランド (Y) に挿入し、演算子を選択します。

##### ブロック

##### テキスト

'CONDITION1 == CONDITION2'

演算子 | 説明 | 例
<= | X の値が Y の値以下の場合は、真を返します。 | X = 7 かつ Y = 33 の場合、式 X <= Y は真です。
>= | X の値が Y の値以上の場合は、真を返します。 | X = 32 かつ Y = 10 の場合、式 X >= Y は真です。
< | X の値が Y の値より小さい場合は、真を返します。 | X = 7 かつ Y = 38 の場合、式 X < Y は真です。
> | X の値が Y の値より大きい場合は、真を返します。 | X = 27 かつ Y = 14 の場合、式 X > Y は真です。
!= | X の値が Y の値と等しくない場合は、真を返します。 | X = 7 かつ Y = 33 の場合、式 X != Y は真です。
== | X の値が Y の値と等しい場合は、真を返します。 | X = 5 かつ Y = 5 の場合、式 X == Y は真です。

## 論理的条件

このブロックは論理的条件です。値ブロックを左のオペランド (X) と右のオペランド (Y) に挿入し、演算子を選択します。

##### ブロック

##### テキスト

'CONDITION1 && CONDITION2'

演算子 | 説明 | 例
&& | 論理積 両方が真の場合は真を返します。 | X = 真 かつ Y = 偽 の場合、式 X && Y は偽です。 MEMO: 片方のオペランドの値が未定義でも、もう一方のオペランドが偽であれば、結果として論理条件は偽と評価される可能性があります。以下の表を参照してください。
X | Y | 結果
未定義 | 未定義 | 未定義
未定義 | 真 | 未定義
未定義 | 偽 | 偽
真 | 未定義 | 未定義
偽 | 未定義 | 偽
|| | 論理和 両方の入力が偽である場合以外、真を返します。 | X = 真 かつ Y = 偽 の場合、式 X || Y は真です。 MEMO: 片方のオペランドの値が未定義でも、もう一方のオペランドが真であれば、結果として論理条件は真と評価される可能性があります。以下の表を参照してください。
X | Y | 結果
未定義 | 未定義 | 未定義
未定義 | 真 | 真
未定義 | 偽 | 未定義
真 | 未定義 | 真
偽 | 未定義 | 未定義

## Not

このブロックは論理否定またはビット否定を行います。値ブロックをオペランド (X) に挿入し、演算子を選択します。

##### ブロック

##### テキスト

'!SOURCE'

演算子 | 説明 | 例
! | 論理否定 BOOL 値の逆を返します。 | X = 偽 の場合、結果は真です。
˜ | ビット否定 各ビットの逆の値を返します。 MEMO: 整数を使用する場合、ビット式のビット長は常に 32 ビットです。 | X = 0011 の場合、結果は 1100 です。