paint-brush
コードの臭い那部分を見つける方式 [パート XXXII] に@mcsee
806 測定値
806 測定値

コードの臭い部分を見つける方法 [パート XXXII]

Maximiliano Contieri9m2023/03/08
Read on Terminal Reader

長すぎる; 読むには

においがするのは、編集または改善できる場合が多いためです。これらの臭いのほとんどは、何かが間違っている可能性があることを示しているだけです。したがって、それ自体を修正する必要はありません… (ただし、調べる必要があります。) 以前のコードのにおい以前のすべてのコードのにおい (パート i - XXXI) は、ここで見つけることができます。
featured image - コードの臭い部分を見つける方法 [パート XXXII]
Maximiliano Contieri HackerNoon profile picture
においがするのは、編集または改善效果できる場合が多いためです。


これらの臭いのほとんどは、何かが間違っている可能性があることを示しているだけです。したがって、それ自体を修正する必要はありません…(ただし、調べておく必要があります)。

前 コードの匂い

以前のすべてのコードの匂い (パート i ~ XXXI) は、ここで見つけることができます。


続けましょう...

Code Smell 156 - 暗黙の Else

プログラミング初日に if/else を学びます。それから私たちは他のことを忘れます。


TL;DR: はっきり言ってください。エルスでも。

問題

ソリューション

  1. 明示的なelseを書く

コンテクスト

早い段階で IF 文に戻ると、else 大部分を省略できます。


その後、 IF を削除し、ポリモーフィズムを使用します。


それは、実際のケースを見逃すときです。

サンプルコード

間違い

function carBrandImplicit(model) { if (model === 'A4') { return 'audi'; } return 'Mercedes-Benz'; }

function carBrandExplicit(model) { if (model === 'A4') { return 'audi'; } if (model === 'AMG') { return 'Mercedes-Benz'; } // Fail Fast throw new Exception('Model not found); }

検出

  • [×]自動


構文ツリーをチェックして讲解し、else の欠落を提示信息できます。


それらを書き換えて、没预兆変異テストを実行することもできます。

タグ

  • 条件文

結論

この種のにおいは、多くの公の議論と憎しみをもたらします。


私たちは意見を交換し、それぞれの長所と短所を評価しなければなりません。

関係

Code Smell 102 - アローコード

Code Smell 36 - Switch/case/else if/else/if ステートメント

より詳しい情報

フェイルファスト

煩わしい IF を永遠に取り除く方法

クレジット

のによる写真图片
ソフトウェア チームの最明显の問題は、他の全員が何をしているかを全員が確実に领悟できるようにすることです。


マーティン・ファウラー


Code Smell 157 - バランス0

今日、私は自分の財布に支払いがあると思っていました。残高が0でした。パニックになりました。


TL;DR: Null は 0 ではありません。Error は 0 ではありません。0 は 0 です。

問題

ソリューション

  1. ゼロとエラーを明確に区別してください。

コンテクスト

セキュリティの問題についてよく読みます。


特に口令について。


先週、について読みました。


財布に残高が0と觉得されたとき、私はパニックになりました。


それは単なるUXの匂いでした。


ブロックチェーンに到達できませんでした💩

サンプルコード

間違い

""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable show 0 as the balance """ import requests import json def get_balance(address): url = "//blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: return 0

""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable throw an error """ import requests import json def get_balance(address): url = "//blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")

検出

  • [×]マニュアル


これはデザインの匂いです。


例外またはリターン コードがスローされ、0 でマスクされるパターンを見つけることができます。

タグ

  • UX

結論

ガイドとして常にに従ってください。

関係

コードの匂い 12 - ヌル

Code Smell 139 - ユーザー インターフェイスのビジネス コード

Code Smell 73 - 予想されるケースの例外

Code Smell 72 - リターン コード

より詳しい情報

Null: 10 億ドルの間違い

クレジット

のによる写真照

免責事項

Code Smells は私の意見です。


Null に対する私の本当の批判は、プログラムをチェックせずに快速路に実行するか、チェックしてゆっくり実行するかを選択しなければならないという没这个必要要なすべての苦痛が再び戻ってくるということです。


トニー・ホーア(無発明家)


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


Code Smell 158 - 変数は変数ではない


変数に値を割り当てて使用しますが、変更することはありません。


TL;DR: 可変性について声明的であること。

問題

ソリューション

  1. 変更し、そのスコープを明確にします。

リファクタリング

リファクタリング 003 - 定数の抽出

コンテクスト

私たちは常にドメインから学んでいます。


MAPPERによって値が変化する可能性があると推測することがあります。


後で、それが変わらないことを学びます。


したがって、それを定数に昇格させる这个必要があります。


これにより、 Magic Constantsも回避されます。

サンプルコード

間違い

