::mayukoの小ネタ グローバルへんすう?

   
  

 投稿者 ::mayuko

では変数ってなに><
からちょーっち踏み込んでグローバルとローカル変数について
書いてみようかと思います:)

じゃぁグローバル変数に定義する変数ってどんなのがいいかなぁ?
{}の内外関係なくどのブロックでも読み書きできるんだから
グローバルに全部定義しちゃえばいいじゃない!?
って考えませんか?

そうだ!全部一番上に書けばいいんだ!とスケベなホイットさんも言ってます。
ハイ

しかしそれだとちょっち問題が出てきてしまいます。

1.グローバル変数は必要のないときもたえずメモリを使うので
メモリがもったいない

ローカルだとそのブロックから次に移ると値がメモリから開放されて
消えちゃいます。
LSLは使われるメモリがLSLで16KB、たとえMONOでコンパイルしたとしても
最大でたった64KBです。
*コンパイルとは実行できるように機械語にすること
*64KBとはFDの約1/235001/23くらいの大きさでちっさいデス
スッゴイ計算違いしてた><

2.ローカル変数で出来ることにグローバル変数を使うと
煩雑になる

同じ変数名が使えなくてなんかスクリプトの最初の変数の定義で
名前がずらずらーっとたくさんになっちゃう><

3.どこからでも書き換えが出来るので思いもしないエラーを出す可能性がある
どこからも見れる(参照)と言うことはどこからでも
書き換えが出来るということです。
なのでー大きなプログラムを書いたときに、うっかりしてスクリプトの中で
値を書き換えたりしたら全部のプログラムに影響が出ます。
つまり修正が困難になってわけわかんなくなるw

などなど、問題が出てきちゃいます。

それもスクリプトとして書いたコードや計算したりして実行する場所のメモリも
全部含めて16KBや64KBなのです。

ということで、こんなことにグローバル変数は定義するのが良いと思います。

1.可視性を考えて、絶対に変わらない値だとスクリプトを書く人が定義するとき。
*例外としてコメントをスクリプト内に書くことで可視性が保たれるならローカルでもいいと思います。
2.ブロックを越えて、値の参照、保存したいとき
*何度も同じ値を使いまわすときとか、何回も書くのもコードのむだだし
他ブロックで出した値を次に送りたいよね。

こんなことを考えると
ブロック内ですべての計算が完結して終わるもの

ローカル変数
でするのが良いと思います。

また
そのブロックでの計算の値がころころ変わるもの、変えたいもの、変わることを期待して書いたプログラムのブロック

ローカル変数
を使用すべきなんだと思います。

ただしLSLはあまり効率が良くないスクリプト言語のようで
最初からコンパイル後のコード圧縮などのために文字列やリストを
グローバル変数に定義してしまうということもけっこうします。
ただしこういった弊害があるかも?というのは
ちょっち考えながら作ったほうがいいと思います。

変数のことを2回にわけて書きました。
他にも注意点やもっと細かい説明を書かなきゃ><
と思うんだけど、
スクリプトは変数などの細かいところから全体像までなんとなく理解しないと
じゃ書いてみよ!っていうのがむずかしいと思います。

なので話を飛ばして、グローバル変数のうしろの
ステート(状態)というところから次は書いちゃおうと思います:)
*細かいところはブロックごとイベントとかそのつどで
また細かく書いてみたいと思います。



関連する投稿


セカンドライフ土地レンタルのSLingトップへ戻る

Leave a Reply


お知らせ
セカンドライフ
初期費用無料&友達紹介報酬! 『新しい仲間カマンキャンペーン』



Twitter
セカンドライフ
info
セカンドライフ
ホイッター



SLing周辺マップ
::マップページへ飛んでSL内にテレポート

SLing周辺マップ