文のウソ・ホント¶
AYAYA Wiki より転載
文を使っていく上で、誤解しやすいものやこまごましたTipsを集めました。
ウソ・ホントなんて書いてますが全部ウソになっちゃってますが(汗
なお、一部は文自体が改良されるにつれて変わっていくものもあると思います。
あくまで現状の文についてだということを忘れないでください。
ローカル変数もグローバル変数もどっちを使おうがたいした差はない¶
× - ウソ
この2つは積極的に使い分けましょう。
グローバル変数を放置するとそのまま保存されて、セーブファイルのサイズを大きくしてしまうだけでなく、むやみに延々保持される変数の個数を増やしてしまうとどんどん処理が遅くなっていってしまいます。
ローカル変数を積極的に活用しましょう。
こまめにERASEVARしたほうがメモリの使用量が少なくなる¶
× - ウソ
現在の実装では、ERASEVARしても「削除マーク」がつけられるだけで、依然としてメモリを食ったままになっています。
特に理由がない限り、こまめにERASEVARしてもあまり効果はありません。それどころか、一々削除対象の変数を検索するハメになるので、かなり動作が遅くなります。
積極的にローカル変数を使ってそもそも削除する必要がないようにするのが良いでしょう。
なお、グローバル変数を対象に終了直前にERASEVARするのは、セーブファイルの肥大化(???_variable.cfg)を防ぐ意味で有効です。
配列を使うと遅くなる¶
× - ウソ
汎用配列は十分に高速です。
下手をすると変数を大量に作るより汎用配列の参照で済ますほうが場合によっては高速な場合まであるくらいです。
ただし、簡易配列は逆に遅くなります。
確実に汎用配列を使うために、IARRAYなどを活用しましょう。
関数に値を渡す時はフィードバック演算子を使ったほうが高速¶
× - だいたいウソ
C++などの参照渡しと異なり、今の所、計算結果を再代入することで実現していますので、フィードバック演算子を使う方が遅くなる可能性もあります。
どうしても必要だという場合を除き、あまりむずかしいことは考えず、普通に渡してください。
――ぽな@ばぐとら
if文の条件を"()"で囲むと遅くなる¶
× - ウソ
辞書読み込みが終わった時に"()"は捨てられているので、あってもなくても変わりません。また"()"のあるなしにかかわらず、内部メモリの使用量も変わりません。
慣れや見た目のよさで決めてもよいでしょう。
――yukaya
日本語の関数名を使えない¶
× - ウソ
使えます。単に癖で使っていない人が多いだけです。
関数名・変数名ともに日本語(漢字・ひらがななど2バイト文字)を使って構いません。
使ってはいけないものは以下のとおりです。
- 半角数字ではじまる - 数字と誤認されるため
- アンダースコアではじまる - ローカル変数とカブるため
- 全部英語半角大文字のシステム関数とカブりそうな名前 - つかわないほうが良いだけでエラーにはなりません
- 半角+−*/などの演算子を含む名前 - 計算式と間違います