NScr Hack

ちょっとだけ言語ハック - senzogawaのNな日々が面白い。

1.一気に値を代入できる。

ポイントは、「ダブルクォートなんかも普通に代入できる」って点でして、straliasの使い道 - 永字八法で一生懸命考えたことが台無し。

2.if文はそのままネストできる。

これも見てのとおり、別に区切りなしでもifネストは可能。

と言うより、以前どっかで書いた覚えがあるんだけれども、NScripterにおいてifは文ではなく(ちょっと特殊な)命令。引数に与えられた評価式を評価して、それが真になれば続きを実行、そうでなければ次の行に実行行を移す命令。

使いどころは特に思いつかない。結果として「&」と同じ事なので。

ちょっとだけある。ifで評価式が成立しなかった場合、その後の命令は構文も含めて全く評価されない。なので、こういうスクリプトが組める。

notif %soeji<0 if ?hairetsu[%soeji]>0 mov %result,1

%soejiが0未満だったとして、その%soejiを配列の添え字として扱うと必ずバグる。なので直前に%soejiが0以上であることを確認してから配列にアクセスすることができる。
なお、&や&&は、内部的にifと同じルーチンで実行されてると思う。多分。ただし、&や&&はその前にifないしnotifがあることを期待しているらしく、行頭にいきなり&(or&&)を持ってきた場合、何も実行しない。恐らく、行に入る度にif用のブーリアン型変数がfalseになり、&&はその変数を参照して、falseであれば「ifでこけたんだな」と判断してそれ以降の実行をやめるのではないか。

3.defsubとaliasで同じ識別名を使える。

文脈依存で、そこには何があるかを期待してるんだろうな。

基本的には意識して使わない方がいいだろう。

賛成。バグの元だ。

4.getparamを切り替えることで別の引数をとるようにできる。

mov3〜mov9 みたいな命令を作った方がいいんじゃね?とか思う。
とは言え、遅延引数受取はPerlで慣れてるからそうそうおかしな仕様でもないと思ってしまう。

5.無名のラベルを呼び出せる。

使い道が思いつかないな。マジで。

6.1行でfor文を書ける。

これは本気でよい仕様。そうかーできたのかー。for〜nextだけで最低3行も使わなくてよかったんだ。便利。

7.コールバックを呼び出せる。

オブジェクト指向的にゲフンゲフン。

8.returnで強引にスタック消費できる。

面白い。何かには使えそうなんだがなあ。

9.次のファイルに行数ジャンプできる。

ファイルをシーンに見立ててファイルの先頭に移動できる技かと思ったが、違った。
これは本気で役に立つ場面が思いつかない。

10.0の長さの配列を使える。

面白いが、役には立たなさそうだなあ。

感想

もっともっと!