web-dev-qa-db-ja.com

変数名を短縮する方法

私は常に変数名の省略に苦労しています。変数名を短縮するための標準はありますか?

8
Huzaifa

私が使用する標準は、省略形が完全版よりも読みやすい場合を除いて、変数名を省略しないことです(たとえば、反復インデックスの場合はi)。コミュニケーションできるように名前を付けます。変数名を短縮すると、通常、通信する能力が低下します。

66
Rein Henrichs

私はC#プログラマではないので、C#の規則についてあまりアドバイスすることはできません。しかし、私は略語についていくつかの考えを持っています。

年を取り、経験を重ねるにつれ、自分の省略形がどんどん少なくなっていることに気づきました。私がプログラミングを始めたとき、私はあまりタイピストではなかったことを認めます。それ以来、私はその点で良くなっています;)。スコープが非常に限定されている変数については自由に省略し、1つの画面でその存続期間全体を確認できるようにします。しかし、それ以外は、回避できる場合は避けたいと思っています。タイピングを省くことを決して省略しません。

私はまだ私の行を80文字以下に保つようにしています。それが最近意味があるかどうかはわかりませんが、それは古い習慣です。したがって、変数名が非常に長くなる場合は省略します。しかし、その前に、同じように明確な、より簡潔な名前を見つけようとします。それ以外の場合は、すべて同じであるほど短くなります(拡張形式と言えば)。

短縮する場所が最も重要であると私は思います。特定のコードベースで、また関連するコードベース全体で、常に同じ方法で短縮することです。覚えるのが最も簡単なため、最初の本能が適切です。ただし、同じプロジェクトの他の人に確認する価値はあります。最近は、プログラマー以外の人でいっぱいのOpen Officeで、主に他の1人のプログラマーと仕事をしています。関連する変数名を一貫して短縮する方法や、関数呼び出しでパラメーターを一貫して順序付ける方法など、詳細な議論を頻繁に行うので、彼らは私たちが狂っていると思います。しかし、2人でも名前は重要です。より大きなチームでは、それはさらに重要になります。私がかなり信心深いことの1つは、このようなものの不整合を見つけたらすぐに修正することです。

編集:いくつかの略語は良いと思います。私の現在の仕事では、特定のパラメーター値でスプラインやその他のパラメトリック関数を評価するために、多くのコードを記述しています。私たちのコードベースは、この点で実際には一貫性がありません。 uが使用されている場所とparam(省略形自体)が使用されている場所があることは知っています。 Uは、一般に理解されているパラメーターの省略形このドメインではなので、これを一貫して行う必要があると思います。 u、param、parameterのいずれでも問題ありません。 1つだけを使用している限り、混乱を招く可能性が非常に高いため、これらを使用します。しかし、私はuを好みます。

それよりも悪いですが、実際にはいくつかのタイプのパラメーターがあります。そして、私たちはそれらの一部に複数の名前があります。

これが矛盾した理由は教科書です。 6つのパラメーター空間をマッピングする必要があることがわかりました-理由は複雑ですが、基本的に、パラメーター空間、正規化パラメーター空間、弧長空間、正規化弧長空間、区分空間、および正規化に対応するパラメーターが必要でした区分的空間。最初は、これらのすべてのスペース間を行き来する必要があることに気づきませんでした。そして、それらの空間内のポイントを表すパラメーターの命名方法に一貫性がありませんでした。

これは時々起こります-あなたのアプリは成長し、あなたはそれを成長させている間にあなたはいくつかの矛盾したことをします。重要なことは、乱雑になっていることを認識し、乱雑が他のすべてに感染し、瓦礫の山に巻き込まれる前にそれを修正することです。

13
T Duncan Smith

Vry rsn w bbbbt s t mk sr th cd s rdbl nd mntnbl e.g.

int accountBalanceInSavings

->に短縮できます

int accBalInSaving

4つの単語のうち2つは短縮されていますが(account-> accおよびBalance-> Bal)、他の2つは短縮されていません。ここで適用されるルール-最初の2ワードを非表示にします。「6文字を超えるワード」ではありません。

だから、それは「accBalInSav」である可能性があります/はずです、yuk yuk yuk .......

プログラマーが年を取り、より賢くなればなるほど、彼らは次第に省略を減らします。私の年齢では、私たちはおそらく私たちの若者の罪を補おうとしています...

コードは1回だけ書かれ(何回か何度か繰り返されます)、何千回も読み込まれることに注意してください。

7
mattnz

単一の文字名についても同様の質問があります、ループ/例外で変数名に単一の文字を使用する

私の答えは今のところ、スコープが小さい場合は短くしておくことです。たとえば、短い関数のパラメーターは、短くてスペースが少ないほど読みやすくなります。クラス全体の変数は、非常にわかりやすいものにする必要があります。

Steve McConnell の古典的な本 Code Complete は、このようなものに最適です。

