Nó có mùi vì có thể có nhiều trường hợp nó có thể được chỉnh sửa hoặc cải thiện.
Hầu hết những mùi này chỉ là gợi ý về điều gì đó có thể không ổn. Do đó, bản thân chúng không bắt buộc phải sửa… (Tuy nhiên, bạn nên xem xét nó.)
Bạn có thể tìm thấy tất cả các mùi mã trước đó (Phần i - XXXI) tại đây .
Tiếp tục đi...
Chúng tôi học nếu/khác vào ngày lập trình đầu tiên của chúng tôi. Sau đó, chúng tôi quên đi những người khác.
TL; DR: Hãy rõ ràng. Ngay cả với Khác.
Nếu chúng ta quay lại câu IF sớm, chúng ta có thể bỏ qua phần khác.
Sau đó, chúng tôi loại bỏ IF và sử dụng tính đa hình.
Đó là khi chúng ta bỏ lỡ các trường hợp thực tế.
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); }
Chúng ta có thể kiểm tra các cây cú pháp và phân tích chúng và cảnh báo nếu thiếu other.
Chúng tôi cũng có thể viết lại chúng và thực hiện kiểm tra đột biến.
Loại mùi này gây ra rất nhiều tranh cãi và ghét bỏ của công chúng.
Chúng ta phải trao đổi ý kiến và đánh giá từng ưu và nhược điểm.
Mã Mùi 36 - Câu lệnh switch/case/else if/else/if
Làm thế nào để thoát khỏi IF khó chịu mãi mãi
Ảnh của Elena Mozhvilo trên Bapt
Vấn đề lớn nhất đối với các nhóm phần mềm là đảm bảo mọi người hiểu những gì người khác đang làm.
Martin Fowler
Hôm nay, tôi mong đợi một khoản thanh toán trong ví của mình. Số dư là 0. Tôi hoảng sợ.
TL; DR: Null không phải là 0. Lỗi không phải là 0. chỉ 0 là 0.
Tôi đã đọc rất nhiều về các vấn đề bảo mật.
Đặc biệt là về tiền điện tử.
Tuần trước, tôi đã đọc về một chủ đề hack tiền điện tử .
Khi ví của tôi hiển thị số dư là 0, tôi đã hoảng sợ.
Đó chỉ là một mùi UX.
Không thể truy cập chuỗi khối 💩
""" 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 = "https://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 = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")
Đây là một mùi thiết kế.
Chúng tôi có thể tìm thấy các mẫu khi một ngoại lệ hoặc mã trả về được đưa ra và che dấu bằng 0.
Luôn tuân theo nguyên tắc Ít ngạc nhiên nhất như một hướng dẫn.
Mã Mùi 139 - Mã Doanh Nghiệp Trong Giao Diện Người Dùng
Mã Mùi 73 - Những Trường Hợp Ngoại Lệ
Ảnh của Jasmin Sessler trên Bapt
Mùi mã chỉ là ý kiến của tôi.
Lời chỉ trích thực sự của tôi với Null là nó mang lại tất cả sự đau đớn một cách không cần thiết khi phải chọn chạy chương trình của bạn nhanh mà không kiểm tra hay chạy chương trình chậm khi kiểm tra.
Tony Hoare (Nhà phát minh Null)
Báo giá tuyệt vời về kỹ thuật phần mềm
Bạn gán một giá trị cho một biến và sử dụng nó nhưng không bao giờ thay đổi nó.
TL; DR: Hãy tuyên bố về tính đột biến.
Tái cấu trúc 003 - Trích xuất hằng số
Tái cấu trúc 008 - Chuyển đổi biến thành hằng số
Chúng tôi luôn học hỏi từ miền.
Đôi khi chúng tôi đoán rằng một giá trị có thể thay đổi với MAPPER .
Sau này, chúng ta biết rằng nó sẽ không thay đổi.
Do đó, chúng ta cần phải thúc đẩy nó thành một hằng số.
Điều này cũng sẽ tránh được 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
Nhiều kẻ nói dối kiểm tra xem biến có chỉ một phép gán hay không.
Chúng tôi cũng có thể thực hiện kiểm tra đột biến và thử sửa đổi biến để xem thử nghiệm có bị hỏng không.
Chúng ta phải thử thách bản thân và cấu trúc lại khi phạm vi biến rõ ràng và chúng ta tìm hiểu thêm về các thuộc tính và khả năng thay đổi của nó.
Mã Mùi 116 - Các Biến Được Khai Báo Với 'var'
Mã Mùi 02 - Hằng Số Và Những Con Số Kỳ Diệu
Mùi mã chỉ là ý kiến của tôi.
Ảnh của Noah Buscher trên Bapt
Một hệ thống phức tạp hoạt động được luôn luôn phát triển từ một hệ thống đơn giản hoạt động.
John Gall
Sự phát triển nghiêm túc được thực hiện bởi nhiều người khác nhau. Chúng ta phải bắt đầu đồng ý.
TL; DR: Không trộn lẫn các chuyển đổi trường hợp khác nhau
Chọn trường hợp tiêu chuẩn
Giữ lấy nó
Khi những người khác nhau làm phần mềm cùng nhau, họ có thể có những khác biệt về cá nhân hoặc văn hóa.
Một số thích camelCase 🐫, những người khác thích Snake_case 🐍, MACRO_CASE🗣️ và nhiều loại khác .
Mã phải đơn giản và dễ đọc.
{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2022-01-07T02:23:41.305Z", "created_at": "2019-01-07T02:23:41.305Z", "deleted at": "2022-01-07T02:23:41.305Z" }
{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2022-01-07T02:23:41.305Z", "createdAt": "2019-01-07T02:23:41.305Z", "deletedAt": "2022-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }
Chúng tôi có thể nói với những người nói dối của mình về các tiêu chuẩn đặt tên rộng rãi của công ty chúng tôi và thực thi chúng.
Bất cứ khi nào có người mới đến tổ chức, kiểm thử tự động nên lịch sự yêu cầu anh ấy/cô ấy/.. thay đổi mã.
Bất cứ khi nào chúng ta cần tương tác với mã nằm ngoài phạm vi của mình, chúng ta nên sử dụng các tiêu chuẩn của khách hàng, không phải của chúng ta.
Đối phó với các tiêu chuẩn là dễ dàng.
Chúng ta cần phải thực thi chúng.
Tên chính xác là gì - Phần I Nhiệm vụ
Mùi mã chỉ là ý kiến của tôi.
Ảnh của Wolfgang Hasselmann trên Bapt
Nếu bạn có quá nhiều trường hợp đặc biệt, bạn đang làm sai.
Craig Zerouni
Maxint là một số rất tốt cho một ID không hợp lệ. Chúng tôi sẽ không bao giờ đạt được nó.
TL; DR: Đừng ghép ID thực với ID không hợp lệ. Trên thực tế: Tránh ID.
Mô hình các trường hợp đặc biệt với các đối tượng đặc biệt.
Tránh 9999, -1 và 0 vì chúng là các đối tượng miền hợp lệ và khớp nối triển khai.
Giới thiệu đối tượng Null
Trong những ngày đầu của máy tính, các kiểu dữ liệu rất nghiêm ngặt.
Sau đó, chúng tôi đã phát minh ra Sai lầm tỷ đô .
Sau đó, chúng tôi lớn lên và lập mô hình các kịch bản đặc biệt với các giá trị đặc biệt đa hình.
#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)
Chúng tôi có thể kiểm tra các hằng số đặc biệt và các giá trị đặc biệt trong mã.
Chúng ta nên sử dụng các con số để liên hệ với các định danh bên ngoài.
Nếu không có số nhận dạng bên ngoài nào tồn tại, thì đó không phải là số.
Y2K22 - Sai Lầm Làm Chúng Ta Xấu hổ
Mùi mã chỉ là ý kiến của tôi.
Ảnh của Markus Spiske trên Bapt
Lỗi ẩn nấp trong các góc và tụ tập tại các ranh giới.
Boris Béizer
5 mùi mã khác sắp ra mắt…