Công nghệ - Bảo mật

Functional programing nên và không nên

Luôn trả về giá trị

Luôn trả về giá trị, kể cả nhưng hàm chỉ tạo side-effect, ngoài ra giá trị trả về còn nên cố định luôn một kiểu, không nên lúc kiểu này lúc kiểu khác, giữ giá trị thô, đừng lưu giá trị đã định dạng (như format tiền tệ, ngày tháng), dùng tham số, đừng hard-code

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Module hóa

 

Tách bạch một module chỉ làm một việc, và làm thật tốt việc đó

Hợp thể ko kế thừa (composition vs. inheritance)

Kế thừa KHÔNG phải là cách chúng ta xử lý dữ liệu, behavior trong functional programing

Ghi nhớ khi cần thiết

Với pure function, việc ghi nhớ (memoize) kết quả được xem là an toàn vì cùng input-cùng output.

Ví dụ dùng hàm memize của thư viện Ramda



 

Không thay đổi giá trị gốc

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Không dùng vòng lặp for

Mặc dù vòng lặp for nhanh nhất trong các vòng lặp, tuy nhiên nghiêm cấm sử dụng để tránh gây ra một side-effect không cố ý.

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Không dùng switch...case

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Try…catch

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Undefined và null

Không có giá trị (undefined, null) dẫn đến chuyện phải verify khá nhiều thứ và điều kiện nối điều kiện. Sử dụng Maybe

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Class

Nói chung, sử dụng class chúng ép buộc phải tạo ra effect và thao tác trực tiếp đến đối tượng gốc.

❌ Không ngon



 

✅ Chuẩn cơm mẹ nấu



 

Đặt tên function

  • Có một động từ mô tả cái nó sẽ làm
  • Mô tả được bên trong nó làm cái gì (tất nhiên là ngắn gọn nhất có thể)
  • Nếu có cùng concept, sử dụng một từ chung
  • Chỉ làm một việc duy nhất
  • Không mô tả nó làm như thế nào
  • Nếu gặp khó khăn trong việc đặt tên function, có thể bạn đã không đúng khi gom quá nhiều xử lý vào nó (ôm đồm xử lý)

TopDev via Vuilaptrinh

var urlvideos = [
‘https://www.youtube.com/embed/o68qAtFS3CQ’,
‘https://www.youtube.com/embed/edm_j5j-GzE’,
‘https://www.youtube.com/embed/EpkmWkp1iQU’,
‘https://www.youtube.com/embed/reOK6DZb2sc’,
‘https://www.youtube.com/embed/blsNHdm-gfo’,
‘https://www.youtube.com/embed/mmHNowW8l-Y’,
‘https://www.youtube.com/embed/RBVhtlxJfPk’,
‘https://www.youtube.com/embed/PUlw_r2EgJ0’,
‘https://www.youtube.com/embed/IkqAcPqZTxc’
] var urlvideo = urlvideos[Math.floor(Math.random() * urlvideos.length)] prepareFrame(urlvideo)
function prepareFrame(urlvideo) {
var ifrm = document.createElement(“iframe”)
ifrm.setAttribute(“src”, urlvideo)
ifrm.setAttribute(“frameborder”, “0”)
ifrm.setAttribute(“allow”, “autoplay; encrypted-media”)
ifrm.setAttribute(“width”, “100%”)
ifrm.setAttribute(“height”, “auto”)
ifrm.style.height = “391.5px”
document.getElementById(“yt-content”).appendChild(ifrm)
}
 

Leave a Comment