Nghe trên mạng có câu “những người lười là những nhân viên tốt nhất để thuê”. Lười ở đây là tìm tòi cách ngắn nhất để làm việc chứ không phải là lười làm đâu nhé :)). Trong lập trình có câu don’t repeat yourself (DRY) để chỉ kiểu lười hữu ích này.
Sau đây là một số mẹo để mọi người viết code ngắn hơn, tớ sẽ lấy ví dụ ở objective-c, các ngôn ngữ khác thì theo tương tự. Ví dụ có đoạn code sau:
[self.tableView registerNib:[UINib nibWithNibName:@"Cell1" bundle:nil] forCellReuseIdentifier:@"Cell1"];
[self.tableView registerNib:[UINib nibWithNibName:@"Cell2" bundle:nil] forCellReuseIdentifier:@"Cell2"];
[self.tableView registerNib:[UINib nibWithNibName:@"Cell3" bundle:nil] forCellReuseIdentifier:@"Cell3"];
[self.tableView registerNib:[UINib nibWithNibName:@"Cell4" bundle:nil] forCellReuseIdentifier:@"Cell4"];
...
Mọi người thấy dòng code trên lặp đi lặp lại một logic, gỉa sử có nhiều loại cell khác nhau thì việc viết đi viết lại dòng code trên thật nhàm chán và rườm rà. Mình lười nên sẽ tìm cách viết gọn hơn như sau:
NSArray *arrCellName = @[@"Cell1",@"Cell2",@"Cell3",@"Cell4"];
for( NSString *cellName in arrCellName) {
[self.tableView registerNib:[UINib nibWithNibName:cellName bundle:nil] forCellReuseIdentifier:cellName];
}
Như vậy thêm loại cell mới nào ta chỉ cần nhét nó vào mảng là xong. Trong các kỹ năng refactor thì có hẳn nickname riêng cho cách này substitute.
Tiếp theo là loại bỏ switch case, gỉa sử ta có đoạn code sau:
switch(type) {
case type1:
result = @"value1";
break;
case type2:
result = @"value2";
break;
case type3:
result = @"value3";
break;
case type4:
result = @"value4";
break;
case type5:
result = @"value5";
break;
default:
result = @"valueDefault";
break;
}
return result;
Tớ không thích dùng switch case thế nên hay viết ngắn gọn lại kiểu này:
NSDictionary *map = @{
@(type1) : @"value1",
@(type2) : @"value2",
@(type3) : @"value3",
@(type4) : @"value4",
@(type5) : @"value5",
}
return map[type] ? : @"valueDefault";
Kỹ năng này sử dụng dữ liệu kiểu key - value làm việc, sau có thêm type nào mới nhét vào dictinary là xong, trong c++ thì kiểu key - value chính là map đó , javascript thì khỏi nói
Hãy cố gắng DRY, không thì có lúc CRY đó