IT系・器用貧乏ブログ

プログラマー兼デザイナー兼システムエンジニア兼サポセンをこなす器用貧乏。聞かれれば何でも答えて、頼まれればなんでもやります。

グローバル変数を撲滅したい理由

当然だ!と思われる方はスルーして下さい。そんなに深い内容の話じゃないです。(苦笑

f:id:kiyou_binbou:20130318191005p:plain

グローバル変数が大好きだった時代

グローバル変数が大好きだった時代が僕にもありました。

いつでも、どこからでも扱えるグローバル変数は、引数など難しい事を考えなくて済むので、簡単に使えて便利!とりあえず、グローバル変数にしておけば、「中身が呼べない!どうしよう(パニック!!)」なんてことは無い。

18歳の時に「日本語プログラミング なでしこ」で、プログラミングの第一歩を歩み出した私としては、グローバル変数こそ正義!いつでもどこでもグローバル変数!という作り方をしていました。

というのも、日本語で作るプログラムは、日本語であるがゆえに、変数の取り違えが起こりづらい。変数に i とか j とか使うこともないですし、日本語としてソースコードがある程度なめらかに読めてしまうので、「文章」として認識でき、この「変数」がどれのことを指しているのかが、何となく解るという「初心者に優しい」状態だったのです。(国語力の問題か!?)

しかし、その後、C・Delphi(Object Pascal)・phpなどを使うようになるにつれて、ソースコードも長くなり、グローバル変数を使う機会は減りというか、ほぼ無い状態になりました。

 

グローバル変数を撲滅したい理由

グローバル変数は、基本的に邪魔だと思う。バグの温床になるし、複数人開発をする場合に秩序無く乱発されると、瞬時に、二度と見たくないソースコードの出来上がる。

また、ユニットテストを書く時に、関数内にグローバル変数が入っていると、テストの結果がグローバル変数の値次第で変わってくるとなると、テストに信憑性を欠くことにもなる。

他人のソースコードとなれば、それこそ、どこでグローバル変数が書き換わっているのかすら、探すだけで一苦労で、メンテナンス性も皆無・・・。

そう、グローバル変数は、開発・管理・メンテする上で邪魔なのだ!だから、ぜひ撲滅したい。

 

グローバル変数が無いなら・・・。

18歳の時の自分に伝えたい。

グローバル変数がないならば、配列やインスタンス化したクラス(オブジェクト)を引数で渡して、必要に応じて返り値を返し、返ってきた値を必要があれば、変数に上書きすればいいと…

これだけの事で、変数がどこで書き換わったのか、バグがある関数はどれか、が凄く探しやすい!これだけでもグローバル変数を撲滅する要因になり、今後のプログラミングの学習が早くなると…

 

グローバル変数の存在意義

敢えて存在意義があるとすれば、初心者に優しいということ…

引数・返り値などの概要を覚える前段階として、グローバル変数は、ある程度の意義はあると思う。

取っつきやすく扱いやすいグローバル変数は、小さなプログラムでも使い勝手がよい。見通しの良いソースなら、グローバル変数もありかもしれない…

 

 

ということで、どうでもいい話は、おしまい。

賛否両論ある(?)かと思うので、コメントまで(^^;