変数名を短縮する方法[終了]


8

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


1
これはstackoverflow.com/questions/4358840/…の複製ですか?

11
ヒントを得ます。難しい場合は、やめてください。
S.Lott、2011

3
記述していないコードで省略識別子を操作すると、脳に損傷を与えます。
Rick Sladkey、2011

2
ルールを厳守することは、脳損傷の原因または兆候のいずれかです。いずれにせよ、重要なのは判断です。
Tダンカンスミス

1
@T Duncan Smith:それはどこから来たのですか?あなたは、この質問への受け入れられた答えに同意する人々が脳の損傷を持っていることをほのめかしました。私は、暗号コードを読むのが難しいと冗談を言っていました。
Rick Sladkey、2011年

回答:


66

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


5
完全に同意するかわかりません。私はあまり省略しませんが、場合によっては省略することをお勧めします。短いローカルスコープで長い変数名を使用すると、実際には非常に煩わしいものになります。私は "p"が3空間の点を参照する関数をたくさん書いています。関数が何らかの方法でポイントを操作することを意図している場合、それは「thePoint」と同じくらい明確であり、読みやすいと思います。
Tダンカンスミス

4
私が言ったように、私は「略語がより読みやすいのでない限り」フルネームを好む。実際に同意するようです。
Rein Henrichs、2011

@Duncan、多分それはあなたには明らかですが、誰もが省略形とあなたが実際に意味するものとの間の相関関係をすぐに見るわけではありません。他のすべてのユーザーがすぐに理解できるようにしない限り、すべての変数は完全に説明的である必要があると思います。レインがループで「i」を使用することを述べたように、私がそれを許容できると考えるシナリオの1つです。
ダレンヤング

1
私はほぼ同意します。略語があまりにも一般的でない限り、略語しないでください。何が略されているのかは疑いがありません。良い例がSystem.IOです。Commonは、あなたが働いている会社だけでも共通である可能性があります。もちろん、新入社員はそれが何を意味するのか正確に知らないでしょう。しかし、会社の一部であることは、遅かれ早かれ彼らが会社の専門用語を学ぶことを意味します。
ピート

3
@Duncan残りを省略しないことと引き換えに、実際に情報を伝えないものは何でも喜んで取り除くでしょう。「thePoint」は、「the」がまったく何も寄与しないという点で、私の嫌いです。しかし、「point」や「p」ではなく「thePt」に短縮することで、さらに悪化させることができます。
Julia Hayward

13

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

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

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

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

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

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

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

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


Visual Studioを使用と仮定し、彼らはあなたが入力し「myfunc関数(」あなたはそれが言いたくないとすぐに出てくると思いますので、興味深い、私はパラメータを省略しませんdouble createBox(string tb, int cir, double pmj)追加するには、単に思考
マーク・Lalor

私は主にemacsを使用しています。私は恐竜だと思いますが、いくつかのプラットフォームで(同時に、同じコードで)いくつかの言語で作業する必要もあります。略語が明らか(かつ一貫している)場合は、パラメーターを略記することがあります。これは、1つのページにすべてを表示できるように十分に短い関数を試してみるからです。 。最も重要なことは一貫性ですが、「同じ」パラメーターが(概念的に)1つの場所で省略されている場合は、常にそのようにする必要があります。
T Duncan Smith

1
とにかく、ここでの重要なポイントであるIMHOは、正しいものを調べなくても自動的に入力できるようにすることさえしていません(それはおまけですが)。主なポイントは、後でコードを読むときの認識の負担を減らすことです。決まり文句ですが、自分のコードでさえ、書くよりも何度も読む傾向があります。本質的なアイデアが本質的に難しい場合は、本質的な認知的負担をできる限り排除したいと考えています。ここで一貫性が役立ちます。それは不可能な理想ですが、理想的なコードは、還元不可能な困難のみを含むべきです。
T Duncan Smith

7

vry rsn w dn't bbrvt st mk sr th cd s rdbl nd mntnbl eg

int accountBalanceInSavings

->に短縮できます

int accBalInSaving

4つの単語のうち2つは短縮されます(account-> accおよびBalance-> Bal)が、他の2つは短縮されないことに注意してください。ここで適用されるルール-最初の2ワードを非表示にします。「7文字以上のワード」ではありません。27文字のものがあり、1つはなかったためです。

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

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

コードは1回だけ記述され(大抵は数回、その後1回)、何千回も読み込まれることに注意してください。


3
コンテキスト外で見た場合、accBalInSavingの意味がわかりません。また、savingsBalanceと同じくらい長くなります
Richard Tingle

のような変数を使用しなければならない場合accBalInSavingは、設計に問題があります-変​​数は、実際には暗黙的である必要のあるコンテキスト情報を多く持っています。Accountたとえば、それがクラスのプロパティである場合、その名前に「アカウント」を含める必要はありません。その場合、省略は、この問題を敷物の下で一掃するのに役立つ鎮痛剤にすぎません。
Konrad Morawski、2015年

3

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

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

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


2

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

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


2

疑わしい場合は、綴ってください。

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

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

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つ以上のセマンティックユニットで構成されている)がまだある場合、コードが単一のスコープで多くのことを実行しようとしており、その関数をリファクタリングする必要があるという症状である可能性がありますまたは、変数は単一のオブジェクトでより論理的に管理される場合があります。


0

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

int accountBalanceInSavings

->に短縮できます

int accBalInSaving

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

int accBal

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


2
私は誤解したいaccBalInSavingためにaccumulated Bal In Savings
KajMagnus

-4

あなたはものを短縮するためにものを短縮するべきではありません、あなた/他の人の便宜のためにそれを行うべきです私はそれをその単語の最初の3つの重要な文字に短縮します、例えば:

int damagePerSecond;

に短縮できます

int dmgPerSec;

または、できるだけ短くしたい場合は、

int dps;

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