2016/11/21

[py]処理は小分けにした方がよさそうだ

前回、pythonのスコープのことを書いた。
いつも使っているC/C++と違って、関数やモジュールの単位しかないので、何気なく変数を使ってしまうと、それがスコープを外れないまま使われてしまうことになる。

まあ、通常はスコープ外と思って代入から始めるから問題はないのだけれども、思っていない変数が再利用されているというのは気持ちが悪いし、pyCharmも指摘してくるのでなんとかしたい。

 

ひとまず、グローバルにしたい、と思った変数は、大文字にしてしまうか、可変な場合は「g_」をつけて、まずは見た目で分かるようにした。
なんというか、自分がC/C++で書くときと同じルールを採用したということだ。

できれば、staticみたいなものがあるとよいのだけど、pythonにあるのかわからん。
たぶん、アンダーバーをつけるというのが、そういうやつなのだろう。
大文字の名前を付けるのと同じようなものか。

今のところ、まだモジュール間で変数を持ち合いたいような処理がないのでこうしているが、そうなっても問題ないように「g_」じゃなくて「_」だけにした方がよかったかもしれん。
まあ、検索のしやすさを考えて「_g_」とかか?
キャメルでの変数名は推奨されていないようだから、アンダーバーでつないで長くなってしまうけど、そこは仕方あるまい。

 

ただ、こうやっても名前を見て分かるだけで、「g_」がついていない変数はローカルスコープのつもりで扱うように、という管理をしなくてはならん。
これだと、pyCharmで指摘されるのは避けられないから、

  • 代入しなくてよい変数は作らず、直接引数に渡す
  • 処理単位ごとに関数に分ける

というのがよいのではないかと思った。

pydocで平文があると実行されるから「if __name__ == '__main__'」にしましょう、という記事見かけるが、スコープの観点からもそうした方がよさそうだ。
処理を関数に分けてしまえば、変数もその中だけになるので、使い回しにはならなくて安心だ。

 

という、理屈は分かるのだ!
わかるのだけど、言語に対する理解が足りていないので、処理をだらだらと書いてしまう。。
あれだな、C言語初心者の書いたコードを読んで「ここら辺は関数にすればよいのに」と思うのと同じことだろう。
頭で分かっていても、コードが付いていかないということがあるのだな。

 

こういうのは新しい言語を覚えるときにしか出てこないので、いろいろ言語を使い分けられるようになると、その言語自体に慣れる前に対応できるかもしれない。
その域に達することができるだろうか。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。