Clean code rất tốt cho “mọi người”
Trong công việc đầu tiên của tôi với tư cách là một kỹ sư phần mềm, tôi nghĩ rằng mình đã có kiến thức tốt về cách phát triển các ứng dụng hoặc hệ thống tốt kể từ khi tôi học viết mã ở trường trung học. Vì vậy, tôi khá lạc quan sau đó. Trên thực tế, tôi đã không thực sự chú ý đến chất lượng mã của mình. Và vì điều đó, trong lần phát triển tiếp theo, tôi thấy mình thực sự thất vọng vì mã của chính mình. Nó không thể đọc được và không dễ bảo trì.
Sau đó, tôi bắt đầu nhận ra rằng một hệ thống tốt không bắt đầu bằng một giao diện đẹp, các tính năng tuyệt vời và những thứ phức tạp. Các hệ thống tốt bắt đầu với chất lượng mã tốt của chúng.
Sau một thời gian, tôi đã nhờ các kỹ sư cấp cao lúc đó cho tôi các gợi ý về cách cải thiện chất lượng mã của tôi. Và cuối cùng, họ đã cho tôi một trong những cách tiếp cận hay được biết đến nhiều nhất trong lĩnh vực lập trình, nó được gọi là Clean Code .
Hóa ra làm cho chất lượng mã của chúng tôi tốt hơn không khó lắm. Chúng ta chỉ cần làm cho mã sạch sẽ. Sạch sẽ có nghĩa là loại bỏ tất cả những thứ phức tạp và làm cho chúng trở nên đơn giản và dễ đọc.
Vì vậy, trong bài đăng này, hãy để tôi chia sẻ những gì cá nhân tôi làm để duy trì chất lượng mã của mình và tôi sẽ cung cấp cho bạn một số ví dụ mà tôi lấy từ Clean Code của Robert J. Martin . Đó là một cuốn sách lập trình. Tôi khuyên bạn nên khám phá thêm về mã sạch trong cuốn sách đó để biết thêm chi tiết.
Sử dụng tên mô tả
Chúng ta có thể bắt đầu với những cái tên. Tên của các biến và hàm phải mang tính mô tả nhất có thể. Không sử dụng chữ viết tắt hoặc tên không có ý nghĩa. Đây là một ví dụ về tên xấu và tốt.
Tên xấu ❌
const fn = 'Farizal';
const ln = 'Hamami';
function full() {
return fn + ln;
}
const firstName = 'Farizal';
const lastName = 'Hamami';
function getFullName() {
return firstName + lastName;
}
— Robert C. Martin
Cố gắng tránh sử dụng bình luận
Hãy tưởng tượng nếu chúng ta phải duy trì nhận xét trong khi duy trì mã. Nó sẽ lãng phí thời gian của chúng tôi. Thay vào đó, bản thân mã phải mang tính thông tin.
Mã xấu ❌
// Check to see if the employee
// is eligible for full benefits
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))
if (employee.isEligibleForFullBenefits())
Nhận xét dư thừa ❌
// Declare first name
const firstName = 'Farizal';
// Declare last name
const lastName = 'Hamami';
/**
Get full name by combining
first name and last name
*/
function getFullName() {
return firstName + lastName;
}
Bình luận thông tin ✅
// SimpleDateFormat is not thread-safe,
// so we need to create each instance independently.
const dateFormat = new SimpleDateFormat(
”EEE, dd MMM yyyy HH:mm:ss z”);
df.setTimeZone(TimeZone.getTimeZone(”GMT”));
Tuy nhiên, chúng tôi không yêu cầu nhận xét Nếu mã của chúng tôi dễ hiểu. Nếu chúng tôi tạo nhận xét và ai đó phải thay đổi mã, chúng tôi không thể xác nhận rằng người này cũng đã cập nhật nhận xét. Đó là lý do tại sao chúng ta cần tránh sử dụng bình luận khi có thể.
Đặt tên hàm nhất quán
Mặc dù mang tính mô tả nhưng tên hàm cũng phải nhất quán. Nó sẽ làm cho mã trông gọn gàng và sẽ giúp chúng ta tìm các hàm dễ dàng hơn, vì chúng ta có thể nhanh chóng quét qua cơ sở mã để tìm một tên cụ thể.
Tên không thống nhất ❌
class Circle {
public function getRadius() {...}
public function fetch_color() {...}
public function retrieveArea() {...}
}
class Circle {
public function getRadius() {...}
public function getColor() {...}
public function getArea() {...}
}
Giảm ký tự trong một dòng
Hãy nhớ rằng chúng ta muốn tạo mã dễ đọc và chúng ta nên tránh để các dòng mã dài bằng cách ngắt các ký tự thành các dòng mới.
Dài quá ❌
throw ValidationException::withMessages(['email' => trans('auth.failed'), 'error' => 'Your password is incorrect', 'redirect' => true]);
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
'error' => 'Your password is incorrect',
'redirect' => true
]);
Tôi biết thật hấp dẫn khi giải quyết vấn đề của chúng ta bằng một hàm duy nhất và chúng ta tạo ra một hàm thực hiện nhiều việc. Tôi nghĩ chúng ta nên tránh làm điều đó để giảm thiểu độ phức tạp của chức năng.
Hàm phức ❌
function createAppointment(appointment) {
const patientList = this.$api.get('patient');
const currentPatient = patientList.find((patient) => {
patient.id = appointment.patient_id
});
const selectedDoctor = doctorList.find((doctor) => {
doctor.id = appointment.doctor_id
});
const selectedLocation = locationList.find((location) => {
location.id = appointment.location_id
});
this.sendAppointment(selectedDoctor, selectedDoctor, currentPatient);
}
function createAppointment(appointment) {
const currentPatient = getCurrentPatient(this.patientId);
this.sendAppointment(
appointment,
currentPatient
);
}
— Robert C. Martin
Ngoài ra, tôi cảm thấy việc sử dụng quá nhiều tham số cũng là một ý tưởng tồi vì nó sẽ khiến chúng ta khó duy trì chức năng đó ở nhiều nơi khác nhau. Vì vậy, sẽ thật tốt nếu chúng ta có thể giảm thiểu các tham số chức năng.
function buildCar(float wheelDiameter, float wheelColor, float wheelMaterial, float wheelManufacturer, String engineType, String engineColor, String engineManufacturer);
function buildCar(Wheel wheel, Engine engine);
Hồi đó có một số lo ngại về định dạng mã, mỗi nhà phát triển có định dạng mã của riêng họ. Tôi không biết mình nên tuân theo định dạng viết của ai và cách định dạng lý tưởng nhất để viết mã.
May mắn thay, có những quy ước định dạng trong cách tiếp cận Clean Code. Tôi nghĩ, trong trường hợp này, chúng ta cần phải có thỏa thuận, vì vậy sẽ tốt hơn nếu mọi nhà phát triển đều theo kịch bản này .
Biến
Các biến nên được khai báo càng gần với cách sử dụng của chúng càng tốt.
function paySalary(Employee employee) {
const bonus = calculateBonus(employee);
const totalSalary = bonus + employee.getSalary();
sendMoney(employee, totalSalary);
}
public class Employee {
private String name;
private String id;
private float salary;
public function getName() { ... }
}
Các chức năng phụ thuộc nên được đóng theo chiều dọc.
function paySalary() {
calculateBonus(salary);
}
function calculateBonus(salary) {
return (salary / 10);
}
class Employee {
public function payTax() {}
public function payOverdueTax(date) {}
public function increaseSalary() {}
public function decreaseSalary() {}
}
Nhiều nhà phát triển đang cố gắng sắp xếp theo chiều ngang mã của họ giống với một dòng mã khác.
public class WebService {
private Request request;
private Response response;
private FitnesseContext context;
protected. long requestTimeLimit;
}
public class WebService {
private Request request;
private Response response;
private FitnesseContext context;
protected long requestTimeLimit;
}
Cách đơn giản nhất để làm cho mã của chúng ta có thể đọc được là chú ý đến phần thụt vào trong mã của chúng ta. Đây là một ví dụ.
public String functionName() {return "";}
public String functionName() {
return "";
}
Lời đầu tiên, cảm ơn bạn đã đọc bài viết này. Tôi nghĩ rằng bài viết là khá dài. Nhưng tôi hy vọng nó sẽ hữu ích cho các nhà phát triển, đặc biệt là những người mới làm quen với thế giới kỹ thuật này.
Tôi muốn nói đôi lời để kết thúc điều này và tôi muốn nói rằng chất lượng mã là một trong những điều quan trọng nhất mà chúng ta cần quan tâm với tư cách là nhà phát triển. Nếu không, chúng ta sẽ lãng phí thời gian của mình trong tương lai, thậm chí tệ hơn, sẽ khiến tổ chức và đội ngũ phải trả giá đắt. Và chúng ta có thể bắt đầu cải thiện chất lượng mã của mình bằng cách triển khai mã sạch .
Mã sạch không chỉ mang lại lợi ích cho bạn mà còn cải thiện năng suất của các nhóm hoặc bất kỳ ai tham gia vào dự án. Mã của bạn sẽ dễ hiểu, dễ đọc và dễ bảo trì hơn. Và tôi nghĩ đó là một kỹ năng quan trọng mà mọi nhà phát triển nên thành thạo.

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































