時間
ChucKは時間の概念が言語の根幹に組み込まれて*1いて、プログラマがコントロールできる。
内部型として時 time と継続期間 dur がある。dur として用意されている単位はミリ秒から週までのms、second、minute、hour、day、weekと自分には意味不明なsamp。例えば二分三十秒は
2::minute + 30::second
でOK。「::」は一体何なんだ。
VM内部での現在時間を保持するのは time型の now というキーワードで、こいつをいじることで時は進む*2。進め方はChucK演算子を使って、
- dur型 => now : 指定した継続期間だけ時を進める
- time型 => now : 指定した時間になるまで時を進める
とやる。
無意味にFizzBuzzを書き換えてみた。一分間0.5秒毎に数を数え上げていくバージョン。
now + 1::minute => time later; // 今から一分後 1 => int i; while(now < later) { if (i % 15 == 0) <<<"FizzBuzz">>>; else if (i % 3 == 0) <<<"Fizz">>>; else if (i % 5 == 0) <<<"Buzz">>>; else <<<i>>>; i++; .5::second => now; // 0.5秒進める }
まだ音は出ない。