デフォルトのアクセス修飾子を使用する必要があるか—コーディング慣行?


8

通常、新しいグローバル変数を作成するときは、そのアクセス修飾子を定義しません。したがって、Javaのように、プロパティのデフォルトアクセス修飾子を採用します。デフォルトのスコープ外でその変数にアクセスする必要がある場合は、アクセス修飾子を変更します。それ以外の場合はそのままにしておきます。だから私の質問は「私はそれを正しくやっていますか?デフォルトのアクセス変数を持っているのは普通ですか?またはそれらにプライベート/パブリックを使用するべきですか?アクセス修飾子を使用しないのは良いコーディング慣行ですか?

回答:


13

ここで2つのこと:

  1. グローバルを使用しないでください:)
  2. それ以外のものにするためのオーバーライドする理由がない限り、すべてのフィールドがプライベートであると想定することが一般的/ベストプラクティスです。その場合、最も制限的なアクセスを選択する必要があります(通常は保護されます)。

もちろん、ルールには常に例外がありますが、それは最初から始めるための基本です。


最初に何か特別な理由はありますか?「グローバルを使用しない」。
Harry Joy

12
グローバルは、コードベース全体のどこからでもアクセスおよび変更できます。それらのうちのほんの一握りでは、正気な人の精神的な能力を超えてプログラムの潜在的な複雑さを爆発させるのに十分です。
tdammers 2011

static.NETのように動作する場合は、ユニットのテスト性も損なわれます。それを使用するユニットは常にそれらに依存するため、テスト中のユニットを隔離するためにそれらを偽造する方法はありません。
StuperUser

1
そしてもちろん、それらはすぐにメンテナンスの悪夢になります。何百ものグローバルでいっぱいのアプリケーションに「小さな」変更を一度加えなければなりませんでした(そのような値は、より長い入力を許可する必要がありました)。1つまたは2つではなく、何十もの場所にある数百のソースを変更する必要がありました。
2011

ニッチピックには申し訳ありませんが、あなたの2番目のポイントは、保護が最も制限されたアクセスであることを示唆しています。最も制限的なアクセスは、保護されていないデフォルトのアクセス修飾子です!
oOTesterOo 14年

5

ここにいくつかの一般的なプログラミング原則があります:

  • シンプルな方が良い
  • 明白なことを言わないでください

...だけでなく:

  • 明示的は暗黙的より良い

私はJavaの専門家ではありませんが、一般的な経験則は次のとおりです。言語に精通している人に、明示的でなくても何が起きるかが明らかな場合は、暗黙的な動作を使用します。ただし、これにより誰かが間違った方向に進む可能性がある場合は、必ず明示してください。


2
Javaでは、デフォルトのアクセスは別の種類のアクセスであるため、アクセス修飾子を追加した場合、アクセスを再記述せず、別のアクセスに変更します。そのため、明示的なデフォルトアクセスが本当に必要な場合、それを明示的にする唯一の方法は、コメントを使用することです。
マルコム

-1

Javaには自動プロパティがないため、必要に応じて、一般にすべてのクラスメンバーをパブリックに使用するためのget / setメソッドでプライベートにする必要があります。

ソース(Oracle Java Docs)によると、これは推奨されるアプローチです。

「特定のメンバーにとって意味のある最も限定的なアクセスレベルを使用してください。正当な理由がない限り、プライベートを使用してください。定数以外のパブリックフィールドは避けてください。パブリックフィールドは、特定の実装にリンクし、変更の柔軟性を制限する傾向がありますコード。 "

http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


1
しかし、どのようなあなただけでアクセスを共有したい場合は、いくつかのものではなく、すべて(のようにpublic行いますか)?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.