SSブログ

ローカル変数の処理は要らない? [wython]

 日本語スクリプト言語wythonの実装の仕方で、少し方針を変更する。前回は、関数定義を導入したが、その関数内で宣言するローカル変数を、グローバルな変数と別に管理すべきではないか(これは至極まっとうな見解だ。)と考えて、その(楽な)実装の仕方を考えていた。

 ところが、よく考えてみたら、変数自身を何のために管理しているのかというと、文字列内で変数として使う場合に、それを%付きの書式指定にしてフォーマット文字列に変換するためだった。つまり、その変数の型だけが必要なだけだったのである。

 もし、変数のテーブルでグローバルなものとローカルなものを区別しておかないと、**同じ名前**の変数が別の型で使われた場合、先に宣言した型を後で宣言したものが書き換えてしまうことになる。という心配がある。これではローカルで変数を宣言する意味がない。もちろん、Pythonはその辺りの変数のスコープ管理はしっかりしている。

 しかし、そもそも、同じ変数名を別の型の変数として(、可能だからと言って、)宣言し直すだろうか。そもそもそれでは変数の名前の付け方に問題があるとしか思えない。分かりやすい名前を考えているならば、その名前に適した型があるはずである。そうあるのが自然である。とするならば、同じ変数名をローカルで宣言しても、あるいは先にローカルで宣言し、あとてグローバルで宣言し直したとしても、型は同じになる可能性が高い。

 たとえば、一行のテキストを保持しておくlineという変数をよく使う。これは、文字列型変数lineとして宣言するが、ローカル変数の中で、あるいはさらに言えば、関数の仮引数の中でもlineという変数を使うことが多い。もしグローバルに使うのであれば、プログラムの最初で宣言しておくようにすれば、そのあとで、関数の仮引数で宣言なしに使っても、変数テーブルでは「文字列型」であるという情報を保持したままであり、そしてそれは何の問題もない。wythonが言語の構造を全く考慮することなく変換していることを思い起こそう。

 もちろん、これは同じ名前をローカルにもグローバルにも使っている場合であって、もし、関数の仮引数にしか使われない変数名だったら、どこでも宣言されないので、その型情報はなしのままであり、文字列の中で直接その仮引数名のまま使ったら、うまくフォーマット文字列に変換できないことになる。しかし、ここでも、一般的な傾向として、関数の仮引数のまま、それを文字列の中に埋め込んで出力する可能性は、極めて少ない。大抵は、何らかの加工をしてから表示する。そして加工するときに、別の文字列型変数に代入してから、その新しい変数を文字列の中で使用すればよい。あるいは、加工したものをもう一度、元の仮引数に代入し直すとしても、そこで型情報を宣言すれば、問題はなくなる。

 こう考えてくると、厳密に考えた場合、うまくいかない可能性は数パーセントはあるかもしれないが、大抵は何もしなくても、うまく行きそうなので、ローカルスコープの処理は、何もしないことにする。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。