前回、pythonのスコープのことを書いた。
いつも使っているC/C++と違って、関数やモジュールの単位しかないので、何気なく変数を使ってしまうと、それがスコープを外れないまま使われてしまうことになる。
まあ、通常はスコープ外と思って代入から始めるから問題はないのだけれども、思っていない変数が再利用されているというのは気持ちが悪いし、pyCharmも指摘してくるのでなんとかしたい。
ひとまず、グローバルにしたい、と思った変数は、大文字にしてしまうか、可変な場合は「g_」をつけて、まずは見た目で分かるようにした。
なんというか、自分がC/C++で書くときと同じルールを採用したということだ。
できれば、staticみたいなものがあるとよいのだけど、pythonにあるのかわからん。
たぶん、アンダーバーをつけるというのが、そういうやつなのだろう。
大文字の名前を付けるのと同じようなものか。
今のところ、まだモジュール間で変数を持ち合いたいような処理がないのでこうしているが、そうなっても問題ないように「g_」じゃなくて「_」だけにした方がよかったかもしれん。
まあ、検索のしやすさを考えて「_g_」とかか?
キャメルでの変数名は推奨されていないようだから、アンダーバーでつないで長くなってしまうけど、そこは仕方あるまい。
ただ、こうやっても名前を見て分かるだけで、「g_」がついていない変数はローカルスコープのつもりで扱うように、という管理をしなくてはならん。
これだと、pyCharmで指摘されるのは避けられないから、
- 代入しなくてよい変数は作らず、直接引数に渡す
- 処理単位ごとに関数に分ける
というのがよいのではないかと思った。
pydocで平文があると実行されるから「if __name__ == '__main__'」にしましょう、という記事見かけるが、スコープの観点からもそうした方がよさそうだ。
処理を関数に分けてしまえば、変数もその中だけになるので、使い回しにはならなくて安心だ。
という、理屈は分かるのだ!
わかるのだけど、言語に対する理解が足りていないので、処理をだらだらと書いてしまう。。
あれだな、C言語初心者の書いたコードを読んで「ここら辺は関数にすればよいのに」と思うのと同じことだろう。
頭で分かっていても、コードが付いていかないということがあるのだな。
こういうのは新しい言語を覚えるときにしか出てこないので、いろいろ言語を使い分けられるようになると、その言語自体に慣れる前に対応できるかもしれない。
その域に達することができるだろうか。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。