20 truyện với 5 mùi mã mỗi truyện là 100 mùi mã đúng không? Mã trước có mùi Phần I Phần II Phần III Phần IV Phần V Phần VI Phần VII Phần VIII Phần IX Phần X Phần XI Phần XII Phần XIII Phần XIV Phần XV Phần XVI Phần XVII Phần XVIII Phần XIX Tiếp tục đi... Code Smell 96 - Đồ vật của tôi Bạn không sở hữu đối tượng. TL; DR: không sử dụng tiền tố tên . của tôi Các vấn đề Thiếu ngữ cảnh Bijection Fault Các giải pháp Xóa tiền tố . của tôi Thay đổi tên gợi ý vai trò. Định nghĩa bài văn Một số hướng dẫn cũ sử dụng từ 'của tôi' làm tên lười biếng. Điều này là mơ hồ và dẫn đến sai lầm về ngữ cảnh. Mã mẫu Sai MainWindow myWindow = Application.Current.MainWindow as MainWindow; Đúng MainWindow salesWindow = Application.Current.MainWindow as MainWindow; /* Since window is instanciated, we are currently working with a specialized window playing a special role */ Phát hiện Tự động [x] Chúng tôi có thể yêu cầu các linters và bộ kiểm tra tĩnh của chúng tôi tìm kiếm tiền tố này và cảnh báo chúng tôi. Thẻ Đặt tên Sự kết luận Tránh sử dụng . Đối tượng thay đổi theo ngữ cảnh sử dụng. của tôi Thêm thông tin Tên chính xác là gì - Phần II Phục hồi chức năng Tín dụng Ảnh của trên Michał Bożek Unsplash Suy nghĩ về kinh nghiệm sửa đổi mã của mình, tôi thấy rằng tôi dành nhiều thời gian hơn để đọc mã hiện có hơn là viết mã mới. Vì vậy, nếu tôi muốn làm cho mã của mình rẻ, tôi nên làm cho nó dễ đọc. Kent Beck Trích dẫn tuyệt vời về kỹ thuật phần mềm Code Smell 97 - Thông báo lỗi không có sự đồng cảm Chúng ta nên đặc biệt chú ý đến các mô tả lỗi cho người dùng (và chính chúng ta). TL; DR: Sử dụng các mô tả có ý nghĩa và đề xuất các hành động khắc phục. Các vấn đề Nguyên tắc ít bất ngờ nhất Các giải pháp Sử dụng thông báo lỗi khai báo Hiển thị các hành động thoát rõ ràng Định nghĩa bài văn Các lập trình viên hiếm khi là chuyên gia về UX. Chúng tôi cũng đánh giá thấp thực tế là chúng tôi có thể ở cả hai phía của quầy. Mã mẫu Sai alert("Cancel the appointment?", "Yes", "No"); // No consequences // Options not clear Đúng alert("Cancel the appointment? \n" + "You will lose all the history", "Cancel Appointment", "Keep Editing"); // Consequences are clear // Choice options have context Phát hiện Hướng dẫn sử dụng [x] Chúng tôi cần đọc tất cả các thông báo ngoại lệ trong các bài đánh giá mã. Thẻ Ngoại lệ UX Sự kết luận Chúng tôi cần suy nghĩ ở người dùng cuối khi nêu ra ngoại lệ hoặc hiển thị thông báo. Tín dụng Ảnh bằng trên hình ảnh Unsplash Mặc dù có một thực tế là các lập trình viên không bao giờ mắc lỗi, nhưng vẫn nên làm hài lòng người dùng bằng cách kiểm tra các lỗi ở những điểm quan trọng trong chương trình của bạn. Robert D. Schneider Code Smell 98 - Sai lầm khi đánh vần Chính tả và khả năng đọc là rất quan trọng đối với con người và không quan trọng đối với máy móc. TL; DR: Hãy quan tâm đến tên của bạn. Các vấn đề Khả năng đọc Khó tìm kiếm các thuật ngữ trong mã. Các giải pháp Kiểm tra chính tả mã của bạn. Sử dụng IDE với tính năng kiểm tra chính tả Định nghĩa bài văn Nhiều người trong chúng ta không nói tiếng Anh như ngôn ngữ mẹ đẻ của mình. Chúng ta cần phải cẩn thận hơn đối với văn bản và tên của chúng ta. nhở 😀 Bài viết này có lỗi đánh máy trong tiêu đề như bằng chứng về ngữ cảnh và cũng là một lời nhắc Mã mẫu Sai comboFeededBySupplyer = supplyer.providers(); Đúng comboFedBySupplier = supplier.providers(); Phát hiện Thẻ Khả năng đọc Đặt tên Tạo kiểu mã Sự kết luận Hãy chú ý đến tên của bạn. Bạn có thể sẽ là người đọc mã trong vài tháng nữa. Quan hệ Mã mùi 48 - Mã không có tiêu chuẩn Thêm thông tin Tên chính xác là gì - Phần I Nhiệm vụ Tên chính xác là gì - Phần II Phục hồi chức năng Tín dụng Ảnh của trên Brett Jordan Unsplash Bên trong mỗi chương trình lớn được viết tốt là một chương trình nhỏ được viết tốt. Căm xe Mã mùi 99 - Giây đầu tiên Có bao nhiêu lần chúng ta thấy những tên đối số lười biếng? TL; DR: Đặt tên cho các đối số của bạn theo vai trò chứ không phải vị trí ngẫu nhiên Các vấn đề Khả năng đọc Ý định tiết lộ tên Các giải pháp Sử dụng những cái tên có ý nghĩa Định nghĩa bài văn Khi viết các phương pháp, chúng ta thường không dừng lại để tìm những cái tên phù hợp. Chúng tôi không bao giờ tái cấu trúc những điều hiển nhiên. Mã mẫu Sai class Calculator: def subtract(self, first, second): return first - second class CalculatorTest def test_multiply(): assert equals(first, second) Đúng class Calculator: def subtract(self, minuend, subtrahend): return minuend - subtrahend class CalculatorTest def test_multiply(): assert equals(expectedValue, realValue) Phát hiện Hướng dẫn sử dụng [x] Chúng tôi có thể cảnh báo những từ bị cấm như 'đầu tiên' và 'thứ hai' làm tên đối số. Thẻ Khả năng đọc Sự kết luận Luôn tuân theo tham số đề xuất quy tắc. Đặt tên cho các cộng tác viên của bạn theo vai trò. Quan hệ Mã mùi 65 - Các biến được đặt tên theo loại Thêm thông tin Tên chính xác là gì - Phần II Phục hồi chức năng Tín dụng Ảnh của trên Priscilla Du Preez Unsplash Mã nguồn cuối cùng là thiết kế phần mềm thực. Jack Reeves Code Smell 100 - GoTo GOTO bị coi là có hại cách đây 50 năm TL; DR: Đừng bao giờ sử dụng GoTo. Các vấn đề Khả năng đọc Khó làm theo mã Các giải pháp Thay thế bằng mã có cấu trúc GOTO Sử dụng các ngoại lệ Định nghĩa bài văn Tôi bắt đầu lập trình bằng Basic. GOTO đã bị lạm dụng rất nhiều ở đó. Tôi đã phải học lập trình có cấu trúc từ đầu trong chế độ Phục hồi. Mã mẫu Sai for x < 0 { if x > -1e-09 { goto small } z = z / x x = x + 1 } for x < 2 { if x < 1e-09 { goto small } z = z / x x = x + 1 } if x == 2 { return z } x = x - 2 p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6] q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7] return z * p / q small: if x == 0 { return Inf(1) } return z / ((1 + Euler*x) * x) } Đúng for x < 0 { if x > -1e-09 { return small(x, z) } z = z / x x = x + 1 } for x < 2 { if x < 1e-09 { return small(x, z) } z = z / x x = x + 1 } if x == 2 { return z } x = x - 2 p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6] q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7] return z * p / q small(x, z) { if x == 0 { return Inf(1) } return z / ((1 + Euler*x) * x) } } Phát hiện Tự động [x] Bằng các ngôn ngữ hỗ trợ , linters của chúng tôi có thể cảnh báo chúng tôi về việc sử dụng nó. GOTO Thẻ Khả năng đọc Sự kết luận Chúng tôi đã thừa nhận các vấn đề của GOTO cách đây vài thập kỷ. Vấn đề vẫn tồn tại trong như GoLang, PHP, Perl, v.v. các ngôn ngữ hiện đại Hầu hết các lập trình viên may mắn tránh được câu GOTO. Mục tiêu tiếp theo sẽ là xem xét có hại. việc sử dụng null lịch sự XKCD Quan hệ Mã mùi 12 - Không có Thêm thông tin Tuyên bố Goto được coi là có hại Wikipedia Tín dụng Ảnh của trên Jens Johnsson Unsplash Thực tế là không thể dạy lập trình tốt cho những sinh viên đã từng tiếp xúc với BASIC: với tư cách là những lập trình viên tiềm năng, họ bị cắt xẻo tinh thần không còn hy vọng tái sinh. Edsger Dijkstra Trích dẫn tuyệt vời về kỹ thuật phần mềm Và đó là tất cả hiện tại, Chúng tôi đã đạt được cột mốc 100. Bài sau mình sẽ giải thích thêm về 5 mùi mã nhé!