@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- @IT情報マネジメント 会議室 Indexリンク
- IT戦略
- 仕事の改善
- アーキテクチャ
- プロジェクト管理
- ITインフラ
- Webマーケティング
- BPMプロフェッショナル
- 業務アプリ
- - PR -
なぜ「グローバル変数」を使っては、いけないのですか?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-15 10:42
はにまるです。
「きれいなソースを描くには」というスレッドで「グローバル変数」の話が挙がり燃えていましたが、 もしかすると下火状態なのか?と思った瞬間、不燃箇所を残す事無く「完全に燃やさねばならぬ!」と、 はにまるにしては、珍しく技術者魂が叫んでおります。 ![]() つまり、こんな基本的で初歩的な話も整理建てて話す事も出来ないのに 新しい技術ばかり話をしていていいのですか?と思いました。 むかつきました?ごめんなさい。 でも、むかついたなら、是非!是非!、ご返答を頂きたいと思います。 # 「アホどもめ!俺様が教えてやる!」って感じで結構ですが、ただそれは気持ちだけに納め、 # 文書は「しなやかに(田中知事用語引用)」お願い致します。 基本的な話ですので、どなたでも、個人的見解を述べれると思います。 完璧な返答は要りまん。 あなたの答えは、今年技術者になった方の為の返答です。 あなたの答えは、基礎技術を飛ばしてきた方の為の返答です。 あなたの答えは、これから設計者を目指す方への基本的アドバイスです。 あなたの答えは、小難しい技術論に追われ簡単な説明を忘れた方の為の返答です。 説明を受ける技術者のレベルは限定しませんので 投稿文書を記述時にイメージした技術者(説明を受ける人)のレベルを 提示して頂けると嬉しいです。 ![]() この議論は設計技術(1年目プログラマーが学ぶべき設計技術を含め)の基礎であり、 新たな技術を学ぶ基礎ベースとなり、恩恵を高める知識になると考えます。
では、教えてください。 ![]() なぜ「グローバル変数」を使っては、いけないのですか? | ||||||||
|
投稿日時: 2004-04-15 10:47
<リザ−ブ>
元スレッドの2つを集約して、ここに乗せますが、 ちょっと時間がかかるので予約! ![]() 待ちきれない人は、こちらへ、 きれいなソースを描くには 説明方法を変える過渡期か? | ||||||||
|
投稿日時: 2004-04-15 11:26
こんにちは。
ほかのスレッドは一切見てません(リンクをクリックすらしてません)ので、ほかの話はわかりませんが、 グローバル変数って使っていいんじゃないでしょうか。 私はオブジェクト指向が好きですが、 バグが出なければ、どんな書き方でもアリだと思います。 どんな書き方でもアリと書きましたが、ほかの人が読みやすいかどうか の問題はありますね。 #あまり、関係ないですが、みなささん、議論がお好きですね^^。 #議論することは良いことで、するべきことでしょうが、あまり結論がでないような話題だと #なんか疲れてしまいますねw _________________ | ||||||||
|
投稿日時: 2004-04-15 11:29
まず、私の基本的姿勢としては「時と場合により、使ってはいけない場合がある」という
スタンスです。 では、どんな時使ってはいけない(使わないほうが良い)のかというと、 ・共通ライブラリ等、別のプロジェクトでも細かい単位(関数やクラス)で使い回し を考えるもの ⇒グローバル変数ごと利用する必要が発生し、グローバル変数の中でも必要なものと 必要でないものを吟味しながら再利用する必要がある。(面倒) ・メモリに余裕が無い(または小さくしなければならない) ⇒グローバル変数(Staticも同様)は使われる局面でなくても、常時メモリの空間 を占有する為。 ですね。 一方、使ってよい場合としては、 ・ほぼ普遍的に使われるであろうエンティティに対して ⇒カレントDir(ローカルでも取得できますが)、DB接続文字列等、一度取得しセット してしまえば、後は使い回しのみで済む。(グローバル定数の場合もありますが) ・外部連携、割り込み、トレース、メッセージ等で共通的に使用するもの ⇒エラーメッセージ格納用変数等統一して使用することで読みやすくなる。(ローカル な変数で命名だけを統一しても可能ですが...)外部からハンドリングする場合 等はそのグローバル変数の値を取得するだけで、状態がわかるような作りが可能。 ・全体への通知等が必要な構造体、変数等 ⇒ローカルな変数では呼出側にしか通知できない為、モジュール内での変更が直ちに 全モジュールへ影響するようなフラグ系のデータ等 というような感じですかね。 | ||||||||
|
投稿日時: 2004-04-15 12:08
[グローバル変数の特徴]
いつでもどこからでも変更・参照できる。 [特徴から来る弊害] 1.メモリ上に常駐している必要があるのでリソースをくう。 2."いつでもどこからでも"は言い換えると"秩序がない" [弊害対策] 1.事実として避けようがない。極力使用する数やサイズは小さくする。 2.プログラム言語は人が与えた秩序に忠実に動く。動かないのはむしろ人。 [「グローバル変数は使うな」に思うこと] これが言える人はおそらくグローバル変数を上手に使える人。周りの無秩序な使い方にうんざりしている人。グローバル変数を使わないように誘導できるのなら上手に使うように誘導できるんじゃないかなー? # 結論が出ない議論で疲れないコツは結論を出そうとしないことでしょうか。 | ||||||||
|
投稿日時: 2004-04-15 12:30
> # 結論が出ない議論で疲れないコツは結論を出そうとしないことでしょうか。
なるほどですねー(笑) いつも、答えがほしいと思ってしまいます。 _________________ | ||||||||
|
投稿日時: 2004-04-15 12:35
2-b. いつどこで、変更されたかを調べるために、全ソースコードを総当りでチェックする必要がある。 | ||||||||
|
投稿日時: 2004-04-15 12:55
るぱんです。
グローバル変数の特徴はラフィンさんが書いた物で納得です。 使い方は、 僕が「他人が使うかもしれない物を無責任に放り出す」事を嫌う性格なので、 極力使いたがりません。 全体を抑えてスコープ利かせれば良いと考えてます。 この話進めると、設計力まで踏み込んじゃいますけどね。 [余談]
誘導できるぐらいの人は、 ソースコードだけ渡されて「んじゃ、あとよろしく!」 になっているのではないでしょうか? 「教育」とすると、出来ない人ほど「なんであいつが・・・?」となるし、 「んじゃやって?」と言うと、「忙しくて無理。」「なんで自分が?」 となるし・・・。 周囲の問題意識の持ち方も必要かな・・・?
議論って、結論を出す必要って無いですよね。 合意を取ってどうするこうする・・・ではなく、 同じプロセスを踏んで出てくる物が違うのは一品物を作成する上では 避けて通れない問題ではないかと思います。 [/余談] |