1. Trang chủ
  2. » Tất cả

Clean Code

23 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

I Three Principles For Clean Code Right Tool to For Job Boundaries Matter Ranh giới tương tác những công nghệ khiến người gặp rắc rối Ví dụ đưa css hay js viết file html, nhiên việc khiến chúng tái sử dụng Mọi công nghệ có giới hạn có mục đích sử dụng riêng Bí để chọn cơng cụ việc xem xét công nghệ bạn biết rõ trở thành “EVIL” Lựa chọn công nghệ phù hợp chọn cơng nghệ bạn quen thuộc,ưa thích Signal to Noise Ratio Signal Signal logic tuân theo nguyên tắc TED: + Terse: Ngắn gọn + Expressive: Biểu cảm, thể rõ ràng mà mà mã cố gắng làm + Do one thing: Nó phải có trách nhiệm rõ ràng DRY Principle: Don’t Repeat Yourself Vấn đề việc lặp lại: + Giảm signal tăng noise + Tăng số lượng dòng code + Tạo vấn đề bảo trì: Khi lỗi sửa chỗ tồn chỗ khác Self-Documenting Code Khi bạn đọc lại đoạn code cũ, bạn không cần phải xem kỹ comment hay phải chạy thử để biết ý nghĩa đoạn code Self-Documenting code thân mã lời giải thích cho mà mã bạn làm II Naming Naming Matter Tên có khắp nơi phần mềm Chúng ta đặt tên cho biến, hàm, đối số, lớp gói Chúng ta đặt tên cho tệp nguồn thư mục chứa chúng Bởi làm nhiều điều đó, nên làm tốt Việc lựa chọn tên biến có ảnh hưởng lớn đến khả đọc mã Lưu ý ví dụ tính đơn giản mã khơng thay đổi Nó có số tốn tử số, với số cấp độ lồng Nhưng mã trở nên rõ ràng nhiều Naming Class - Quy tắc đặt tên: + Tên lớp phải danh từ động từ + Tên phải cụ thể để lớp phạm vị nhỏ dễ gắn kết + Có trách nhiệm nhất, lớp ProductRespository truy vấn sở liệu khơng nên gửi email + Tránh hậu tố chung chung Method Name Tên phương thức phải cụm động từ động từ postPayment, deletePage save Naming warning sign Khi sử dụng từ And, If, Or Nó cho thấy bạn cố gắng thực nhiều điều Một phương thức nên chịu trách nhiệm cho hành động Nếu phương pháp bạn thực hai ba việc khác lúc bạn nên cân nhắc việc tách chức phương thức thành phương thức khác Ví dụ: bạn có phương thức saveUserAndChargeCard() để lưu người dùng vào sở liệu tính phí thẻ tín dụng Phương thức chắn khơng tốt, chứa ‘And’ tên thực hai hành động Tránh sử dụng từ ‘và’, ‘hoặc’, v.v tên phương thức Bạn nên chia hàm thành saveUser() chargeCard() 4 Silde Effect Chức bạn hứa hẹn làm điều, làm điều ẩn khác Đơi thực thay đổi bất ngờ biến lớp Slide effect gọi đến Session.initialize(), tất nhiên Chức checkPassword, theo tên nó, nói kiểm tra mật Tên khơng ngụ ý khởi tạo phiên Vì vậy, người gọi tin chức khơng có nguy xóa liệu phiên có người định kiểm tra tính hợp lệ người dùng Abbreviations Đây năm 80, ngày dung lượng lưu trữ lớn IDE mạnh Các từ viết tắt khiến mã trở nên khó hiểu Vì đừng ngần ngại đưa vào tên đầy đủ 6 Boolean Biến boolean nên nghe câu hỏi sai Symmetry Đôi đối mặt với mặt đối lập mã Và điều quan trọng chọn tên biến đối lập, chúng phải rõ ràng III Conditional Boolean Comparisons Việc so sánh rõ ràng biến boolean với true, false hồn tồn khơng cần thiết Boolean Assignments Boolean nên gán ngầm Bây giờ, trái thấy Boolean gán giá trị cách rõ ràng hay sai Điều khơng cần thiết bạn thấy phiên có số lợi rõ ràng để kiểu phân công ngầm bên phải dễ hiểu giảm số dịng code Positive Conditionals Việc viết điều kiện phủ định làm tăng việc phải suy nghĩ giảm khả đọc Ternary Elegance Tốn tử ba ngơi cung cấp cú pháp lịch ngắn gọn, giảm thiểu số dòng code Stringly Typed Tránh sử dụng kiểu Stringly Typed, thay vào sử dụng enum Việc sử dụng String Typed tiềm ẩn vấn đề gặp phải lỗi đánh máy - Sử dụng enum mang tới lợi ích: + Giảm thiểu việc gõ IDE gợi ý + Dễ hiểu + Tìm kiếm dễ dàng Magic Numbers Những số khơng truyền đạt ý nghĩa có hay ý định người viết nên đặt số biết ý nghĩa chúng Complex Conditionals Với câu điều liện phức tạp thật khó để biết chúng trả lời cho điều Để quản lý phức tạp làm rõ ý định thực theo cách:  Sử dụng biến trung gian:  Đóng gói qua funtion Polymorphism vs Enums Ưu tiên sử dụng đa hình enums Việc sử dụng đa hình mở rộng dễ dàng Ở ví dụ thay phải kiểm tra type qua enum sau thực hành vi phù hợp sử dụng đa hình giúp loại user tự định nghĩa hành vi hình Table Driven Method Trường hợp giá trị thay đổi lên tục sử dụng bảng sở liệu thay mã hóa cứng với cấu trúc phức tạp IV Function When to create a funtion Function giúp tổ chức lại mã thành thành phần logic nhỏ Có lý để tạo function: + Tránh trùng lặp + Thụt lề + Truyền đạt ý định tốt + Duy trì nhiệm vụ Avoid duplicate Việc trùng lặp khiến mã khó bảo trì đặc biết sửa lỗi Sẽ có nhiều nơi để bào trì, sửa chữa Chúng ta nhận thấy có thuật tốn lặp lại bốn lần, lần cho trường hợp SetUp, SuiteSetUp, TearDown SuiteTearDown Không dễ dàng phát trùng lặp bốn trường hợp trộn lẫn với mã khác Tuy nhiên, trùng lặp vấn đề làm mã dài dịng yêu cầu sửa đổi gấp bốn lần thuật toán phải thay đổi hay xuất lỗi Excessive Indentation - Tụt đầu dòng sâu thể mã có độ phức tạp cao, giảm thiểu khả đọc Giải pháp:  Extract method: đưa khối vào method  Return early Phương pháp có cấp độ thụt lề làm giảm khả đọc, xem sét áp dụng Return early trả kết điều kiện không thỏa mãn  Fail fast: trường hợp có nghĩa bạn ném ngoại lệ tình bất ngờ xử lý xảy Như ví dụ thay sử dụng khối lồng ta xử lý ngoại lệ trước Convey Intent Chúng ta dùng function để làm rõ ý tưởng muốn truyền đại, ví dụ đưa câu điều kiện vào function để làm rõ chúng thực điều 4 Do one thing - Hỗ trợ người đọc: Hàm đặt tên tốt giúp tóm tắt chức bên Tái sử dụng code Parameter Cố gắng giữ function – parameter Nếu có nhiều parameter đưa vào object Exception Chúng ta hay nhầm lẫn cho cấu trúc mã trộn xử lý lỗi với xử lý bình thường Ở ví dụ hàm delete() xử lý tất lỗi, dễ dàng để hiểu Hàm deletePageAndAllReferences() tập trung vào việc xóa page, bỏ qua việc xử lý lỗi Điều cung cấp tách biệt cho mã làm cho mã dễ dàng để hiểu sửa đổi V.Class When to Create Lớp phần tiêu đề sách giúp người đọc hình dung nội dung bên Class Organization Theo quy ước Java tiêu chuẩn, lớp phải bắt đầu danh sách biến Các số tĩnh công khai nên xuất trước Sau biến tĩnh riêng, biến riêng thông thường Classes Should Be Small! Quy tắc lớp chúng phải nhỏ Quy tắc thứ hai lớp chúng phải nhỏ Nhưng nhỏ nào? Ở phương thức đo số dòng vật lý, lớp đo trách nhiệm lớp - Cohension: o Các lớp nên có số lượng nhỏ biến Mỗi phương thức lớp nên thao tác với nhiều biến Nói chung, phương thức thao tác nhiều biến phương thức gắn kết với lớp Một lớp biến sử dụng phương thức gắn kết tối đa o Nói chung, khơng nên tạo lớp gắn kết tối đa vậy, mặt khác muốn gắn kết cao Khi tính liên kết cao, có nghĩa phương thức biến lớp đồng phụ thuộc gắn kết với tổng thể logic 4 Principle of Proximity Sắp xếp từ xuống đọc VI Comment Redundant Comment Comment dư thừa comment không mang lại thêm thông tin, lặp lại tên biến, tên phương thức 2 Intent comment Thay sử dụng comment cố gắng thể ý định mã 3 zoombie code Loại bỏ code comment lại Dividers and Brace Trackers Thay comment để đánh dấu kết thúc nên đưa vào function ... dòng code + Tạo vấn đề bảo trì: Khi lỗi sửa chỗ tồn chỗ khác Self-Documenting Code Khi bạn đọc lại đoạn code cũ, bạn không cần phải xem kỹ comment hay phải chạy thử để biết ý nghĩa đoạn code. .. số dòng code Positive Conditionals Việc viết điều kiện phủ định làm tăng việc phải suy nghĩ giảm khả đọc Ternary Elegance Toán tử ba cung cấp cú pháp lịch ngắn gọn, giảm thiểu số dòng code Stringly... biến, tên phương thức 2 Intent comment Thay sử dụng comment cố gắng thể ý định mã 3 zoombie code Loại bỏ code comment lại Dividers and Brace Trackers Thay comment để đánh dấu kết thúc nên đưa vào

Ngày đăng: 03/03/2021, 11:15

w