paint-brush
Cách tìm những phần hôi thối trong mật mã của bạn [Phần XXXII]từ tác giả@mcsee
806 lượt đọc
806 lượt đọc

Cách tìm những phần hôi thối trong mật mã của bạn [Phần XXXII]

từ tác giả Maximiliano Contieri9m2023/03/08
Read on Terminal Reader

dài quá đọc không nổi

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 đó, chúng không bắt buộc phải sửa… (Tuy nhiên, bạn nên xem xét nó.) Mùi mã trước đó 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.
featured image - Cách tìm những phần hôi thối trong mật mã của bạn [Phần XXXII]
Maximiliano Contieri HackerNoon profile picture

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ó.)

Mã Trước Mùi

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...


Mật Mã Mùi 156 - Ngầm Khác

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.

Các vấn đề

Các giải pháp

  1. Viết rõ ràng khác

Bối cảnh

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ế.

Mã mẫu

Sai

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

Phải

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

phát hiện

  • [x] Tự động


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.

thẻ

  • điều kiện

Phần kết luậ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.

quan hệ

Mã Mùi 102 - Mũi Tên Mã

Mã Mùi 36 - Câu lệnh switch/case/else if/else/if

Thêm thông tin

Ngừng sử dụng ngầm định khác

Khi nào nên sử dụng ẩn ý khác

thất bại nhanh chóng

Làm thế nào để thoát khỏi IF khó chịu mãi mãi

Tín dụng

Ả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


Mã Mùi 157 - Số Dư Ở Con Số 0

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.

Các vấn đề

  • Null
  • trải nghiệm người dùng
  • khả năng sử dụng

Các giải pháp

  1. Phân biệt rõ ràng giữa Zero và Error.

Bối cảnh

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 💩

Mã mẫu

Sai

 """ 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

Phải

 """ 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")

phát hiện

  • [x] Hướng dẫn sử dụng


Đâ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.

Thẻ

  • trải nghiệm người dùng

Phần kết luận

Luôn tuân theo nguyên tắc Ít ngạc nhiên nhất như một hướng dẫn.

quan hệ

Mã Mùi 12 - Null

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ệ

Mã Mùi 72 - Trả Lại Mã

Thêm thông tin

Null: Sai lầm hàng tỷ đô la

Tín dụng

Ảnh của Jasmin Sessler trên Bapt

từ chối trách nhiệm

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


Mã Mùi 158 - Biến Không Biến


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.

Các vấn đề

  • khả năng đọc
  • Tôn vinh khả năng biến đổi Bijection .
  • Các vấn đề về hiệu suất và bộ nhớ tiềm ẩn.

Các giải pháp

  1. Thay đổi biến thành một hằng số và làm rõ phạm vi của nó.

tái cấu trúc

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ố

Bối cảnh

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 .

Mã mẫu

Sai

 <?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 }

Phải

 <?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

phát hiện

  • [x] Tự động


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.

thẻ

  • khả năng biến đổi

Phần kết luận

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ó.

quan hệ

Mã Mùi 116 - Các Biến Được Khai Báo Với 'var'

Mã Mùi 127 - Hằng Số Thay Đổi

Mã Mùi 107 - Biến Tái Sử Dụng

Mã Mùi 02 - Hằng Số Và Những Con Số Kỳ Diệu

Thêm thông tin

Sức mạnh tà ác của dị nhân

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ả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


Code SmEL 159 - mIxEd_cASeI

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

Các vấn đề

  • khả năng đọc
  • khả năng bảo trì

Các giải pháp

  1. Chọn trường hợp tiêu chuẩn


  2. Giữ lấy nó

Bối cảnh

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.

Mã mẫu

Sai

 { "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" }

Phải

 { "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 }

phát hiện

  • [x] Tự động

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ã.

ngoại lệ

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.

Thẻ

  • đặt tên

Phần kết luận

Đố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.

quan hệ

Mã Mùi 48 - Mã Không Chuẩn

Thêm thông tin

Tên chính xác là gì - Phần I Nhiệm vụ

Tất cả các quy ước đặt tên

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ả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


Mã Mùi 160 - Id không hợp lệ = 9999

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.

Các vấn đề


  • Bạn có thể nhận được ID không hợp lệ sớm hơn bạn nghĩ.


  • Không sử dụng null cho ID không hợp lệ.


  • Ghép cờ từ người gọi đến chức năng.

Các giải pháp

  1. Mô hình các trường hợp đặc biệt với các đối tượng đặc biệt.


  2. 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.


  3. Giới thiệu đối tượng Null

Bối cảnh

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.

Mã mẫu

Sai

 #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)

Phải

 #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)

phát hiện

  • [x] Bán tự động


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ã.

Thẻ

  • Vô giá trị

Phần kết luận

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ố.

quan hệ

Mã Mùi 120 - ID tuần tự

Mã Mùi 12 - Null

Thêm thông tin

Null: Sai lầm hàng tỷ đô la

Y2K22 - Sai Lầm Làm Chúng Ta Xấu hổ

từ chối trách nhiệm

Mùi mã chỉ là ý kiến của tôi.

Tín dụng

Ả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…