paint-brush
Làm thế nào để tìm những phần hôi thối trong mã của bạn [Phần XX]: Chúng tôi đã đạt được 100!từ tác giả@mcsee
1,409 lượt đọc
1,409 lượt đọc

Làm thế nào để tìm những phần hôi thối trong mã của bạn [Phần XX]: Chúng tôi đã đạt được 100!

từ tác giả Maximiliano Contieri1m2022/06/11
Read on Terminal Reader
Read this story w/o Javascript

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

Hiểu mùi mã với các ví dụ!

Company Mentioned

Mention Thumbnail
featured image - Làm thế nào để tìm những phần hôi thối trong mã của bạn [Phần XX]: Chúng tôi đã đạt được 100!
Maximiliano Contieri HackerNoon profile picture

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

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

  1. Xóa tiền tố của tôi .
  2. 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

  • [x] Tự động

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 của tôi . Đối tượng thay đổi theo ngữ cảnh sử dụng.

Thêm thông tin

Tín dụng

Ảnh của Michał Bożek trên 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

  1. Sử dụng thông báo lỗi khai báo
  2. 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

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

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 hình ảnh trên 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

  1. Kiểm tra chính tả mã của bạn.
  2. 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.

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 nhở 😀

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 Brett Jordan trên 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

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

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

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 Priscilla Du Preez trên 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

  1. Thay thế GOTO bằng mã có cấu trúc
  2. 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

  • [x] Tự động

Bằng các ngôn ngữ hỗ trợ GOTO , linters của chúng tôi có thể cảnh báo chúng tôi về việc sử dụng nó.

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 các ngôn ngữ hiện đại như GoLang, PHP, Perl, v.v.

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 việc sử dụng null có hại.


XKCD lịch sự

Quan hệ

Mã mùi 12 - Không có

Thêm thông tin

Tín dụng

Ảnh của Jens Johnsson trên 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é!