タグ付けされた質問 「globals」

17
なぜグローバル国家はそれほど悪なのか?
これを始める前に、抽象化と依存性注入の概念をよく知っていると言っておきましょう。ここで目を開ける必要はありません。 まあ、私たちのほとんどは、「グローバル変数を使用しないでください」、または「シングルトンはグローバルであるため悪です」と本当に理解せずに何度も言います。しかし、不吉なグローバルな状態で本当に悪いのは何ですか? たとえば、システムフォルダパスやアプリケーション全体のデータベース資格情報など、アプリケーションのグローバル構成が必要だとしましょう。 その場合、これらの設定を何らかのグローバルスペースで提供する以外に良い解決策はありません。これは、アプリケーション全体で一般的に利用できます。 私はために悪いことを知っている虐待それを、しかし、世界的なスペースが本当にあるTHAT悪?もしそうなら、どんな良い選択肢がありますか?

22
グローバルとデータベースとの違いは何ですか?
私はちょうどこの古い質問に出くわして、グローバル状態の悪さを問いかけました。トップ投票で受け入れられた答えは、グローバル変数で動作するコードを信頼できないと断言しています。その後、値とデータが異なるため、あなたのコードの動作がどうなるか分かりません! しかし、それを見たとき、私はそれが本当に弱い説明だと思わざるを得ません。データベースに保存されたデータを操作するのとはどう違うのですか? プログラムがデータベースのデータを処理しているとき、システムの他のコードがそれを変更しているのか、まったく別のプログラムがそれを変更しているのかは関係ありません。データが何であるかは気にしません。それが全体のポイントです。重要なのは、コードが遭遇するデータを正しく処理することです。(明らかに、私はここでしばしば厄介なキャッシングの問題を明らかにしていますが、今のところそれを無視しましょう。) ただし、使用しているデータが、データベース(またはユーザー入力、ネットワークソケット、ファイルなど)など、コードで制御できない外部ソースからのものであり、何も問題がない場合それで、コード自体のグローバルデータはどうですか?あなたのプログラムはそれをはるかに高度に制御していますが、誰も問題とみなさない完全に通常のものより明らかに悪いものではない場合、悪いことですか?
250 state  globals 

10
コールチェーンのいくつかのレベルでのみ使用される(パラメータを渡す)パターンの名前はありますか?
私はいくつかのレガシーコードでグローバル変数を使用する代替案を見つけようとしていました。しかし、この質問は技術的な選択肢に関するものではなく、私は主に用語について心配しています。 明らかな解決策は、グローバルを使用する代わりに関数にパラメーターを渡すことです。このレガシーコードベースでは、値が最終的に使用されるポイントと最初にパラメーターを受け取る関数の間で、長い呼び出しチェーン内のすべての関数を変更する必要があることを意味します。 higherlevel(newParam)->level1(newParam)->level2(newParam)->level3(newParam) どこnewParam私の例では、グローバル変数以前だったが、それは代わりに、以前にハードコード値だったかもしれません。ポイントは、newParamの値がで取得されhigherlevel()、で「移動」する必要があることlevel3()です。 値を変更せずに「渡す」多くの関数にパラメータを追加する必要があるこのような状況/パターンの名前があるかどうか疑問に思っていました。 うまくいけば、適切な用語を使用することで、再設計のソリューションに関するリソースをさらに見つけ、同僚にこの状況を説明できるようになります。

15
クリーンなコード:いくつかのパラメーターを持つ関数[終了]
Robert C. MartinによるClean Codeの最初の章を読みましたが、かなり良いように思えますが、疑問があるのですが、ある部分では、関数のパラメーターが少ないほど良い(認知的に)ことは言及されています可能な限り、3つ以上のパラメータが関数には大きすぎることを示唆しています(私は非常に誇張されており、理想的です)ので、私は疑問に思い始めました... グローバル変数を使用し、関数に多くの引数を渡すという慣習はどちらも悪いプログラミング慣行ですが、グローバル変数を使用すると、関数のパラメーターの数を大幅に減らすことができます... だから私はあなたがそれについて考えることを聞きたかったのですが、関数のパラメータの数を減らすためにグローバル変数を使う価値はありますか?どのような場合になりますか? 私が思うに、それはいくつかの要因に依存しているということです: ソースコードのサイズ。 関数の平均のパラメーターの数。 関数の数。 同じ変数が使用される頻度。 私の意見では、ソースコードのサイズが比較的小さい場合(600行未満のコードなど)、多くの関数があり、同じ変数がパラメータとして渡され、関数には多くのパラメータがあり、グローバル変数を使用する価値がありますが、知りたい... 私の意見を共有しますか? ソースコードが大きい他のケースなどについてどう思いますか? PS。私はこの投稿を見ました、タイトルは非常に似ていますが、彼は私が知りたいことを尋ねません。

