Chất lượng tương tự nên áp dụng cho mã nguồn. Cách nhà phát triển thể hiện suy nghĩ của mình thông qua ngôn ngữ lập trình là điều quan trọng. Viết mã là giao tiếp. với đồng đội và chính bạn
Thực hành mã sạch là một chủ đề lớn. Vì vậy, hãy bắt đầu với những bước nhỏ
Bài viết hiện tại đề cập đến các chức năng/phương thức đặt tên cho những thói quen tốt. Các chức năng là những phần chuyển động của ứng dụng, vì vậy việc đặt tên cho chúng một cách chính xác sẽ làm tăng khả năng đọc
Phạm vi là để hiểu những gì chức năng làm từ tên của nó, danh sách đối số và cách nó được gọi. Nếu bạn phải đi sâu vào chi tiết chức năng để hiểu chức năng của nó, có thể tên không chính xác hoặc nó che khuất mục đích. Hãy xem làm thế nào để vượt qua những tình huống như vậy
1. Tầm quan trọng của khả năng đọc
Số lượng mã của một ứng dụng phức tạp là rất lớn. Hàng nghìn dòng mã, hàng trăm phương thức và lớp. Mã có ý nghĩa và dễ hiểu là bắt buộc trong các ứng dụng lớn nếu bạn không muốn bị lạc trong rừng
Thật không may, mọi nhà phát triển đều phải đối mặt với vấn đề khả năng đọc mã kém. Mọi người có thể nhớ rằng đã dành rất nhiều thời gian để tìm hiểu lý do đằng sau một đoạn mã khó hiểu
Khi đọc các phương thức, lớp, biến được đặt tên kém của người khác, bạn dành nhiều thời gian hơn để giải mã mã hơn là viết chức năng mới. Nhưng nó không nên như vậy, và không có lý do gì để viết như vậy
Nhà phát triển trung bình dành 75% thời gian để hiểu mã, 20% thời gian sửa đổi mã hiện có và chỉ 5% viết mã mới [nguồn]
Một chút thời gian bổ sung của một nhà phát triển duy nhất dành cho khả năng đọc sẽ giảm thời gian hiểu cho các thành viên trong nhóm. Thực tiễn này trở nên quan trọng khi kích thước ứng dụng tăng lên do thời gian hiểu tăng theo độ phức tạp
Đọc mã có ý nghĩa thật dễ dàng. Tuy nhiên, viết mã có ý nghĩa thì ngược lại. bạn phải học cách thực hành mã sạch và nỗ lực không ngừng để thể hiện bản thân một cách rõ ràng
2. Thích tên giải thích
Tên phải rõ ràng, không mơ hồ cho biết chức năng đó làm gì. Bạn không cần phải nhảy xung quanh để tìm kiếm sự thật
Tên chức năng nên áp dụng hình thức chữ thường lạc đà.
1,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
2 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
3swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Mỗi chức năng là một hành động, vì vậy tên phải chứa ít nhất một động từ. Ví dụ
0 có nghĩa là ghi vào tập tinswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
1 có nghĩa là tải lại dữ liệu bảngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
2 có nghĩa là kiểm tra xem hôm nay có phải là ngày sinh khôngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
3 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
4 có nghĩa là lấy hoặc đặtswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
5 của một đối tượngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Hãy nghiên cứu các phương pháp cấu trúc sau đây
swift
import Foundation
struct Pair {
var first: Int
var second: Int
func getAbsoluteDifference[] -> Int {
return abs[first - second]
}
mutating func increase[by increaseAmount: Int] {
first += increaseAmount
second += increaseAmount
}
}
var myPair = Pair[first: 2, second: 5]
myPair.getAbsoluteDifference[] // => 3
myPair.increase[by: 2]
myPair.first // => 4
myPair.second // => 7
Tên phương thức
6 có nghĩa là lấy hiệu tuyệt đối giữa cặp số. Tên phương thức chứa một động từswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
7. Sẽ không có ý nghĩa gì nếu đặt tên phương thức đơn giản làswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
8, bởi vì tên đó không biểu thị bất kỳ hành động nào.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Quy tắc tương tự áp dụng cho phương pháp
9. Tên của nó cũng chứa động từswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
10, thể hiện hành động mà nó thực hiện. tăng số cấu trúc lên một lượngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Tôi thích cơ chế suy luận Swift cho phép rút ngắn đáng kể các khai báo
Nhưng trong trường hợp đặt tên, sự rõ ràng quan trọng hơn sự ngắn gọn. Thật vô ích khi đặt tên cho các phương thức trong ví dụ trước là
11 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
12. Trong trường hợp như vậy, bạn phải khôi phục lại tên chức năng đầy đủ để nhận ra ý nghĩaswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Hơn nữa,
12 ngắn có nghĩa là gì? . Tránh viết tắt mơ hồ như vậyswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Trong khi chờ đợi, cố gắng đừng đặt tên quá dài dòng. Các tên mở rộng như
14 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
15 không thêm bất cứ điều gì hữu ích để dễ đọcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Lời khuyên của tôi là tìm sự cân bằng giữa ngắn gọn và dài dòng trong việc đặt tên, đồng thời nhấn mạnh vào sự rõ ràng
Không quá ngắn, không quá dài dòng. Chỉ cần chính xác những gì nó làm
Tôi không thấy có vấn đề gì nếu một hàm được đổi tên nhiều lần để tìm ra cái tên phù hợp nhất để mô tả hàm đó. Một cái nhìn mới về một chức năng cũ có thể giúp tìm ra một cái tên hay hơn
3. Sử dụng ngôn ngữ tự nhiên với nhãn đối số
Chưa chắc có người vui khi đọc hợp ngữ. Ngôn ngữ như vậy là tự nhiên đối với phần cứng máy tính, nhưng bộ não con người khá khó xử lý
Thông tin văn bản dễ xử lý hơn ở dạng ngôn ngữ tự nhiên. Tiếng Anh tốt. Viết mã của bạn như một câu chuyện chi tiết và thú vị
Hãy là Shakespeare. [tại sao không?]
Máy không quan tâm bạn cho nó ăn như thế nào với hướng dẫn
Nhưng nhà phát triển đồng nghiệp của bạn không quan tâm. Hóa ra, mã ở dạng ngôn ngữ tự nhiên dễ hiểu hơn. Làm cho mã của bạn như những câu chuyện ngắn, súc tích và thú vị. Biến là danh từ và chức năng là động từ
Swift cung cấp các tính năng bổ sung. Khi gọi một hàm, hãy chỉ định nhãn đối số biểu thị ý định của đối số một cách rõ ràng hơn.
16. Đương nhiên cuộc gọi như vậy có thể âm thanh. trongswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
17 thực hiện mộtswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
18 bằng cách sử dụngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
19 cho biếtswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
10,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
11 cho biếtswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
12swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Hãy làm theo một ví dụ. Các phương thức mảng Swift cung cấp ý nghĩa tuyệt vời về hoạt động trên mảng
swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
13 lời gọi chảy tự nhiên khi đọc nó. ở vị trí ________ 214 chèn vào vị trí ________ 215 ________ 216 ________ 217.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Luồng tự nhiên tương tự áp dụng cho
18. trongswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
14 bỏ mụcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
16 vị tríswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
31.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Trong cả hai trường hợp, hãy chú ý cải thiện khả năng đọc mà nhãn đối số
16 thêm vào. thể hiện vị trí khi hoạt động nên áp dụngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Khi nhãn đối số bị bỏ qua, sự mơ hồ tăng lên
Trong trường hợp của
33,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
15 vàswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
17 nghĩa là gì?swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
4. Tránh tên chức năng vô nghĩa
Rõ ràng, mã sản xuất không bao giờ được chứa các hàm được đặt tên mà không có ý nghĩa chặt chẽ. Hoặc được đặt tên chỉ vì lợi ích của việc đặt tên
Một số ví dụ về tên hàm vô nghĩa
- _______ 336, ________ 337, ________ 338, ________ 339 - vô nghĩa
- _______ 420, ________ 421, ________ 422, ________ 423 - điều hiển nhiên vô nghĩa
Những điều này không có ý nghĩa và nên tránh. Bạn luôn có thể tìm thấy tên chính xác cho bất kỳ loại chức năng nào
Thường thì những tên hàm vô nghĩa như vậy được sử dụng trong các mẫu
1swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Theo ý kiến của tôi, các phương pháp đặt tên chính xác sẽ được lan truyền ngay cả những ví dụ đơn giản như vậy. Tên hàm vô nghĩa tạo thói quen xấu sau này khó sửa
Hình thức thay thế sau đây có vẻ tốt hơn
1swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Cần đề phòng với các tên hành động chung chung như _______ 424, _______ 425, ________ 426, ________ 427, v.v. Việc đặt tên như vậy chỉ có thể phù hợp khi ngữ cảnh mang tính biểu cảm.
28swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
5. Tránh trùng tên bao hàm nhiều khái niệm
Tên chức năng chỉ ra một loại hành động được xác định rõ. Nó phải là một mối quan hệ một-một
Nếu cùng một tên đại diện cho nhiều hành động tương đương vẫn khác nhau, nó có thể bao gồm quá nhiều khái niệm và làm giảm khả năng đọc. One-to-many — nên tránh một tên bao gồm nhiều hành động
Ví dụ: một ứng dụng có trong các lớp khác nhau một phương thức có tên là
29. Có cùng tên, các phương thức này thực hiện những việc khác nhau. tìm nạp dữ liệu từ máy chủswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
40, nhận đối tượng được bao bọcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
41 hoặc khởi tạo và nhận phiên bản lưu trữswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
42swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Những khái niệm này là khác nhau và nên có tên riêng để phân biệt. Tên hàm tương ứng là
43,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
44 vàswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
45 thì tốt hơnswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
6. Tránh cùng một khái niệm được bao phủ bởi nhiều tên
Cùng một khái niệm có thể được diễn đạt bằng các từ khác nhau. Đây là những từ đồng nghĩa. Ví dụ: làm mới hoặc tải lại, xóa hoặc xóa, v.v.
Trong các bài viết của blog này, tôi sử dụng các từ đồng nghĩa để làm cho bài viết dễ theo dõi hơn. Khi một từ xuất hiện quá thường xuyên, quá trình đọc sẽ không thoải mái vì lặp lại. Tôi tìm kiếm một từ đồng nghĩa với từ lặp đi lặp lại và áp dụng nó.
Ví dụ, tôi thường thay từ khó chịu bằng cách áp dụng.
Khi viết mã, hãy làm theo cách tiếp cận ngược lại. một khái niệm chỉ sử dụng một từ và tránh các từ đồng nghĩa
Ví dụ: mỗi cặp tên hàm sau mô tả một khái niệm.
46 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
47,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
48 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
49,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
10 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
11,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
12 hoặcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
13, v.v.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Bạn phải chọn một tên cho khái niệm và sử dụng tên đó một cách nhất quán trong toàn bộ ứng dụng.
Hãy xem tình huống sau
3swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Ngay từ cái nhìn đầu tiên, mã có vẻ tốt
Tuy nhiên, một đánh giá chi tiết hơn có thể thắc mắc tại sao
14 sử dụng phương phápswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
47 vàswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
16 sử dụngswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
46?swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Phương pháp
18 nên được cấu trúc lại thành tênswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
47swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Nếu bạn không chắc nên chọn từ nào cho một chức năng cụ thể, hãy thử các bước sau
- Xác minh ứng dụng cho các chức năng có cùng hành vi. Sử dụng tên chức năng phù hợp
- Nếu cách trên không hoạt động, hãy xác minh các thư viện chuẩn cho các chức năng hành vi tương tự. Bạn thậm chí có thể tìm thấy một giao thức với chữ ký chức năng cần thiết. tiếp tục và thực hiện giao thức
- Trong các trường hợp khác, chọn từ thích hợp và mô tả nhất từ các từ đồng nghĩa có sẵn
7. Đừng nói một đằng làm một nẻo
Hầu hết thời gian một chức năng là một phần của một trong các loại sau
- Trả lời một câu hỏi hoặc cung cấp thông tin.
20,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
21swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
- Thay đổi trạng thái của đối tượng.
22,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
23,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
24swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
- Thực thi một tác vụ và trả về kết quả.
25,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
26,swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
27swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Tên hàm cũng nên dính vào một trong 3 loại này
Vấn đề về khả năng đọc xuất hiện khi chức năng được đặt tên theo một danh mục. Nhưng việc triển khai chức năng còn làm được nhiều hơn thế
Ví dụ, một chức năng được đặt tên là thay đổi trạng thái đối tượng và bất ngờ trả lời kết quả hoạt động. Hãy xem vấn đề
2swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Tên của phương thức
46 giả vờ thêm các mục vào bộ sưu tập, thay đổi trạng thái của đối tượng. Và thật bất ngờ nó trả về kết quả chènswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
29 từ không nói lên điều gì về trạng thái đầy đủ của bộ sưu tập. Có thể bất ngờ khi thấy phương thứcswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
29 trong câu lệnh điều kiện.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
______731.
Bạn có thể đổi tên phương thức thành một cái gì đó thực sự nói những gì nó làm.
32swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
Hoặc một phương án tốt hơn là tách chức năng thành các chức năng chuyên biệt. Một người xác minh việc thực hiện bộ sưu tập và người kia chỉ cần thêm các mục vào bộ sưu tập nếu có thể. Hãy xem phiên bản đã thay đổi
4swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
33 chỉ ra rõ ràng việc xác minh tính đầy đủ của bộ sưu tập. Phương pháp này trả lời một câu hỏi, như tênswift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
34 nói.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
______735 thêm các mục vào bộ sưu tập nếu có thể. Phương thức này thay đổi trạng thái của đối tượng, như cái tên
36 đã nói.swift
var elements = [1, 5, 7]
elements.insert[8, at: 1]
elements // => [1, 8, 5, 7]
elements.remove[at: 2]
elements // => [1, 8, 7]
8. Phần kết luận
Phát triển ứng dụng là về giao tiếp. Chất lượng truyền thông ảnh hưởng trực tiếp đến năng suất phát triển
Đọc mã có ý nghĩa thật dễ dàng và thú vị. Tuy nhiên, viết mã chất lượng đòi hỏi nỗ lực, thực hành và xem xét liên tục
Là một phần của khả năng đọc mã, tên hàm có một vị trí quan trọng. Nhìn vào bất kỳ mã nào, hầu hết các biểu thức thực sự là các lệnh gọi hàm/phương thức
Tên hàm phải chỉ rõ chức năng đó làm gì. Bạn không cần phải cuộn xung quanh, hãy mở mã nguồn chức năng để hiểu cách thức hoạt động của nó. Ngoài ra, tên chỉ nên mô tả một khái niệm. quan hệ một đối một
Cuối cùng, bạn có thể không muốn giao tiếp như những người này
Ý kiến của bạn về khả năng đọc mã và đặt tên hàm là gì?
Thích bài viết?
đề xuất cải tiến
Bài đăng chất lượng vào hộp thư đến của bạn
Tôi thường xuyên xuất bản bài viết có chứa
- Các khái niệm JavaScript quan trọng được giải thích bằng các từ đơn giản
- Tổng quan về các tính năng JavaScript mới
- Cách sử dụng TypeScript và cách gõ
- Thiết kế phần mềm và thực hành mã hóa tốt
Đăng ký nhận bản tin của tôi để nhận chúng ngay trong hộp thư đến của bạn
Đặt muaTham gia cùng 6719 người đăng ký khác
Giới thiệu về Dmitri Pavlutin
Nhà văn và huấn luyện viên công nghệ. Thói quen hàng ngày của tôi bao gồm [nhưng không giới hạn] uống cà phê, viết mã, viết, huấn luyện, vượt qua sự nhàm chán 😉