サポートできないコード

エッセイ「メンテナンス不可能なコード」の最初の部分の略語による無料翻訳。 変数の命名は非常にありふれたトピックですが(楽しいトピックですが)、この部分がないとエッセイは不完全になります。



プロローグ





これは私のエッセイの中で最も人気があります。 これがm笑だと気付かない人が多いのは驚くべきことです。



このエッセイは、Javaプログラマー向けのジョブを作成するために書かれています。 その中で、私は、あなたの後に来る人々がわずかな変更さえ何年も費やすことになるほど維持が難しいコードを書く方法について、マスターのアドバイスを集めました。 さらに、これらのヒントを注意深く守れば、コードを正常にサポートする機会が他に誰もいないので、あなたの人生が終わるまで雇用が提供されます。 ただし、すべてのルールに従った場合は、チャンスさえありません。



やりすぎないでください。コードはサポートされていないように見えるべきではありませんが、そのようにしてください。そうしないと、リファクタリングされたり、書き直されたりする危険があります。



一般原則





質素なラテン語のディクトゥムシット、アルタムソナチュア。

ラテン語で言われていることは印象的です。



コードに付随するプログラマー(以下「メンテナー」)を防ぐには、彼の考え方を理解する必要があります。 彼にはあなたの巨大なコードがあり、それを理解することは言うまでもなく、すべてを読む時間はありません。 彼は、予期しない副作用を受けずに、何かを変更し、修正し、そこで停止する必要がある場所をすばやく見つけたいと考えています。 コードを部分的に検査し、タスクはコードの一般的なアイデアを定式化できないようにすることです。 あなたの目標は、彼が必要とするコードの検索をできるだけ複雑にすることであり、最も重要なことは、彼が単一のコードを無視できないようにすることです。



プログラマーは、慣例の幻想を楽しんでいます。 契約を軽く破ります-そして、メンテナーは虫眼鏡でコードのすべての行を読む必要があります。 言語のプロパティによってコードがサポートされないように思われるかもしれませんが、実際はそうではありません。 正しく使用した場合のみ。



命名





「私が言葉を使うとき、ハンプティ・ダンプティは、「それは私が意味することだけを意味します-それ以上でもそれ以下でもありません」と言いました。」



サポートされていないコードを記述する技術の重要な部分は、変数とメソッドの命名です。 コンパイラにとっては何の意味もないため、メンテナーを混乱させる可能性は無限にあります。



1. 1文字の変数名


変数にa、b、cという名前を付けると、単純なテキストエディターでそれらを見つけることはできません。 さらに、誰が何のためにあるのか推測することはありません。 誰もがサイクルカウンターi、j、kを呼び出す伝統に違反していることを言及している場合、FORTRAN、それらをii、jj、kkに置き換える方法に敬意を表して、スペイン異端審問が異端者に何をしたかを言及します。 代わりに、ループカウンター以外にはi、j、およびkという名前を使用します。



2.創造的なタイプミス


わかりやすい名前を使用する必要がある場合は、それらを間違えてください。 すべてではありません:論理ペア(SetPintleOpeningとSetPintalClosingなど)からの1つの名前のエラーは、開発環境のgrepまたは検索ツールの使用を効果的に無効にします。 好みに国際化を追加します。ローカライズに応じて、torryまたはtoriを記述します。



3.抽象的であること


抽象語と概念(それ、すべて、データ、ハンドル、スタッフ、実行、ルーチン、実行)、および数値:routineX48、PerformDataFunction、DoIt、HandleStuff、do_args_methodを使用します。



4. A.K.R.O.N.I.M. / pst skrshnmi GRZD intrsn


略語を使用してコードを短縮します。 本物のマッチョは略語を決して説明しません。彼らの理解は彼らの血にあります。 これをすぐに実行できない場合は、意味のある名前でコードをすばやく記述し、すべての変数とメソッドの名前を自動的に変更します。 1つの概念をいくつかの方法で縮小できる場合は、それらすべてを使用します。これは、単純なテキスト検索でプログラムを理解しようとしている怠け者との戦いに役立ちます。 アメリカ主義も使用します(私たちのロケールでは、おそらくウクライナ語が推奨されます-およそPer)



5.シノニム


同じアクション(たとえば、display、show、present)で可能な限り多くの同義語の辞書をスクロールします。 それらを使用して、実際に違いがない場合に違いがあることを示します。 反対に、本質的に異なる機能に名前を付けるには、同じ単語を使用します(たとえば、「紙にインクで印刷する」、「ファイルに書き込む」、「画面に出力する」という意味の印刷)。



6.プロジェクト用語集の作成を避ける


いかなる状況でも、プロジェクトで使用される用語の明確な定義を含む用語集を作成することに同意しません。 用語集を書くことは、「情報隠蔽」として知られる構造設計の原則に対する専門家による違反です。



それでも用語集を作成する必要がある場合は、再帰的な定義を使用してください。 Ant 1.6.5マニュアルからの例:「basedir:プロジェクトのbasedirへの絶対パス(プロジェクトのbasedir属性で指定)。」 読者は、baseirが何であるかをまだ理解していませんが、彼が始まる例にもかかわらず、これが絶対パスであると仮定することができます。つまり、相対的です。



それ以外の情報を提供するふりをして、読者をからかいます。 空の格言を定式化し、読者がそれらから有用なものを抽出できないと自分を責めるようにします。



