プログラミング アルゴリズム 【プログラミング一般】グローバル変数を使用しない(多用しない)


This topic contains 0件の返信, has 1件の返信, and was last updated by  ライシェス 9 年 4 ヶ月.

  • プログラミング言語で数多くの言語が採用しているグローバル変数の危険性について説明します。(※C#のようにグローバル変数を禁止している言語もありますが。)  

     

      プログラミングで安易に使いがちなグローバル変数これが無い、もしくは少ないうちはそれ程影響がでないかもしれません。しかし、これが多くなるとソースが読みにくいばかりでなく、グローバル変数多用における爆発現象が発現されます。超絶に読みにくくなるうえ、パッチとしてまたグローバル変数を使って蓋をするのですから、被害が甚大となります。特にチーム開発の現場では禁止事項にしてもよいぐらいに危ないものであるのは確かです。  

     

      しかし、RGSSではまだ節度をもった使い方であるものですから、それ程の被害は報告されていません。やばいのは、CやJava、Rubyといった本格的なものです。個人的にC#のグローバル変数禁止は英断といえるでしょう。

     

        では実例に入ります。

    $face_no =  1 ; $char_no = 2; $position = 2

     

    これを見てぞっとしない方はプログラミングの勉強をやり直しましょう。 正しくは次のようにすべきです。

     

    @window.control([face_no]1,[char_no]2,[position]2)

     

    こうすれば、ローカル変数の中に閉じ込められるので、見るべき個所はほんの僅かで済みます。先ほどの例ですと、プログラム全体を見渡してどこがどうなってるの?とかを検証せざるを得なくなります。プログラム全体を見渡してどうなっているのかが分からないまま使用すると、新たなバグを生み出す温床にもなっていきます。

     

    グローバル変数は少ない方がいいですので、次のように閉じ込める方法も有用です。

    $game_switches = Game_Switches.new

    $game_variables = Game_Variables.new

                             #以下続く                   

    module Game

      @switches = Game_Switches.new

      @variables = Game_Variables.new

                            #中略                      

    def self.switches;@switches;end

    def self.variables;@variables;end

                            #中略                 

    end

    ※重大な注意:殆どのRGSS素材はグローバル変数ありきで対応しています。

     

      最後に、有能なプログラマほど、グローバル変数を避ける傾向にあることは頭の片隅にでも入れておいてください。

このナレッジに返信するにはログインしてください。