これらの臭いのほとんどは、何かが間違っている可能性があることを示しているだけです。したがって、それ自体を修正する必要はありません…(ただし、調べておく必要があります)。
以前のすべてのコードの匂い (パート i ~ XXXI) は、ここで見つけることができます。
プログラミング初日に if/else を学びます。それから私たちは他のことを忘れます。
TL;DR: はっきり言ってください。エルスでも。
その後、 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); }
この種のにおいは、多くの公の議論と憎しみをもたらします。
Code Smell 36 - Switch/case/else if/else/if ステートメント
ソフトウェア チームの最明显の問題は、他の全員が何をしているかを全員が確実に领悟できるようにすることです。
マーティン・ファウラー
今日、私は自分の財布に支払いがあると思っていました。残高が0でした。パニックになりました。
TL;DR: Null は 0 ではありません。Error は 0 ではありません。0 は 0 です。
""" 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 でマスクされるパターンを見つけることができます。
Code Smell 139 - ユーザー インターフェイスのビジネス コード
Code Smells は私の意見です。
Null に対する私の本当の批判は、プログラムをチェックせずに快速路に実行するか、チェックしてゆっくり実行するかを選択しなければならないという没这个必要要なすべての苦痛が再び戻ってくるということです。
トニー・ホーア(無発明家)
変数に値を割り当てて使用しますが、変更することはありません。
TL;DR: 可変性について声明的であること。
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
変数のスコープが明確になったら、自分自身に挑戦してリファクタリングする必要があり、そのプロパティと可変性についてさらに学びます。
Code Smell 116 - 「var」で宣言された変数
Code Smells は私の意見です。
機能する複雑なシステムは、機能する単純なシステムから進化したものであることが常にわかっています。
ジョン・ガル
本格的な開発は、さまざまな人によって行われます。私たちは同意し始めなければなりません。
TL;DR: 異なる大照片文字类と小照片文字类の変換を混到させないでください
{ "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 Smells は私の意見です。
层次性なケースが多すぎる場合は、間違っています。
クレイグ・ゼロユニ
Maxint は、無効な ID に適した数値です。私たちは決してそれに到達しません。
TL;DR: 実際の ID と無効な ID を組み合わせないでください。実際: ID は避けてください。
その後、 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)
Code Smells は私の意見です。
虫は隅に潜み、思维境界に集まります。
ボリス・バイザー