なでしこ3は回数が変わりやすい?
なでしこ3では回数がグローバル変数になっているようです。(v3.3.76時点)
なでしこ1ではローカル変数のような動きでした。
例)関数Aを呼んだあと回数を表示させた結果が異なる
●関数A
10回
それ=回数 //回数を変更
3回
関数A
回数を表示 //なでしこ1→1,2,3 なでしこ3→10,10,10
なでしこ1では「1,2,3」が表示されるのに対し、
なでしこ3では「10,10,10」が表示されます。
このコードでは回数で試しましたが、対象も同じような感じです。
対象、対象キーも同様
なでしこ3では回数
、対象
、対象キー
、抽出文字列
もグローバル変数です。(v3.3.76時点)
なでしこ1でも抽出文字列
はグローバル変数ですが、回数
や対象
は違うみたいです。
以下のコードもなでしこ1と3で対象
が異なっています。
「あいう」を文字列分解して反復
「かきく」を文字列分解して反復
それは対象 //か,き,くに対象を変更
対象を表示 //なでしこ1→あ,い,う なでしこ3→く,く,く
なでしこ3では対象が変わりやすくなった
なでしこ3では対象が変わる機会が増えました。
切り取る
命令では、切り取った前半と後半をそれ
と対象
に分けて代入します。
DOM部品のクリック時などのイベントでは、対象
に発生した部品が入ります。
AJAX送信時
などでは、対象
に受け取った情報が入ります。
なでしこ1では反復以外では勝手に変わらない屈強な変数だった対象が変化しやすくなりました。
秒待つの最中に対象が変わる!
x秒待つ
で待っているときにイベントが走るときがあります。
このとき対象が変わっていることがありえます。
以下のプログラムでは「秒待つ」している間にボタンクリックのイベントが起きた場合、対象が変わります
//サンプル(なでしこ3)
「ぼたん」のボタン作成
それをクリックした時には:
//特になし(イベントが走ると対象がボタンに変わる)
「あいうえお」を文字列分解して反復:
1秒待つ //ここでボタンをクリックすると対象が変わる
対象を表示
特殊変数を破壊から守る方法は……
※(マニュアルには特殊変数「それ」特殊変数「対象」といった記述あり)
関数の開始時に特殊変数をスタックに積んで、関数から戻る前にスタックから降ろせばよさそうです。
特殊変数用 = []
●特殊変数セーブ:
特殊変数用に{"回数":回数,"対象":対象,"対象キー":対象キー,"抽出文字列":抽出文字列}を配列追加
●特殊変数ロード:
変数 sore=それ
変数 obj=特殊変数用から配列ポップ
回数=obj["回数"]。 対象=obj["対象"]。 対象キー=obj["対象キー"]。 抽出文字列=obj["抽出文字列"]。
soreを戻す
●ユーザー定義関数
特殊変数セーブ //回数や対象を保存
//ここで回数や対象が変わる処理
特殊変数ロード //回数や対象を復元
戻る
……関数はともかく、イベントによる対象変更には無力です。どうにもならないね!
そのうち慣れる
ユーザー定義の関数を呼んだ後や、待つのあとは回数や対象は不定なものとして扱うしかなさそうです。
なでしこ1の挙動がステキだっただけに残念です。