2
メソッドのパラメーター化とグローバル変数
私のコードが成長し始めるとき、私をしばらく悩ませてきた非常に単純な質問があります。 ネストされた関数呼び出しの長いルートを通過するときに、パラメーターをグローバル変数に置き換える必要がありますか? 多くの関数が共有変数を変更できるため、グローバル環境はプログラムの状態を予測不可能にする可能性があることを理解していますが、それでもグローバルスペースは物事をとても簡単にします。 私自身について説明しましょう: functionA(){ x = something functionB(x) } functionB(x){ functionC(x) } functionC(x){ finallyDoSomethingWithX(x) } finallyDoSomethingWithX(x){ x += 1 //Very dummy example ignoring pass by value, not reference. } と取り換える: globalX; functionA(){ globalX = something functionB() } ... ... ... finallyDoSomethingWithX(){ globalX += 1 } 2番目の方法は、パラメーターが簡単に蓄積され、コードを再利用する必要があるときに非常に制限される場合があるため、プログラムに非常に多くの自由を与えると感じますが、同時に、変数に関連する場合、関数がモジュール性を失うように感じますグローバル環境では、たとえば、finallyDoSomethingWithX別の変数thaで操作したい場合にも再利用性が失われglobalXます。 私は実際にデザインパターンを使用していないため、これが起こっていると思います。Javascriptでプログラミングしているためです。私にとっては、中規模プロジェクトでは、1つのスクリプトですべてを扱う言語のように感じます。 何かアドバイスは?パターン?必要に応じて、より具体的にすることができます。

4
Cのファイルスコープの「静的」変数は「extern」グローバル変数と同じくらい悪いのですか?
staticCでは、C ++でプライベートクラスメンバー変数を使用する場合に、(スタイルの問題として)ファイルスコープ変数を使用することがよくあります。マルチスレッドプログラムにスケーリングする場合thread_localは、C11または長くサポートされている拡張機能を追加__threadするだけで十分です。私はあなたが内部のすべてを置くことによってC ++とCで正確に同じことを行うことができます知っているstructし、それへのポインタをとる関数のセット作りstruct、その最初の引数としてを。一部のライブラリは、これを広範囲にわたって実行します。しかし、私の個人的なスタイルはstruct、必要に応じて、できるだけ小さくすることです。 「グローバル」変数が非常に悪いと主張する人々をよく読んだり聞いたりします。私はそれらの理由を追っていますが、彼らの議論のほとんどはexternC用語のグローバル変数に関連しているようです。彼らの言うことは確かに真実です。extern宣言された変数の1つまたは2つをプログラム全体で使用すると、処理が大幅に簡略化され、追跡が容易になる場合がありますが、さらに先に進むとプログラムが予測不可能になります。 何についてのstatic変数?彼らはまだ「実際の」グローバル変数と同じ問題を抱えていますか?多分私はこの質問をして私がしていることが正しいと思うなら続ける必要さえないかもしれませんが、今日私は別の「グローバル変数は悪い」種類の投稿を見た、そしておそらくこれはおそらく正しいとここに来ましたそのような質問のための場所。あなたの考えは何ですか? この質問はの重複ではありません。このこの質問はについて尋ねているためexternとstatic他の質問は、ファイル・スコープとブロックスコープについてです一方、非ローカル変数static変数。
8 c  globals 

1
なぜグローバルっぽいObject.create関数を作成するのですか?
私は.NETとJavaの分野でかなり経験豊富なプログラマーであり、JavaScriptについて読み始めました。Douglas Crockfordの "The Good Parts"の本を購入しましたが、すぐにいくつかのことが気になりませんでした。 1つは、必要のない基本的な型を変更することです。 if (typeof Object.create !== 'function') { Object.create = function (o) { //Really... 'o'? For a parameter you're only using twice? function F() {} F.prototype = o; return new F(); }; } newObject = Object.create(oldObject); 明らかにこの目的で関数を作成すると便利で時間を節約できますが、なぜ地球上でオブジェクト上に作成することを勧めているのですか?3呼吸前に彼はグローバルが悪であることを支持し、それから彼はモンキーパッチオブジェクトに進みました。彼はそれがすでに存在するかどうかさえテストし、他のライブラリが彼のためにそれを行った場合の実装は同じであると仮定します。 名前空間に相当するJSでこれを作成しない理由はありますか?すなわち MY_UNIQUE_UTIL_LIBRARY.create = function(obj){...}; //The name would be shorter …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.