2012-01-05 26 views
16

Tôi đã nhìn vào mã nguồn để qTip 2 và thấy như sau:nguyên thủy Giao rừng Javascript để biến tương đương tên của họ như "hằng số"

// Munge the primitives - Paul Irish tip 
var TRUE = true, 
    FALSE = false, 
    NULL = null; 

tôi không thể đưa ra một lý do bạn đã bao giờ nên làm điều này và có cảm giác mạnh mẽ rằng nó sẽ khuyến khích thói quen viết mã xấu. Giả sử nhà phát triển mắc lỗi đánh máy trong điều kiện Yoda như if (TRUE = someCondition()), sau đó TRUE có thể kết thúc thực sự nghĩa là false hoặc bạn có thể sẽ chỉ định someObject đến NULL.

Tôi đoán Tôi chỉ tự hỏi nếu có một số chất lượng cứu chuộc cho thực tế này mà tôi đang mất tích, hoặc nếu điều này chỉ là một đồng bằng cũ Bad Idea ™

+3

Btw, '+ 1' không chỉ cho câu hỏi hay mà còn dùng cụm từ * Điều kiện Yoda * .. –

+0

@MikeChristensen: Bạn có thể quan tâm đến bài viết này, sau đó :) -http: //www.dodgycoder. net/2011/11/yoda-conditions-pokemon-exception.html – Tristan

+0

Hmm, thực sự hoàn thành công việc hoặc đọc blog mã hóa vui nhộn. Blog nó là! –

Trả lời

15

Mục tiêu của việc này chỉ là để cải thiện khả năng nén, bản thân Paul Irish gọi nó là "Chống mẫu".

Ông mô tả nó như "Good cho việc nén và chuỗi phạm vi traversal" trên trình bày sau:

On traversal chuỗi phạm vi, chúng tôi sẽ không thấy bất kỳ cải tiến nào về các chữ như null, false, true, vì chuỗi phạm vi không được kiểm tra, chúng chỉ là các chữ.

Trên các số nhận dạng khác là undefined hoặc windows, quá trình truyền tải chuỗi phạm vi thực sự được kiểm tra.

Paul Irish Anti-patterns slide 55

+1

Tôi tự hỏi nếu nó có giá trị chút nào nếu bạn gzip. Tôi dường như nhớ lại những trường hợp kết quả bị xáo trộn thực sự nhỏ hơn, nhưng kết quả gzipped lớn hơn so với gzip tương đương mà không có sự đào tạo. –

+0

Mã chính xác từ OP xuất hiện trên trang trình bày 55. Cách lắp ... – hugomg

+1

@missingno - qTip có ý tưởng từ trang trình bày này. Họ đặt nó vào đó trong bình luận (xem dòng đầu tiên trong mã của OP). –

2

Tôi tin rằng điều này được khuyến khích cho nén.

Các biến tắt này sẽ được nén khi được cắt, dẫn đến tệp nhỏ hơn. Tuy nhiên, nhược điểm đáng chú ý của bạn chắc chắn là điểm hợp lệ!

4

Bạn có thể thực hiện việc này để nén mã. Ví dụ: Máy nén YUI sẽ không chạm vào truefalse, nhưng nó có thể thay thế tất cả các lần xuất hiện, ví dụ: TRUE với A, tiết kiệm bốn ký tự cho mỗi lần xuất hiện. Ví dụ, trước khi nén:

if (foo === null) { 
     bar = true; 
    } 

Sau khi nén, giả sử máy nén thay thế TRUE với aNULL với c:

if(foo===c){bar=a;} 

Versus này, sau khi nén không có "munging của nguyên thủy":

if(foo===null){bar=true;} 

Nguy cơ thói quen mã hóa xấu mà bạn trích dẫn khá chính xác trong các câu hỏi của mình tion có thể lớn hơn các khoản tiết kiệm nhỏ trong nén bổ sung. Nó phụ thuộc vào mức độ tuyệt vọng của bạn để tiết kiệm một vài chục hoặc có lẽ một vài trăm byte.

Cá nhân, tôi sẽ (gần như) không bao giờ thực hiện việc này. Quá nguy hiểm.

Các vấn đề liên quan