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

チームやコミュニティ全体で最も受け入れられやすい形式で、最小限の文字数で意味と説明を与えます。

2
パッケージ名は単数形ですか複数形ですか?
多くの場合、特にライブラリでは、パッケージには単一の概念に基づいて編成されたクラスが含まれます。例: XML、SQL、ユーザー、設定、デシベル。私たちは皆、これらのパッケージが単数形で正しいとかなり自然に感じると思います。 com.myproject。xml .Element com.myproject。sql .Connection com.myproject。ユーザー .User com.myproject。ユーザー .UserFactory ただし、タスク、ルール、ハンドラー、モデルなど、単一のタイプの実装のコレクションを実際に含むパッケージがある場合、これは望ましいですか? com.myproject。タスク .TakeOutGarbageTask com.myproject。タスク .DoTheDishesTask com.myproject。タスク .PaintTheHouseTask または com.myproject。task .TakeOutGarbageTask com.myproject。タスク .DoTheDishesTask com.myproject。task .PaintTheHouseTask


18
短い変数名の言い訳はありますか?
これは、現在作業しているコードベースに大きな不満を感じています。変数名の多くは短く、説明的ではありません。私はプロジェクトに残った唯一の開発者であり、それらのほとんどが何をするかについてのドキュメントがないため、それらが表すものを追跡するために余分な時間を費やす必要があります。 たとえば、光学面の定義を更新するコードを読んでいた。開始時に設定された変数は次のとおりです。 double dR, dCV, dK, dDin, dDout, dRin, dRout dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1)); dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1)); ... and so on たぶんそれは私だけかもしれませんが、それが何を表しているのかを本質的に教えてくれなかったので、コードをさらに理解するのが難しくなりました。私が知っていたのは、それがどこか特定のテーブルから特定の行を解析する変数であることだけでした。いくつかの検索の後、私はそれらが何を意味するかを見つけました: dR = radius dCV = curvature dK = conic constant dDin = inner aperture dDout = outer aperture dRin = inner radius dRout = outer radius 本質的にそこにあるものに名前を変更しました。それはいくつかの線を長くしますが、私はそれが公正なトレードオフだと感じています。ただし、この種の命名スキームは、多くのコードで使用されています。古いシステムで作業して学んだ開発者の成果物なのか、それともより深い理由があるのか​​はわかりません。このように変数に名前を付ける正当な理由はありますか、それとも変数に出会ったときにそれらをよりわかりやすい名前に更新することは正当ですか?

6
変数の名前はIdまたはIDですか?[閉まっている]
これは少し面倒ですがId、次のように使用する人もいます。 private int userId; public int getUserId(); および他の使用: private int userID; public int getUserID(); これらの1つは他よりも良い名前ですか?どうして?大規模なプロジェクトでは、これが非常に一貫性のない形で行われるのを見てきました。私がほとんどの人が慣れ親しんでいる標準を設定する場合はどうなりますか?従来の標準はどれですか?

13
どの「バージョン命名規則」を使用していますか?[閉まっている]
異なるバージョンの命名規則は異なるプロジェクトに適していますか?何を使用し、その理由は? 個人的には、16進数のビルド番号(11BCFなど)を好みます。これは非常に定期的に増やす必要があります。そして、顧客向けにシンプルな3桁のバージョン番号、つまり1.1.3。 1.2.3 (11BCF) <- Build number, should correspond with a revision in source control ^ ^ ^ | | | | | +--- Minor bugs, spelling mistakes, etc. | +----- Minor features, major bug fixes, etc. +------- Major version, UX changes, file format changes, etc.

11
「車輪の再発明」の反対のアンチパターンの名前は何ですか?[閉まっている]
「車輪の再発明」アンチパターンは非常に一般的なものです-すぐに使えるソリューションを使用する代わりに、独自にゼロから作成してください。コードベースは不必要に成長し、同じことをするわずかに異なるインターフェースがわずかに異なりますが、わずかに異なりますが、すぐに利用できる関数を書く(そしてデバッグする)時間は無駄になります。私たちは皆これを知っています。 しかし、スペクトルの反対側に何かがあります。2行のコードである独自の関数を作成する代わりに、フレームワーク/ API /ライブラリをインポートし、インスタンス化し、構成し、フレームワークで受け入れられるようにコンテキストをデータ型に変換し、必要なことを正確に行う1つの関数を呼び出します。ギガバイトの抽象化レイヤーの下の2行のビジネスロジック。そして、ライブラリを最新の状態に保ち、ビルドの依存関係を管理し、ライセンスの同期を維持する必要があります。また、インスタンス化のコードは、「車輪を再発明」した場合よりも10倍長く複雑です。 理由はさまざまです:コストに関係なく「車輪の再発明」に厳密に反対する経営陣、要件とわずかに重複しているにも関わらず、彼らの好みの技術を押している人まだ到着していないフレームワークの使用、またはいくつかのインポート/インクルード/ロード命令が「舞台裏」で伝える「重み」を誤解している。 この種のアンチパターンに共通の名前はありますか? (それが正しいか間違っているか、それが本当のアンチパターンまたは意見に基づいたものである場合、私は議論を始めようとはしていません。これは単純で客観的な命名法の質問です。) 編集:提案された「重複」は、外部システムとは完全に離れて、「すべての準備を整える」ために独自のコードをオーバーエンジニアリングすることについて語っています。このことはある場合にはそれから生じるかもしれませんが、一般的には「車輪の再発明への嫌悪感」に由来します。問題に対する「既製の」解決策が存在する場合、それがどの程度適合しておらず、どのような費用がかかっても、それを使用します。新しいコードの作成とメンテナンスのコストと比較した場合、これらの依存関係の統合とメンテナンスのコストを完全に無視して、コードの重複よりも新しい依存関係の作成を独断的に支持します。

