paint-brush
コードの臭い部分を見つける方法 [パート XX]: 100 に達しました!@mcsee
1,409 測定値
1,409 測定値

コードの臭い部分を見つける方法 [パート XX]: 100 に達しました!

Maximiliano Contieri1m2022/06/11
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

例題でコードの匂いがわかる!

Company Mentioned

Mention Thumbnail
featured image - コードの臭い部分を見つける方法 [パート XX]: 100 に達しました!
Maximiliano Contieri HackerNoon profile picture

5つのコードの匂いがする20話は100のコードの匂いですよね?


前 コードの匂い

続けましょう...


Code Smell 96 - 私のオブジェクト

オブジェクトを所有していません。

TL;DR: myを名前のプレフィックスとして使用しないでください。

問題

  • コンテキストの欠如
  • バイジェクション断層

ソリューション

  1. 私のプレフィックスを削除します。
  2. 名前を提案する役割に変更します。

環境

いくつかの古いチュートリアルでは、'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 の使用は避けてください。オブジェクトは、使用状況に応じて変化します。

より詳しい情報

クレジット

UnsplashMichałBożekによる写真


コードを変更した私の経験を考えると、新しいコードを書くよりも、既存のコードを読むことに多くの時間を費やしていることがわかります。したがって、コードを安くしたい場合は、読みやすくする必要があります。

ケント・ベック

ソフトウェアエンジニアリングの名言


Code Smell 97 - 共感のないエラー メッセージ

ユーザー (および私たち自身) のために、エラーの説明には特に注意を払う必要があります。

TL;DR: 意味のある説明を使用し、是正措置を提案してください。

問題

  • 最小の驚きの原則

ソリューション

  1. 宣言的なエラー メッセージを使用する
  2. 明確な終了アクションを表示

環境

プログラマーが 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

検出

  • [×]マニュアル

コード レビューですべての例外メッセージを読む必要があります。

タグ

  • 例外
  • UX

結論

例外を発生させたり、メッセージを表示したりするときは、エンド ユーザーのことを考える必要があります。

クレジット

Unsplashのビジュアルによる写真


プログラマーが決して間違いを犯さないことは周知の事実ですが、プログラムの重要なポイントでエラーをチェックして、ユーザーをユーモアにすることは依然として良い考えです。

ロバート・D・シュナイダー



Code Smell 98 - スペルミス

スペルと読みやすさは人間にとって非常に重要ですが、機械にとっては重要ではありません。

TL;DR: 名前には気をつけて。

問題

  • 可読性
  • コード内の用語を検索するのが難しくなります。

ソリューション

  1. コードのスペルチェック。
  2. スペルチェックで IDE を使用する

環境

私たちの多くは、英語を第一言語として話せません。

テキストと名前には特別な注意を払う必要があります。

この記事のタイトルには、コンテキストの証拠としてのタイプミスとクリックベイトがあります 😀

サンプルコード

違う

comboFeededBySupplyer = supplyer.providers();

comboFedBySupplier = supplier.providers();

検出

タグ

  • 可読性
  • ネーミング
  • コードのスタイリング

結論

名前には細心の注意を払ってください。

おそらく、数か月後にはコードを読む人になるでしょう。

関係

Code Smell 48 - 標準のないコード

より詳しい情報

名前とは正確には何ですか — パート I The Quest

名前とは正確には何ですか — パート II リハビリ

クレジット

UnsplashのBrett Jordanによる写真


適切に作成されたすべての大きなプログラムの中には、適切に作成された小さなプログラムがあります。

CARホアレ


Code Smell 99 - ファーストセカンド

怠惰な引数名を何回目にするでしょうか?

TL;DR: 偶然の位置ではなく、役割に応じて引数に名前を付けてください

問題

  • 可読性
  • 意図を明らかにする名前

ソリューション

  1. 意味のある名前を使用する

環境

メソッドを書くとき、私たちは通常、適切な名前を見つけるために立ち止まりません。

明らかなものをリファクタリングすることもありません。

サンプルコード

違う

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 - タイプにちなんで名付けられた変数

より詳しい情報

名前とは正確には何ですか — パート II リハビリ

クレジット

UnsplashのPriscilla Du Preezによる写真


最終的なソース コードは、実際のソフトウェア デザインです。

ジャック・リーブス


コードの匂い 100 - GoTo

GOTO は 50 年前に有害と見なされていた

TL;DR: GoTo を使用しないでください。

問題

  • 可読性
  • コードをたどりにくい

ソリューション

  1. GOTOを構造化コードに置き換える
  2. 例外を使用する

環境

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 の使用を検討することです。


礼儀XKCD

関係

コードの匂い 12 - ヌル

より詳しい情報

クレジット

UnsplashJensJohnssonによる写真


BASIC に触れたことのある学生に良いプログラミングを教えることは事実上不可能です。

エドガー・ダイクストラ

ソフトウェアエンジニアリングの名言


100 マイルストーンを達成しました。


次の記事では、さらに5つのコードの匂いについて説明します!