元ネタ→【PHP】 変数の受け渡しについて!
グローバルにスコープを持たせる方法をご存じでなかったらしい。それは、今回関係ない。関係あるのは、この言葉。(グローバルって)便利ですねこれは!
便利なのか?
確かに、「便利!」と思うかもしれない。
C 言語から C++ に以降したての頃・・・いや、移行していないな。移行しようとしていた頃、クラスの中に定義すると、インスタンスを作成しないと見えない、クラスの外から見えない、というのが、非常に使いづらかった。
で、まぁ、C++ だから、みんながインクルードするヘッダ ファイルに書いちゃうわけだ。
ん。。。今考えると、C でも、とっても怖いことしていたなぁ。。。
「あれも、これも、あっちでもこっちでも使いたい。でも、見えない。だから不便。」そんな風に思っていた。
オブジェクト指向の「カプセル化」に慣れてくると、それがいつの間にか、「あっちからもこっちからも変更できてしまう。なんて危険!!」に変わっている。。。
ん~!おもしろい!!
まぁ、確かに、作るときは、作るときは、作るときは、…これくらい強調しておけばいい?作るときは、どこからでも参照できるのは、便利。でも、デバッグするとき、機能追加するときに、地獄が見られる。かもしれない。
修正するときに一番気を使うのは、「他の機能に影響を及ぼさないか」ということです。どこでも参照できる変数というのは、保守するときには「どこで参照されているかわからない変数」に変わります。そして、「作っている期間」より、「保守している期間」の方が、遙かに長いです。
つまり、「この、global スコープで定義されている変数の内容を、ここで変えていいのだろうか?」ということをず~~~~っと考えながら保守しなければなりません。
「どこで使われているか、grep かければわかる」ですって?
確かに、どこで使われているかは、わかります。でも、「いつ使われているか」までは、わかりません。
「cflow かけて(まだあるのか?)呼び出し図つくればええやん」ですって?
で、結局、コードを読まないと、変更していいのかどうかは、わからないわけです。
この辺でね、地獄になるのですよ。
DLL-Hell といい、怖いもの見たさはいいと思います。見るのは、いいと思います。でも、体験する必要は、ないと思いますよ?
投稿日時 : 2008年6月5日 22:12