5つのコードの匂いがする20話は100のコードの匂いですよね?
続けましょう...
オブジェクトを所有していません。
TL;DR: myを名前のプレフィックスとして使用しないでください。
いくつかの古いチュートリアルでは、'my' という単語を遅延名として使用しています。これはあいまいであり、コンテキストの間違いにつながります。
MainWindow myWindow = Application.Current.MainWindow as MainWindow;
MainWindow salesWindow = Application.Current.MainWindow as MainWindow; /* Since window is instanciated, we are currently working with a specialized window playing a special role */
リンターと静的チェッカーに、このプレフィックスを検索して警告するように指示できます。
my の使用は避けてください。オブジェクトは、使用状況に応じて変化します。
のによる写真
コードを変更した私の経験を考えると、新しいコードを書くよりも、既存のコードを読むことに多くの時間を費やしていることがわかります。したがって、コードを安くしたい場合は、読みやすくする必要があります。
ケント・ベック
ユーザー (および私たち自身) のために、エラーの説明には特に注意を払う必要があります。
TL;DR: 意味のある説明を使用し、是正措置を提案してください。
プログラマーが UX の専門家であることはめったにありません。
また、カウンターの両側にいることができるという事実を過小評価しています。
alert("Cancel the appointment?", "Yes", "No"); // No consequences // Options not clear
alert("Cancel the appointment? \n" + "You will lose all the history", "Cancel Appointment", "Keep Editing"); // Consequences are clear // Choice options have context
コード レビューですべての例外メッセージを読む必要があります。
例外を発生させたり、メッセージを表示したりするときは、エンド ユーザーのことを考える必要があります。
による写真
プログラマーが決して間違いを犯さないことは周知の事実ですが、プログラムの重要なポイントでエラーをチェックして、ユーザーをユーモアにすることは依然として良い考えです。
ロバート・D・シュナイダー
スペルと読みやすさは人間にとって非常に重要ですが、機械にとっては重要ではありません。
TL;DR: 名前には気をつけて。
私たちの多くは、英語を第一言語として話せません。
テキストと名前には特別な注意を払う必要があります。
この記事のタイトルには、コンテキストの証拠としてのタイプミスとクリックベイトがあります 😀
comboFeededBySupplyer = supplyer.providers();
comboFedBySupplier = supplier.providers();
名前には細心の注意を払ってください。
おそらく、数か月後にはコードを読む人になるでしょう。
名前とは正確には何ですか — パート I The Quest
による写真
適切に作成されたすべての大きなプログラムの中には、適切に作成された小さなプログラムがあります。
CARホアレ
怠惰な引数名を何回目にするでしょうか?
TL;DR: 偶然の位置ではなく、役割に応じて引数に名前を付けてください
メソッドを書くとき、私たちは通常、適切な名前を見つけるために立ち止まりません。
明らかなものをリファクタリングすることもありません。
class Calculator: def subtract(self, first, second): return first - second class CalculatorTest def test_multiply(): assert equals(first, second)
class Calculator: def subtract(self, minuend, subtrahend): return minuend - subtrahend class CalculatorTest def test_multiply(): assert equals(expectedValue, realValue)
引数名として「first」や「second」などの禁止語を警告できます。
常にルール提案パラメーターに従います。
役割に応じて協力者に名前を付けます。
Code Smell 65 - タイプにちなんで名付けられた変数
による写真
最終的なソース コードは、実際のソフトウェア デザインです。
ジャック・リーブス
GOTO は 50 年前に有害と見なされていた
TL;DR: GoTo を使用しないでください。
Basicでプログラミングを始めました。
そこでGOTOは酷使された。
リハビリモードで構造化プログラミングをゼロから学ばなければなりませんでした。
for x < 0 { if x > -1e-09 { goto small } z = z / x x = x + 1 } for x < 2 { if x < 1e-09 { goto small } z = z / x x = x + 1 } if x == 2 { return z } x = x - 2 p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6] q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7] return z * p / q small: if x == 0 { return Inf(1) } return z / ((1 + Euler*x) * x) }
for x < 0 { if x > -1e-09 { return small(x, z) } z = z / x x = x + 1 } for x < 2 { if x < 1e-09 { return small(x, z) } z = z / x x = x + 1 } if x == 2 { return z } x = x - 2 p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6] q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7] return z * p / q small(x, z) { if x == 0 { return Inf(1) } return z / ((1 + Euler*x) * x) } }
GOTOをサポートする言語では、リンターはその使用に対して警告を発することができます。
私たちは、数十年前に GOTO の問題を認識していました。
この問題は、GoLang、PHP、Perl などのでも依然として存在します。
幸いなことに、ほとんどのプログラマーは GOTO 文を避けています。次の目標は、有害なnull の使用を検討することです。
礼儀
のによる写真
BASIC に触れたことのある学生に良いプログラミングを教えることは事実上不可能です。
エドガー・ダイクストラ
100 マイルストーンを達成しました。
次の記事では、さらに5つのコードの匂いについて説明します!