3
Richard

疑わしい場合は、スペルアウトしてください

変数名のポイントは、コードの意味がより明確になるようにするためです。略語が非常に明白なものでない限り、可能な限り最小のものを使用することもできます。変数名と関数名は通常、コード内の人間の言語の唯一のビットであるため、人間の目がコードの関連部分(または、大規模なコードベースではgrepなどのツール)を見つけるための「ランドマーク」として機能しますまたはack)および理解の手がかりとしても。

次の人があなたのコードを読みに来たとき、彼らはそれをあなたに感謝します。その人は一年後にはあなたかもしれません。私は多くのコードを省略して後悔しているので、今はそれを避けようとしています。

...の場合は省略してもかまいません。

...プロジェクトで作業している人々だけでなく、英語の話し言葉または書き言葉で省略形が使用されている場合(多くの辞書は、定義した用語の横にこの種の情報を提供します)。

var extensible_markup_language_element; // don't do this
var xml_element; // better
var element; // possible if the name of the function or the documentation make it clear you're dealing with XML and not the periodic table
docs.toString(); // most people capable of reading code know docs == documentation

...略語が明確に単一の概念を参照しており、コードベースに精通していない誰かによって即座に認識される場合。それでも、コメントやドキュメントが役立ちます。

var auth = user.auth;
if (auth) // If the user is authenticated?
          // If the user is authorised to do something?
          // If the authentication function exists for that user group?
          // If some setting called auth is turned on for that user?
          // If the user is the author of the document in question?
          // If the user has some authority?

var attrNames = retrieveAttrs();
if (attrNames)  // hm, attrNames sounds like an array of strings - which will be boolean true even if empty - this if looks like a bug!

const MDF // author is writing an iOS app for ordering hand-carved artisanal fibreboard so anyone familiar with the problem domain knows this has plainly nothing to do with Microsoft Database Files. Though maybe the first time it comes up in the code the author should perhaps still put its full name

...変数名が単一のスコープまたは小さな関数にのみ存在し、ユーザーが名前から意味を引き出すことを期待しない場合は、単一の文字を使用します。そのような場合、ijが一般的です。

foreach $i (1..10) { say $announcement->[$i] }

...インターフェースを作成するとき(つまり、変数名ではないため、質問の範囲外。変数名とそれらを設定するインターフェースが同じ語彙を使用することが多いためにのみ言及されている場合)、その場合、他のルールが適用される場合があります。

some_command --transaction-message "Done" # a bit wordy - keep, but ALSO allow for convenience:
some_command --msg "Done" # might be useful
some_command -m "Done"    # if you can spare -m

...コードベースが同じプロジェクトで同じ概念を何度も参照する必要があり、省略形がそのプロジェクトのスタイルガイドで定義できる場合、およびあいまいでない場合。プロジェクトがスタイルガイドとして十分な大きさでない場合は、それに見合うだけの大きさではありません。

定義上、これは大規模なプロジェクトでのみ機能するため、これにはコード例を提供しませんが、次の項目も参照してください。

...複数の貢献者と略語を義務付けるスタイルガイドを持つ確立されたプロジェクトに取り組んでいるとき。その場合は、スタイルガイドに従ってのみ省略しますが、問題がないかどうかを確認し、コメントを付ける準備をします(「これは文字列としての属性名のリストです」など)。

タイプは「_t」で終わる必要があります。 「_struct」の生の構造体定義

- https://metacpan.org/source/SHLOMIF/XML-LibXML-2.0117/HACKING.txt

最後に1つの考え:許容できないほど長い変数名(たとえば、totalAfterTaxInLocalCurrencyのような4つ以上のセマンティックユニットで構成されている)がまだある場合、コードが単一のスコープで多くのことを実行しようとしており、その関数をリファクタリングする必要があるという症状である可能性がありますまたは、変数は単一のオブジェクトでより論理的に管理される場合があります。

2
user52889

略語の公式または共通の規則があるとは思いません。通常、略語のシステムは、各個人によって、各個人プロジェクト内で作成されます。会社のソースコードスタイルポリシーには特定のルールが存在する可能性がありますが、それも会社によって異なります。

余談ですが、なぜ省略するのですか?その結果、略語の意味を理解できるのはあなただけです。変数には完全でわかりやすい名前を使用してください。それは自己文書化コードにつながります。

2
user8685

変数を短縮する理由は、大きな変数の入力をやめるためですが、同時に、短縮された変数は、最初に宣言またはインスタンス化された場所に戻るのではなく、何が保持されているかを理解できるように十分明示的にする必要があります。だから例えば:

int accountBalanceInSavings

->に短縮できます

int accBalInSaving

--->と省略しますが、

int accBal

変数を見ただけでは変数が何を保持しているのか理解できないので、間違いなく良い選択肢ではないでしょう。

0
Gaurav Sehgal