KSPリファレンスマニュアル 5 - 制御構文(Control Statements)

KSPリファレンスマニュアル 5 - 制御構文(Control Statements)


ブール演算子

x > y

より大きい。

x < y

より小さい。

x >= y

より大きいか等しい。

x <= y

より小さいか等しい。

x = y

等しい。

x # y

等しくない。

in_range(x, y, z)

xyzの間(両端を含む)にあればtrueです。

not a

aがfalseならtrue、その逆も同様です。

a and b

aがtrueかつbがtrueならtrueです。

a or b

aがtrueまたはbがtrueならtrueです。

a xor b

abのどちらか一方だけがtrueで、両方がtrueでない場合のみtrueです。

補足

  • ブール演算子はifwhileの文で使われます。条件がtrueかfalseかを返すためです。上の一覧では、xyzは数値を表し、abはブール値を表します。


continue

while (<condition>)

    if (<condition>)

        continue

    end if

    ...

end while

continue文です。条件が満たされた場合、現在の繰り返しの残りをスキップします。

補足

  • continue文はwhileループの中でのみ使えます。

on init
    declare $i
    declare $skipped

    $i := 0
    while ($i < 5)
      inc($i)

      if ($i <= 3)
        continue
      end if

      inc($skipped)
    end while
  
    message($i & ", " & $skipped)
end on

whileループの最初の3回の繰り返しをスキップします。メッセージは 5, 2 と表示されます。

関連項目

while ()


if ... else ... end if

if

    <statements>

else

    <statements>

end if

条件分岐のif文です。elseの分岐は必須ではありません。

on controller
    if (in_range($CC_NUM, 0, 127))
        message("CC Number: " & $CC_NUM & " - Value: " & %CC[$CC_NUM])
    else
        if ($CC_NUM = $VCC_PITCH_BEND)
            message("Pitch Bend - Value: " & %CC[$CC_NUM])
        end if

        if ($CC_NUM = $VCC_MONO_AT)
            message("Channel Pressure - Value: " & %CC[$CC_NUM])
        end if
    end if
end on

さまざまなMIDIコントローラーメッセージに応じて異なるテキストを表示します。

関連項目

select ()


select ()

select (<variable>)

    case <constant>

        <statements>

    case <constant> to <constant>

        <statements>

end select

select-case文です。

補足

  • この文はif文に似ていますが、分岐の数を任意に増やせる点が異なります。selectキーワードの後の式が評価され、個々のcase分岐と照合されます。最初に一致したcase分岐が実行されます。

  • case分岐は、単一の定数値か、「x to y」という書き方で表した数値の範囲のいずれかで構成できます。

  • KSPにはelsedefaultにあたるcase分岐はありませんが、case 08000000H to 07FFFFFFFHを使えば同じことができます。これは32ビット符号付き整数値の全範囲をカバーし、明示的に分岐が指定されていないすべてのケースを実質的に受け止めます。

on controller
    if ($CC_NUM = $VCC_PITCH_BEND)
        select (%CC[$VCC_PITCH_BEND])
            case -8191 to -1
                message("Pitch Bend down")
            case 0
                message("Pitch Bend center")
            case 1 to 8191
                message("Pitch Bend up")
            case 080000000H to 07FFFFFFH
                message("We're not sure how you got this Pitch Bend value!")
        end select
    end if
end on

ピッチベンドホイールの状態を調べます。

関連項目

if ... else ... end if


while ()

while (<condition>)

    <statements>

    <increment, decrement or wait>

end while

whileループです。

補足

  • whileループにカウンターもwait()/wait_ticks()コマンドも含まれていない場合、10,000,000回の繰り返しの後で停止して終了します。

on note
    ignore_event($EVENT_ID)

    while ($NOTE_HELD = 1)
        play_note($EVENT_NOTE, $EVENT_VELOCITY, 0, $DURATION_QUARTER / 2)
        wait($DURATION_QUARTER)
    end while
end on

押さえたノートを4分音符の間隔で繰り返します。

関連項目

wait()

wait_ticks()

イベントとMIDI$NOTE_HELD


参照元情報:Control Statements
https://docs.native-instruments.com/online-guides/ksp-manual/en/control-statements