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 - XXXIII) tại đây .
Tiếp tục đi...
Mã mùi 166 - Lỗi cấp thấp trên giao diện người dùng
Lỗi nghiêm trọng: Lỗi chưa phát hiện: Không tìm thấy lớp 'logs_queries_web' trong /var/www/html/query-line.php:78
Dấu vết ngăn xếp: #0 {main} được ném vào /var/www/html/query-line.php trên dòng 718
TL;DR: Bắt lỗi của bạn. Ngay cả những người bạn không mong đợi.
Các vấn đề
- Bảo vệ
- Xử lý lỗi
- Ghi nhật ký lỗi
- Trải nghiệm UX tồi
Các giải pháp
Sử dụng trình xử lý cấp cao nhất.
Tránh các ngôn ngữ có lợi cho mã trả về .
Mong đợi cơ sở dữ liệu và lỗi cấp thấp.
Bối cảnh
Ngay cả trong năm 2022, chúng ta vẫn có thể thấy các trang web "nghiêm túc" hiển thị cho người dùng thông thường một ngăn xếp hoặc thông báo gỡ lỗi.
Mã mẫu
Sai
<? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9
Phải
<? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");
phát hiện
- [x] Tự động
Chúng ta có thể sử dụng thử nghiệm đột biến để mô phỏng các vấn đề và xem liệu chúng có được xử lý chính xác hay không.
thẻ
- Bảo vệ
Phần kết luận
Chúng ta cần tiếp tục trưởng thành.
Các giải pháp của chúng ta không nên cẩu thả.
Chúng ta cần cải thiện danh tiếng của mình với tư cách là những kỹ sư phần mềm nghiêm túc.
quan hệ
Thêm thông tin
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 jesse orrico trên Bapt
80 phần trăm các vấn đề của tôi là lỗi logic đơn giản. 80% vấn đề còn lại là lỗi con trỏ. Các bài toán còn lại khó.
Đánh dấu Donner
Báo giá tuyệt vời về kỹ thuật phần mềm
Mã Mùi 167 - Băm So Sánh
Băm đảm bảo hai đối tượng khác nhau. Không phải là họ giống nhau.
TL; DR: Nếu bạn kiểm tra hàm băm, bạn cũng nên kiểm tra sự bằng nhau
Các vấn đề
Các giải pháp
- Kiểm tra hàm băm (nhanh), sau đó kiểm tra Đẳng thức (chậm)
Bối cảnh
Vào ngày 7 tháng 10 năm 2022, một trong những chuỗi khối lớn hơn đã phải tạm dừng.
Tin tức này gây sốc vì hầu hết các chuỗi khối được định nghĩa là phi tập trung.
Bạn có thể đọc một bài viết đầy đủ ở đây:
Hacker đã đánh cắp 566 triệu USD bằng cách khai thác mùi mã như thế nào
Mã mẫu
Sai
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }
Phải
public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }
phát hiện
- [x] Bán tự động
Nhiều kẻ nói dối có các quy tắc để xác định lại hàm băm và đẳng thức.
Với thử nghiệm đột biến, chúng ta có thể gieo các đối tượng khác nhau bằng cùng một hàm băm và kiểm tra các thử nghiệm của mình.
- Danh tính
- Bảo vệ
Phần kết luận
Mỗi cải tiến hiệu suất có nhược điểm của nó.
Bộ nhớ cache và bản sao là những ví dụ đáng chú ý.
Chúng ta có thể (phải) sử dụng chúng một cách cẩn thận.
quan hệ
Mã Mùi 150 - So Sánh ngang tài ngang sức
Thêm thông tin
từ chối trách nhiệm
Mùi mã chỉ là ý kiến của tôi.
Điều này sẽ khiến một số độc giả của bạn ngạc nhiên, nhưng mối quan tâm chính của tôi không phải là bảo mật máy tính. Tôi chủ yếu quan tâm đến việc viết phần mềm hoạt động như dự định.
Wietse Venema
Báo giá tuyệt vời về kỹ thuật phần mềm
Mã Mùi 168 - Quyết định không có giấy tờ
Chúng ta cần thực hiện một số thay đổi. Chúng ta cần phải rõ ràng về lý do tại sao
TL; DR: Hãy tuyên bố về các quyết định thiết kế hoặc triển khai của bạn.
Các vấn đề
- Nhận xét mã
- Thiếu khả năng kiểm tra
Các giải pháp
- Hãy rõ ràng về những lý do.
- Chuyển đổi nhận xét thành một phương thức.
Bối cảnh
Đôi khi chúng tôi thấy các quy tắc tùy ý không dễ kiểm tra.
Nếu chúng ta không thể viết một bài kiểm tra thất bại, chúng ta cần phải có một chức năng với một tên khai báo và xuất sắc thay vì một bình luận.
Mã mẫu
Sai
// We need to run this process with more memory set_memory("512k) run_process();
Phải
increase_memory_to_avoid_false_positives(); run_process();
phát hiện
- [x] Bán tự động
Đây là một mùi ngữ nghĩa.
Chúng tôi có thể phát hiện các bình luận và cảnh báo chúng tôi.
Thẻ
- Bình luận
Phần kết luận
Mã là văn xuôi. Và các quyết định thiết kế nên được tường thuật.
quan hệ
Mã Mùi 05 - Kẻ Lạm Dụng Bình Luận
Mã Mùi 75 - Comments Inside a Method
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 Goh Rhy Yan trên Bapt
Các chương trình, giống như mọi người, già đi. Chúng ta không thể ngăn ngừa lão hóa, nhưng chúng ta có thể hiểu nguyên nhân của nó, hạn chế tác động của nó và đảo ngược một số thiệt hại.
Mario Fusco
Báo giá tuyệt vời về kỹ thuật phần mềm
Mã Mùi 169 - Phương Pháp Dán
Đừng làm hai hoặc nhiều thứ cùng một lúc.
TL; DR: Cố gắng trở nên nguyên tử nhất có thể trong các phương pháp của bạn
Các vấn đề
- Mã kết hợp
- Khó kiểm tra hơn
- Khó đọc hơn
Các giải pháp
- Phá vỡ phương pháp
tái cấu trúc
https://maximilianocontieri.com/refactoring-002-extract-method
Bối cảnh
Nếu bạn đặt tên một phương thức bằng 'And', có thể bạn đang bỏ lỡ cơ hội trích xuất và ngắt phương pháp.
Mã mẫu
Sai
calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities
Phải
calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them
phát hiện
- [x] Bán tự động
Một số kẻ nói dối có thể cảnh báo chúng ta về các phương pháp bao gồm thuật ngữ 'và'.
Thẻ
- khớp nối
Phần kết luận
Khi thực hiện các phương pháp, điều rất quan trọng là chơi một số câu chuyện về chú vịt cao su và tự nhủ liệu chúng ta có đang làm đúng hay không.
quan hệ
%[ https://maximilianocontieri.com/code-smell-85-and-functions ]
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 Scott Sanker trên Bapt
Học nghệ thuật lập trình, giống như hầu hết các môn học khác, đầu tiên bao gồm việc học các quy tắc và sau đó học khi nào nên phá vỡ chúng.
Joshua Bloch
Code Mùi 170 - Tái Cấu Trúc Với Thay Đổi Về Chức Năng
Phát triển là tuyệt vời. tái cấu trúc là tuyệt vời. Đừng làm điều đó cùng một lúc
TL;DR: Đừng thay đổi chức năng và tái cấu trúc cùng một lúc.
Các vấn đề
- Khó xem xét các giải pháp
- hợp nhất xung đột
Các giải pháp
- Không bao giờ thay đổi chức năng trong khi tái cấu trúc
Bối cảnh
Đôi khi chúng tôi phát hiện việc tái cấu trúc là cần thiết để phát triển thêm.
Chúng tôi là những chuyên gia về học tập.
Chúng ta nên tạm dừng giải pháp của mình. Làm việc trên việc tái cấu trúc và tiếp tục với giải pháp của chúng tôi.
Mã mẫu
Sai
getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code
Phải
getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename
phát hiện
Đây là một mùi tái cấu trúc.
- [x] Hướng dẫn sử dụng
thẻ
- tái cấu trúc
Phần kết luận
Chúng ta nên sử dụng mã thông báo vật lý.
Hoặc chúng ta đang ở giai đoạn tái cấu trúc hoặc giai đoạn đang phát triể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 Dannie Jing trên Bapt
Khi tôi học viết mã, việc tái cấu trúc đưa tôi đến những mức độ hiểu biết cao hơn mà nếu không thì tôi sẽ bỏ lỡ. Những người coi việc tái cấu trúc khả năng hiểu là vô ích khi loay hoay với mã không nhận ra rằng họ không bao giờ nhìn thấy những cơ hội ẩn sau sự nhầm lẫn.
Martin Fowler
5 mùi mã khác sắp ra mắt…