優れたプログラミングのための3つのルール

最近、私は少し本当に良いコード、たくさんの平凡なものたくさんの悪いコードを見てきました。 (私が以前に書いた多くのこと-特に私が始めたばかりのとき-は後者を指します。)インターネット上のランダムな記事やプロの本を読んで、良いコードを書くのは簡単だという結論に達しました。 信じられないほど難しいが、同時に簡単。 実際、非常に単純であるため、3つのルールがあります。



  1. 車ではなく、人々のためにコードを書いてください。
  2. 繰り返してはいけません。
  3. コードの各部分は1つのタスクを実行する必要があります。


それらを常に観察し、良いコードを書きます。 任意のプログラミング言語および任意のパラダイムで。 問題は、それが非常に難しいことです。 それらはすべて規律を必要とし、後者の2つについては、ほとんどの場合、長い反射も必要です。



車ではなく人々のためにコードを書く


これは、他の2つの基礎となる3つのルールの中で最も重要です。 人にとってシンプルなコードを書きます。 ハードワークはコンピューターに任せてください。 意味のある変数名とメソッド名を使用してください。 単純な論理チェーンを適用できる混乱した論理チェーンを作成しないでください。 1行にできるだけ収まらないようにしてください。 意味のあるインデントで一貫したコーディングスタイルに従ってください。 ファイルが非常に大きく、スクロールが困難になる場合は、いくつかの小さなファイルに分割してください。



多くのプログラマーは、自分の意見ではより速く動作し、アプリケーションのサイズを小さくするものを書き込もうとします。つまり、コンピューターの動作を「促進」します。 これはすばらしいことですが、他の人にとって読みやすく、保守しやすいコードを書くことの方がはるかに重要であることを忘れないでください。



コンパイラー(またはインタープリター)は、まったく異なるスタイルのコードを処理できます。 彼にとって、 nnumberOfObjectsは同じものです。 人々のために、いいえ。 変数の目的が明らかな場合でも、コード内で長い間読み取られます。



自分用に小さなスクリプトを作成し、数年後にそれを少し変更する必要があったと想像してください。 むしろ、コメントとわかりやすい名前を備えたよく構成されたスクリプト、または単一のコメントがなく、目的がほとんど理解できない変数を備えた1つの関数でしょうか。



コードの一部を最適化するために自明でないことをしている場合は、コメントで正確にそれが何をするかを説明してください。 ただし、ほとんどの場合、コンパイラよりもプログラムを最適化できないことを忘れないでください。 現実は、彼はあなたよりも賢いということです。 これは事実です:コンパイラーは、専門家による数十年にわたるハードワークを改善してきました。 例外がありますが、ルールを確認するだけです。



人々が理解できるコードを書く。



繰り返してはいけません


プログラムの異なる部分で同じコードが何回出会ったかは数えられません。 ちょうど今日、私はレガシーコードの大きな関数に取り組んでいて、条件式の2つの異なる部分で同じ条件を見ました。 これがプログラマーの間違いであることを確認するために時間を費やす必要がありました。



同じフラグメントを複数の場所で繰り返す場合、遅かれ早かれ、そのフラグメントに戻っていくつかの間違いを修正するか、新しいものを追加する必要があります。 これにより、コードのメンテナンスが困難になります。 自分自身を繰り返す代わりに、フラグメントを必要なときにすぐにアクセスできる別のクラスまたは関数に入れます。 異なる場所で同じ順序で複数のメソッドを呼び出す場合は、別の関数でラップします。



コードに慣れるときに理解しやすいものを考えてみてください:メモリのブロックを解放する30行のフラグメント、またはclearMapVariableMemory()関数の呼び出し?

後でフラグメントを調べる必要があるかもしれませんが、それでも、別の関数を使用する方が簡単です。



同じ原則をデータに適用できます。 同じ変数を頻繁に使用する場合は、それらを別のクラスまたはデータ型に転送します。



このルールに従えば、すべての変更は普遍的なものになります。小さな修正をするために何十もの場所を処理する必要はありません。



繰り返してはいけません。



コードの各部分は1つのタスクを実行する必要があります。


最後のルールは、前の2つのルールに基づいています。コードの各フラグメントは、1つのタスクのみを実行する必要があります。 式、関数とメソッド、クラスとオブジェクトのすべてのレベルに当てはまります。



数年前、ある開発者が壊れたコードを見せてくれました。 それを理解するために、プログラマは数時間かかりました。 その結果、ポストインクリメンタルCステートメントで問題が発見されました(特別な場合、それらの動作はコンパイラによって異なります)。 その後、1つの開発書を読みながら、実際の問題はオペレーターにあるのではなく、1つのフラグメントが多くの異なるタスクを担当するという事実にあることに気付きました。



私が覚えている限り、エラーを含む行は三項演算の一部でした。 次に、条件式を計算するために、ポインターに対していくつかの操作を実行し、条件式の結果に応じてさらにいくつかの操作を実行しました。 これは主に人ではなくマシン用のコードを書く良い例でした。フラグメントの作者以外は誰も行を何回読んでも理解しません。 コードを記述したプログラマーがロジックをいくつかの部分に分割した場合、問題を解決するのに必要な時間ははるかに短くなります。



同じ方法でデータを抽出、処理、および変更しないでください。 各機能の口頭での説明を1つの文に配置する必要があります。 各行の目的は明確でなければなりません。 これにより、コードが理解しやすくなります。 私たちは誰も、数千行の長さの関数を頭に格納できません。 一緒に使用されるいくつかの小さなメソッドの代わりに、そのような関数を作成する実質的な理由はありません。



これはそれほど難しくないことに注意してください。1つの大きなタスクを完了するには、それをいくつかの小さなタスクに分割するだけでよく、各タスクは別々の機能にあります。 各関数の目的を明確に保つことが重要です。そうしないと、コードがわかりにくくなります。



コードの各部分で1つのタスクを実行する必要があります。



おわりに


良いコードを書くのは大変です。 私は4年間プログラミングを行ってきました-それほど長くはありませんが、私のものを含むかなりの数の問題を見るのに十分です。 これらの単純なルールに従わずに開発を複雑にすることが明らかになりました。 それらを正しく観察することは困難です。別個のクラスまたはメソッドが必要な場所が常に明らかではありません。 これはスキルです。 優れたプログラマーになるには長い時間がかかります。 しかし、これらの規則に従わないと、コードの記述と保守がさらに難しくなります。






記事「3つの簡単なルールでの良いプログラミング 」の翻訳。



All Articles