16
ハンガリー記法を使用しないことの利点は何ですか?
私が苦労していることの1つは、ハンガリー記法を使用していないことです。私はしていないだけで、それが何であるかのタイプを参照する変数の定義に行かなければならたいです。プロジェクトが大規模になると、「bool」という接頭辞が付いた変数を見て、0/1値ではなくtrue / falseを探していることを知ることができてうれしいです。 SQL Serverでも多くの仕事をしています。データベース内のすべての変数は言うまでもなく、ストアドプロシージャの先頭に「sp」、テーブルに「tbl」を付けます。 ハンガリーの表記法を実際に使用したくない人は誰もいないと思うので、それを避けます。私の質問は、ハンガリーの表記法を使用しないことの利点は何ですか?また、大多数の開発者がペストのようにそれを避けるのはなぜですか?

7
Inversion of Controlの名前がそのようになっているのはなぜですか?
単語invertor controlは、私が見た定義で制御の反転を定義するためにまったく使用されていません。 定義 ウィキペディア 制御の反転(IoC)は、オブジェクト指向プログラミングの観点からここで表現されるプログラミング手法です。オブジェクト結合は、実行時にアセンブラオブジェクトによってバインドされ、通常、静的解析を使用したコンパイル時には不明です。〜http://en.wikipedia.org/wiki/Inversion_of_control マーティン・ファウラー Inversion of Controlは、Javaコミュニティの一般的なパターンであり、軽量コンテナをワイヤリングしたり、さまざまなプロジェクトのコンポーネントを凝集したアプリケーションに組み立てたりするのに役立ちます。〜に基づいて http://www.martinfowler.com/articles/injection.html (言い換え) それでは、Inversion of ControlがInversion of Controlと呼ばれるのはなぜですか?どのような制御が逆にされており、何によって?反転と制御という用語を使用して、制御の反転を定義する方法はありますか?