決して視覚的な例を使用しないでください。あまりにも明確です。 それらを使用することを余儀なくされた場合、それらは子供っぽくて専門的でないように見えると文句を言ってください。さらに、これらの例は製品ができることのすべてであるようです。 しかし、あなたは教えたくありませんが、読者に感銘を与えて、彼がすぐにプログラムのすべての機能を吹き込んだように! 人々は、理解するには抽象的すぎるもののみを尊重します。 最後に、例を挙げて見た学者は一人もいません。



7.他の言語の規則に従って複数形


エスペラントクリンゴン、 ウェストロンは素晴らしいです。 擬似エスペラントでは、ojを追加することで複数形が形成されます。 このようにして、あなたは世界平和を維持します。



8.上位レジストリ


他の文字と同様に、音節の最初の文字を任意に大文字にします。



9.名前の再利用


言語構文で許可されるすべての場合において、クラス、メソッド、メンバー変数、パラメーター、グローバル変数、ローカル変数に同じ名前を付けます。 {}ブロック内でローカル変数を再利用することをお勧めします。 これは、アテンダントが各変数のスコープを慎重に検査するために行われます。 言語によって、再利用の可能性は異なりますが、ほとんどの場合、コードに素敵な小さなものを挿入する方法を見つけることができます。変数AとBを関数に渡すことにより、関数シグネチャで場所を変更します。 1つの変数を異なる目的に使用するか、その目的をわずかに変更します。



10.アクセント付き文字/アドバンストASCII


開発環境でこれが許可されている場合は、変数名にアクセント文字を使用してください。 多くのテキストエディターでは、そのような文字は通常の文字と区別するのが困難です。 同様のトリックは、拡張ASCIIテーブルの文字を使用することです。これにより、変数名のセットが非常に複雑になります。



11.コンパイラ名の長さの制限


コンパイラが名前の最初の、たとえば8文字のみを区別する場合、たとえば、ある場合はvar_unit_update()、別の場合はvar_unit_setup()のように、末尾を変更します。 コンパイラは、両方の名前をvar_unitとして扱います。



12.下線はあなたの友達です


変数名として_および__を使用します。 さらに、変数名の最初と最後に下線をいくつか追加すると、新しい変数を取得できます。できれば、タイプと目的が異なることが望ましいです。



13.バベルの塔


複数の言語(人間またはコンピューター)をランダムに混在させます。 人間の言語は、コメントおよび変数名で使用できます(エンティティの英語名またはロシア語の翻訳から作成します)。 上司が1つの言語のみを使用することを主張している場合は、別の言語で考えを表現するのが得意だと言います。 これが役に立たない場合は、言語差別を訴え、訴える恐れがあります。 言語の数が少なすぎる場合、変数名のために辞書からいくつかの単語をいつでも借りることができます。



14.重要な変数名


意味のある変数名を本当に使用する必要がある場合は、値が完全に異なるサブジェクト領域の何かに強く関連付けられているものを選択してください。 数学記号の名前はうまく機能します:

openParen = ( slash + asterix ) / equals;





または感情的な色が強い名前:

marypoppins = ( superman + starship ) / god;







15.同意しない


コードの外観を管理する一般に受け入れられている規則、特にSunのコーディング規則ハンガリー語表記を無視します。 幸いなことに、コンパイラはこれに応答しません。 さらに、独自の合意を考え出し、それらを使用しないことを他のすべての人のせいにすることができます。



16.類似文字


ほとんどのフォントには、lと1、0とO、gとq、mとrnなど、同様のスタイルの文字のペアがあります。 それらを使用してください! これらの文字が大きく異なるフォントを使用しないようにします。



17.紛らわしいメソッド名


各メソッドがその名前の約束より少し少ないか少し多いことを確認してください。 たとえば、isValid(x)メソッドには、xをバイナリ形式でデータベースに書き込む副作用があります。



18.世界文化の傑作への言及


青の代わりに、定数に0x0204FB LancelotsFavouriteColourという名前を付けます。 この色は通常の青とまったく同じように見えるため、メンテナーは苦労してカラーコードを把握する必要があります。 もちろん、モンティパイソンと聖杯に堪能な人だけが、ランスロットのお気に入りの色が青であることを推測します。 一方、メンテナーがMonty Pythonの映画をメモリから引用することさえできない場合、彼はプログラミングで何をしますか?



19.カラーエンターテイメント


言うまでもなく、色の名前の代わりに、数値を使用する必要があります。 残念ながら、ほとんどのアテンダントは16進コードが簡単に解読できることを既に知っているため、10進コードを使用する必要があります。 電卓を持たない普通の人は、132347を青色として解読しません。 理想的には、10進表記が他の色の16進表記である色を選択する必要があります。 したがって、たとえば、808000は実際には0x0c5440です。

色の名前を変更して遊ぶこともできます:puce、teal、papayawhipが実際にどのように見えるかを知っている人はほとんどいないため、色定数を再割り当てする余地があります。



20.高度な心理学の成果


人間の脳が一度に快適に処理できる情報は7つまでです。 これを使用します。 いくつかの直交タイプの情報を保持する変数名を作成します(変数のタイプと範囲、その発信元と宛先、および作成日)。 プログラムロジックに、複雑なネスト構造の外観を与えます。 最適なブロックサイズは、画面に収まる行数よりもわずかに大きくなります。



All Articles