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

9
すべてがグローバルな変数スコープの前にプログラマは何をしましたか?
だから、メインメソッド、変数を定義するいくつかのデータ型があり、型を返さないサブプロシージャ(本質的に無効なメソッド)を持つ能力がある、一見古風な言語(PowerOnと呼ばれる)に対処する必要があります議論も受け入れません。 ここでの問題は、すべてがグローバルであることです。 私はこれらのタイプの言語を読みましたが、ほとんどの本は「わかりました、私たちは馬と馬車を使用するために使用しますが、今、ここに車がありますので、それで作業する方法を学びましょう!」私たちはあの日を決して思い出しません。」私は認めなければならない、心は範囲と範囲外で考えることに苦労しています。 よくここにいます。私は、いくつかのオープンなメソッドでグローバル変数のみを管理する最善の方法を見つけようとしています。forうん、ループのイテレータでさえグローバルに定義する必要があり、コードのさまざまな部分でリサイクルしていることに気づきました。 私の質問:このタイプの経験がある人のために、プログラマーはグローバルな競技場で大量の変数をどのように処理しましたか? 私はそれが精神的なジャグリングのトリックになったと感じていますが、既知のアプローチがあるかどうか知りたいと思います。
40 scope 

7
変数のスコープを減らすためだけにブロックを作成するのは理にかなっていますか?
私はJavaでプログラムを書いていますが、ある時点でキーストアのパスワードをロードする必要があります。ただの楽しみのために、私はこれを行うことによって、Javaでパスワードをできるだけ短くしようとしました。 //Some code .... KeyManagerFactory keyManager = KeyManagerFactory.getInstance("SunX509"); Keystore keyStore = KeyStore.getInstance("JKS"); { char[] password = getPassword(); keyStore.load(new FileInputStream(keyStoreLocation), password); keyManager.init(keyStore, password); } ... //Some more code 今、私はこのインスタンスでそれがちょっと馬鹿げていることを知っています。他にもできることがたくさんありますが、それらのほとんどは実際には改善されています(変数をまったく使用できませんでした)。 しかし、私はこれを行うことがそれほど愚かではない場合があるかどうか興味がありました。私が考えることができる他の唯一のことはcount、またはのような一般的な変数名を再利用したい場合ですtempが、良い命名規則と短いメソッドはそれが有用になる可能性が低いことです。 可変スコープを縮小するためだけにブロックを使用することが理にかなっている場合はありますか?
38 java  variables  scope 