<?php function configureUser() { $password = '123456'; // Setting a password on a variable is another vulnerability // And Code Smell $user = new User($password); // Notice Variable doesn't change }

<?php define("USER_PASSWORD", '123456') function configureUser() { $user = new User(USER_PASSWORD); } // or function configureUser() { $user = new User(userPassword()); } function userPassword() : string { return '123456'; } // Case is an oversimplification as usual

検出

  • [×]自動


多くのリンターは、変数に割り当てが 1 つしかないかどうかをチェックします。


また、ミューテーション テストを実行し、変数を変更して、テストが壊れるかどうかを確認することもできます。

タグ

  • 可変性

結論

変数のスコープが明確になったら、自分自身に挑戦してリファクタリングする必要があり、そのプロパティと可変性についてさらに学びます。

関係

Code Smell 116 - 「var」で宣言された変数

Code Smell 127 - 可変定数

Code Smell 107 - 変数の再利用

Code Smell 02 - 定数とマジックナンバー

より詳しい情報

ミュータントの邪悪な力

免責事項

Code Smells は私の意見です。

クレジット

のによる写真图片
機能する複雑なシステムは、機能する単純なシステムから進化したものであることが常にわかっています。


ジョン・ガル


コードの匂い 159 - mixEd_casei

本格的な開発は、さまざまな人によって行われます。私たちは同意し始めなければなりません。


TL;DR: 異なる大照片文字类と小照片文字类の変換を混到させないでください

問題

  • 可読性
  • 保守性

ソリューション

  1. ケース規格を選ぶ


  2. 我慢して

コンテクスト

さまざまな人が一緒にソフトウェアを作为する場合、個人的または古文化的な違いがある机会性があります。 🐫 を好む人もいれば、 🐍、MACRO_CASE🗣️ などを 。


コードは簡単で読みやすいものにする不必要があります。

サンプルコード

間違い

{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2023-01-07T02:23:41.305Z", "created_at": "2020-01-07T02:23:41.305Z", "deleted at": "2023-01-07T02:23:41.305Z" }

{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2023-01-07T02:23:41.305Z", "createdAt": "2020-01-07T02:23:41.305Z", "deletedAt": "2023-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }

検出

  • [×]自動

リンターに会社の幅広い命名基準を伝え、それを強制することができます。


新しい人が組織に到着するたびに、自動化されたテストが丁寧にコードを変更するよう依頼する相应があります。

例外

私たちの範囲外のコードとやり取りする不有必要的があるときはいつでも、私たちの標準ではなく、クライアントの標準を运用する不有必要的があります。

タグ

  • ネーミング

結論

標準を扱うのは簡単です。


それらを強制する一定があります。

関係

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

より詳しい情報

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

免責事項

Code Smells は私の意見です。

クレジット

のによる写真图片
层次性なケースが多すぎる場合は、間違っています。


クレイグ・ゼロユニ


Code Smell 160 - 無効な ID = 9999

Maxint は、無効な ID に適した数値です。私たちは決してそれに到達しません。


TL;DR: 実際の ID と無効な ID を組み合わせないでください。実際: ID は避けてください。

問題


  • 思ったよりも早く無効な ID に到達する可能性があります。


  • 無効な ID にもnull を使用しないでください。


  • 呼び出し元から関数への結合フラグ。

ソリューション

  1. 唯一性なオブジェクトを运用して唯一性なケースをモデル化します。


  2. 9999、-1、および 0 は、有効なドメイン オブジェクトと実装結合であるため、避けてください。


  3. Null オブジェクトの導入

コンテクスト

コンピューティングの时期には、データ型は厳密でした。


その後、 10 億ドルの間違いを発明しました。


その後、私たちは成長し、多態的な特別な値を操作して特別なシナリオをモデル化しました。

サンプルコード

間違い

#include "stdio.h" #include "stdlib.h" #include "stdbool.h" #define INVALID_VALUE 999 int main(void) { int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id; } int get_value() { // something bad happened return INVALID_VALUE; } // returns EXIT_FAILURE (1)

#include "stdio.h" #include "stdlib.h" #include "stdbool.h" // No INVALID_VALUE defined int main(void) { int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id; } get_value() { // something bad happened return false; } // returns EXIT_FAILURE (1)

検出

  • [x]半自動


コード内の特別な定数と特別な値をチェックできます。

タグ

  • ヌル

結論

外边識別子に関連付けるために数字1を利用する必需があります。


外接識別子が会存在しない場合、それは数値ではありません。

関係

Code Smell 120 - シーケンシャル ID

コードの匂い 12 - ヌル

より詳しい情報

Null: 10 億ドルの間違い

Y2K22 - 私たちを当惑させる過ち

免責事項

Code Smells は私の意見です。

クレジット

のによる高清写真
虫は隅に潜み、思维境界に集まります。


ボリス・バイザー


さらに 5 つのコードの匂いが間もなく登場します…
바카라사이트 바카라사이트 온라인바카라