6
繰り返し呼び出されたときに、一度呼び出すのと同じ効果を持つ関数の用語は何ですか?
(シングルスレッド環境を想定) この基準を満たす関数は次のとおりです。 bool MyClass::is_initialized = false; void MyClass::lazy_initialize() { if (!is_initialized) { initialize(); //Should not be called multiple times is_initialized = true; } } 本質的に、この関数を複数回呼び出すことができ、MyClass複数回初期化することを心配する必要はありません この基準を満たさない関数は次のとおりです。 Foo* MyClass::ptr = NULL; void initialize() { ptr = new Foo(); } initialize()複数回呼び出すと、メモリリークが発生します。 動機 この基準を満たすことが期待される関数に適切にコメントできるように、この動作を説明する簡潔な単語を1つ用意しておくとよいでしょう(特に、オーバーライドされると予想されるインターフェース関数を記述する場合に便利です)
96 naming  functions 

15
変数名にUnicode文字を使用するのは悪いですか?[閉まっている]
私は最近、ランキングアルゴリズムであるAllegSkillをPython 3に実装しようとしました。 数学は次のようになります。 いいえ、本当に。 これは私が書いたものです: t = (µw-µl)/c # those are used in e = ε/c # multiple places. σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5 実際、Python 3が変数名を受け入れない、√または²変数名として受け入れないのは残念だと思いました。 >>> √ = lambda x: x**.5 File "<stdin>", line 1 √ = lambda x: x**.5 ^ SyntaxError: invalid character …
82 naming  unicode 


7
インターフェイス名は「I」プレフィックスで始まる必要がありますか?
私は、ロバート・マーティンによる「クリーン・コード」を読んで、できればより良いプログラマーになることを望んでいます。これまでのところ、どれも本当に画期的なものではありませんでしたが、アプリケーションの設計とコードの記述方法について、私は違った考え方をしました。 本の一部には、同意しないだけでなく、特にインターフェースの命名規則に関して、私には意味がありません。これは、本から直接取ったテキストです。混乱を招くと思われるこの側面を太字で示し、説明を希望します。 私はインターフェースを装飾しないままにしておきたい。前のIは、今日のレガシーワッドで非常に一般的であるが、せいぜい気を散らすものであり、最悪の場合には情報が多すぎる。ユーザーにインターフェースを渡していることをユーザーに知らせたくない。 おそらく、私が学生だからか、プロやチームベースのプログラミングを一度もしたことがないからかもしれませんが、それがインターフェースであることをユーザーに知ってもらいたいからでしょう。 インターフェイスの実装とクラスの拡張には大きな違いがあります。 それで、私の質問は、「コードの一部がインターフェースを期待しているという事実を隠す必要があるのか​​?」に要約されます。 編集 回答に応じて: タイプがインターフェースである場合、またはクラスがあなたのビジネスであり、コードを使用している誰かのビジネスではない場合。したがって、このサードパーティのコードでコードの詳細を漏らさないでください。 特定の型がインターフェイスであるか、サードパーティのコードのクラスであるかの詳細を「漏洩」しないのはなぜですか?サードパーティの開発者がコードを使用して、インターフェイスを実装するのか、クラスを拡張するのかを知ることは重要ではありませんか?違いは、私が自分の頭に浮かぶほど重要ではありませんか?

22
命名規則:camelCase対underscore_case?それについてどう思いますか?[閉まっている]
私は約2年間underscore_caseを使用してきましたが、最近新しいジョブのためにcamelCaseに切り替えました(後のジョブを約2か月使用しており、underscore_caseは多くのプログラマーが関与する大規模プロジェクトに適していると思いますが、主にコードが読みやすいためです)。 現在、職場の全員がキャメルケースを使用しています(コードがよりエレガントに見えるためです)。 camelCaseまたはunderscore_caseについてどう思いますか ps私の悪い英語を許してください 編集 最初にいくつかの更新: 使用されているプラ​​ットフォームはPHPです(ただし、厳密なPHPプラットフォーム関連の回答は期待していませんが、誰が使用するのが最善であるかについての考えを共有することができます、それが私が最初にここに来た理由です) 私はキャメルケースをチームの他のエブリバディと同じように使用します(ほとんどの人が推奨するように) キャメルケースも推奨するZend Frameworkを使用します いくつかの例(PHPに関連): Codeigniterフレームワークはunderscore_caseを推奨しており、正直なところコードは読みやすいです。 ZFはcamelCaseを推奨しており、ZFコードをフォローするのが少し難しいと思うのは私だけではありません。 だから私の質問は言い換えられます: プラットフォームにFooがあり、命名規則が推奨されておらず、チームリーダーが選択する場合を考えてみましょう。あなたはそのチームリーダーです。なぜcamelCaseを選ぶのですか、それともunderscore_caseを選ぶのですか? ps今までのところ、迅速な回答をありがとう
70 naming 

8
命名の問題:「ISomething」の名前を「Something」に変更する必要がありますか?[閉まっている]
Clean Codeの名前に関するボブおじさんの章では、主にハンガリーの表記法に関して、名前のエンコーディングを避けることを推奨しています。またI、インターフェイスからプレフィックスを削除することについて具体的に言及していますが、この例は示していません。 以下を想定してみましょう: インターフェイスの使用法は、主に依存性注入によりテスト容易性を実現することです 多くの場合、これは単一の実装者と単一のインターフェースを持つことにつながります それで、例えば、これらの2つは何と命名されるべきでしょうか?ParserそしてConcreteParser?ParserそしてParserImplementation? public interface IParser { string Parse(string content); string Parse(FileInfo path); } public class Parser : IParser { // Implementations } または、このような単一実装の場合、この提案を無視する必要がありますか?

7
論理オプションが予約キーワードである場合、どのように名前を付けるのですか?[閉まっている]
時折、何かの最も論理的な名前(変数など)は、選択した言語または環境で予約されているキーワードです。同様に適切な同義語がない場合、どのように名前を付けますか? この問題にはベストプラクティスのヒューリスティックがあると思います。これらは、プログラミング言語とプログラミング環境の作成者または管理者によって提供されます。たとえば、python.org(またはGuido van Rossum)がPythonでそれを処理する方法を示している場合、それは私の本の良いガイドラインになります。C#での対処方法に関するMSDNリンクも参考になります。 または、ソフトウェアエンジニアリングの主要な影響力のある人が提供するガイドラインも有益です。おそらくGoogle / Alphabetには、対処方法を教えてくれる素敵なスタイルガイドがありますか? 次に例を示します。C#言語では、「デフォルト」は予約キーワードです。enumを使用する場合、デフォルト値に「default」(「switch」ステートメントに類似)の名前を付けることができますが、できません。 (C#が大文字と小文字が区別され、enum定数は大文字でなければならないので、「デフォルト」ここで当然の選択ですが、私たちの現在のスタイルガイドは、すべてのenum定数は小文字であることをされている指示と仮定しましょう。) 私たちは、単語「defaultusを検討することもでき「しかし、これは最小驚きの原則に準拠していません。「標準」と「初期」も考慮する必要がありますが、残念ながら「デフォルト」はこの状況でその目的を正確に伝える言葉です。
64 naming 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.