4
try-catchにブラケットが必要なのはなぜですか?
さまざまな言語(少なくともJava、C#も考えますか)では、次のようなことができます if( condition ) singleStatement; while( condition ) singleStatement; for( var; condition; increment ) singleStatement; したがって、ステートメントが1つしかない場合、を使用して新しいスコープを追加する必要はありません{ }。try-catchでこれができないのはなぜですか? try singleStatement; catch(Exception e) singleStatement; 常に新しいスコープなどを必要とするtry-catchについて特別なものはありますか?もしそうなら、コンパイラはそれを修正できませんでしたか?

8
「変数は可能な限り最小のスコープ内に存在する必要があります」には、「変数は可能であれば存在してはならない」というケースが含まれていますか?
「インスタンス変数よりもローカル変数を好む理由」で受け入れられている回答によると、変数は可能な限り最小のスコープ内に存在する必要があります。 問題を私の解釈に単純化します。つまり、この種のコードをリファクタリングする必要があるということです。 public class Main { private A a; private B b; public ABResult getResult() { getA(); getB(); return ABFactory.mix(a, b); } private getA() { a = SomeFactory.getA(); } private getB() { b = SomeFactory.getB(); } } このようなものに: public class Main { public ABResult getResult() { A a = getA(); …

6
他の1つの関数でのみ使用される関数をその関数内に配置する必要がありますか?
具体的には、JavaScriptで記述しています。 私の主な機能が機能Aであるとしましょう。機能Aが機能Bを複数回呼び出し、機能Bが他のどこでも使用されていない場合、機能A内に機能Bを配置するだけですか? それは良い習慣ですか?または、関数Bを関数Aと同じスコープに配置する必要がありますか?

4
プロジェクトに必要なプログラマの数を決定する方法
特定のプロジェクトを成功させるために必要なプログラマーの人数をどのように知っていますか? 私が働いている会社は、クライアント企業の注文を処理します。場所に基づいた在庫管理、注文処理、船荷証券の生成、請求書作成、貨物監査、レポート作成(おそらく50件のレポート)を処理する社内倉庫管理システムを作成しました。また、バーコードスキャン機能とクライアントポータル、およびその他の多数の小さな機能も備えています。また、従業員のフルタイムクロックも含まれています。Quickbooks、UPS、FedExと統合します。機能がわずかに異なる少なくとも50台のクライアントの作業を処理します。たとえば、顧客が送信したファイルから注文をインポートしますが、各顧客は異なるファイル形式(csv、excel、フラットファイル、およびWebサービス)を送信するため、十数個を超える注文変換方法がセットアップされています。輸出も同じ話です。 このプロジェクトは複雑で、毎日25万行を超えるコードで複雑さを増しています。これは、約250,000行のVB.NETコード、6,200行のRubyコード、そしておそらく5,000行のPHPです。また、約200のテーブルを持つMySQLデータベースもあります。 絶えず変化する要件と多数のクライアントの異なるニーズのために、コード自体の品質は非常に貧弱なコードから比較的良いコードまで大きく異なります。 現在、このプロジェクトにはプログラマーが1人しかいません-私です。私は現在、75人ほどの会社のすべての製品サポートも行っています。これには、トラブルシューティングと新しいクライアントのセットアップ、および必要な新しい機能が含まれます。さらに、私たちは全体を100%Ruby on Railsベースに書き換えようとしています。また、来年中にシステム全体を市場に出し、他の企業に使用したいと考えています。 現在、私たちにはプログラマーとしての自分しかいませんが、それで十分だとは思いません。この規模のプロジェクトに必要なプログラマの数や、その質問への答えをどのように決定すべきかについて、誰にも推奨事項がありますか?特に、経営者が来年までに製品の商業品質を望んでいるという事実を考えると?

3
動的スコープを持つ言語でどのように安全にリファクタリングしますか?
動的スコープを持つ言語で動作しない幸運をお持ちの方のために、それがどのように機能するかについて少しおさらいさせてください。次のように動作する「RUBELLA」と呼ばれる擬似言語を想像してください。 function foo() { print(x); // not defined locally => uses whatever value `x` has in the calling context y = "tetanus"; } function bar() { x = "measles"; foo(); print(y); // not defined locally, but set by the call to `foo()` } bar(); // prints "measles" followed by "tetanus" …

5
新しい機能に焦点を当てたプロジェクトで壊れていない既存のコードをリファクタリングする必要がありますか?
アプリケーションに新しい機能を追加することを目的とする小さなプロジェクトを考えると、導入された変更は、特定の領域でこれらを更新することを含む既存のコードに影響を与えます。実装中に、更新されたこれらのコードの一部にリファクタリングの候補があることがわかりました。 これは、影響を受けるコンポーネントのリグレッションテストを必要とするリファクタリングの適切な時間ですか(したがって、元々プロジェクトの一部ではないスコープを導入している可能性があります)?または、機能を延期し、機能を完成させ、おそらくリファクタリングのための別個のプロジェクトを用意する必要があります(ただし、ビジネスユーザーは、コードの保守性を重視しない限り、機能を追加しないプロジェクトを完全に後援できないため、少しためらっています...)?

5
Javaパッケージレベルのスコープは役に立ちますか?
私はパッケージスコープの考え方を理解しています。しかし、真剣に使用しようとするたびに、それが役立つと思っていたニーズに合わないことに気づきました。 私の主な問題は常に、私がスコープを制限したいものは決して同じパッケージに入っていないということです。それらは概念的にはすべてリンクされている可能性がありますが、アプリケーション内のデータの論理的な分割では、それらをより大きなパッケージの個別の子パッケージとして扱います。 たとえば、Missionモデルを使用していて、mymissionServicesなどの他のMissionツールのみにいくつかのメソッドを使用させたい場合があります。ただし、最終的にはパッケージとしてMissions.modelsとMissions.servicesが使用されるため、MissionModelとMissionServiceは同じパッケージスコープではありません。昇格されたアクセス許可が必要なものが、パッケージに適切に含まれているにもかかわらず、それらのアクセス許可が不要な多くのものが含まれていないような状況は決してありません。また、メソッドをスコープするパッケージの利点が、すべてを同じパッケージに配置するようにプロジェクトアーキテクチャを変更することを正当化することはほとんどありません。多くの場合、アスペクトまたは何らかの制御の逆転のどちらかが、パッケージのスコープを簡単に検討した問題に対するより優れたアプローチであることが判明します。 私は好奇心が強いのですが、これは一般的にすべてのJava開発者に当てはまると考えられているか、私が行っている作業のほんの一部にすぎません。パッケージスコープは現実世界で多く利用されていますか?それが使用するのに適した形態と考えられる多くのケースがありますか、それとも現代の開発でめったに利用されないレガシーな振る舞いと見なされていますか? パッケージのプライベートスコープがデフォルトである理由については何も尋ねていません。デフォルトに関係なくいつ使用する必要があるかを尋ねています。なぜそれがデフォルトであるかについてのほとんどの議論は、パッケージスコープが実際に役立つ場合には実際には入りません。代わりに、一般的に使用される他の2つのスコープがデフォルトではないはずであるという理由だけを主張して、除去プロセスによってパッケージが勝つようにします。また、現在の開発状況についてお伺いします。具体的には、他のツールやパラダイムによってパッケージのスコープの有用性が低下するところまで開発したので、それをデフォルトにするという決定が理にかなっていたときのことです。
11 java  scope 

4
関数内での内部スコープブロックの使用は悪いスタイルですか?
以下のリスクがあるいくつかの(かなりまれな)ケースがあります。 再利用を目的としていない変数の再利用(例1を参照)、 または、別の変数の代わりに変数を使用して、意味的に近い(例2を参照)。 例1: var data = this.InitializeData(); if (this.IsConsistent(data, this.state)) { this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer. } // ... foreach (var flow in data.Flows) { // This shouldn't happen: given that ETL possibly altered the contents of `data`, it is …


5
関数が外部からアクセスされていることを明確にする方法は?
これはC固有の質問です。私は可能な限りすべてを翻訳単位の境界内に保ち、.hファイルを介していくつかの関数のみを公開することを試みています。つまり、staticファイルレベルのオブジェクトへのリンクを提供しています。 ここで、いくつかの関数を他のモジュールから呼び出す必要がありますが、直接呼び出す必要はありません。私のモジュール/ファイル/翻訳ユニットは他のモジュールにサブスクライブし、関数へのポインターを渡します。次に、特定のイベントが発生すると、いくつかの引数を指定してポインターが呼び出されます。 したがって、これらの関数があいまいな場所から呼び出されていることを非常に明確にする方法を知りたいと思います。 彼らは、あるべきstaticかextern(及び、それらを公開しますか.h)? 関数の名前にいくつかのヒントを含める必要がありますか? それとも、「Xから呼び出されました」というコメントで十分ですか?

6
動的スコープが役立つのはいつですか?
動的スコープを使用すると、呼び出し先は呼び出し元の変数にアクセスできます。疑似Cコード: void foo() { print(x); } void bar() { int x = 42; foo(); } 動的スコープをサポートする言語でプログラミングしたことがないので、動的スコープの実際のユースケースはどうなるのだろうと思います。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.