Dollar Sign Blues: Javascript và PHP


18

Tôi lớn lên lập trình C ++ và Java, nơi mọi thứ đều an toàn và đẹp đẽ. Trình biên dịch đảm bảo giữ cho tôi kiểm tra nếu tôi đi lạc. Tất nhiên, mọi người đều học một ít Perl ở trường đại học, nhưng tôi đã không hít vào. Trẻ em ngày nay là tất cả về PHP trên phụ trợ và Javascript ở phía trước. Trong khi cố gắng trở thành hông, tôi cũng làm như vậy (để phát triển web). Vấn đề tôi tiếp tục gặp phải là tôi vô tình thêm ký hiệu đô la ($) vào trước các biến thông thường trong Javascript và tất nhiên không ai nói gì vì đó là cú pháp hợp pháp thường được sử dụng cho các đối tượng jQuery.

Có bất kỳ công cụ gỡ lỗi hoặc thủ thuật dev để bắt sự nhầm lẫn ký hiệu đô la này? Bạn có thường mắc lỗi tương tự, và làm thế nào để bạn đối phó với nó một cách tình cảm? Các công cụ phát triển Chrome không phải lúc nào cũng thấy đây là lỗi Javascript. Tôi sử dụng PhpStorm và Emacs để phát triển, nhưng chúng không bắt được sự ngu ngốc của tôi, mặc dù tôi nghi ngờ Emacs làm nhưng chọn không nói cho tôi biết về điều đó.

Nếu bạn nghĩ câu hỏi này thật lố bịch, tôi nghĩ bạn đã đúng. Nhưng chúng ta sống trong một thế giới nơi một biến có ký hiệu đô la ở phía trước nó. Trong một thế giới như vậy, không có gì là vô lý.


2
Tình cảm? Chỉ cần đả kích đồng nghiệp của bạn.
Chris Schiffhauer

@ChrisSchiffhauer Thật không may, tôi làm việc trong học viện nơi sự cô lập hoàn toàn và hoàn toàn là tên của trò chơi. Tôi sẽ phải sắp xếp một cuộc họp với một đồng nghiệp để kéo dài, và điều đó sẽ lấy đi sự tự phát của tất cả.
Alan Turing

Câu trả lời:


11

Không có gì sai trong việc sử dụng $trong các biến. Tôi sẽ không cố tình làm điều đó trên mọi biến số, nhưng nó vẫn là một cú pháp hợp lệ. jQuery là một trong những ví dụ $được sử dụng làm tên biến. Đó cũng là lý do tại sao "các công cụ phát triển Chrome không phải lúc nào cũng thấy đây là lỗi Javascript" , vì không có lỗi ở nơi đầu tiên.

Nếu bạn sợ viết mã như:

var demo = function demo() {
    var a = 123;
    ...
    $a = 456; // A new variable is created in global scope.
}

sau đó bạn phải sử dụng trình kiểm tra kiểu, như jsLint , jsHint hoặc Google Clos Linter . Cái nào trong số đó? Tùy thuộc vào bạn để đưa ra lựa chọn. Để giúp bạn với điều đó, đây là một vài lưu ý:

Phong cách

Google Clos Linter tuân theo Google JavaScript Style Guide , được biết là được thực hiện một cách khéo léo. Sử dụng một kiểu nổi tiếng cho JavaScript hoặc bất kỳ sáu ngôn ngữ nào khác là một ý tưởng hay: khi bạn chia sẻ mã của mình hoặc thuê một nhà phát triển mới, rất có thể họ đã quen thuộc với phong cách này.

Nhiều nhà phát triển cũng quen thuộc với phong cách Douglas Crockford. Phong cách này được giải thích chi tiết trong JavaScript: The Good Parts , một cuốn sách đáng để mua bởi bất kỳ ai làm việc với JavaScript.

Đối với jsHint, tôi thực sự không thể tìm thấy những quy ước nào được sử dụng và trang web dường như tránh nói về chủ đề đó. Có lẽ tôi đã bỏ lỡ điều gì đó.

Hỗ trợ bởi IDE

Cả jsLint và jsHint đều được PhpStorm hỗ trợ . Đây cũng là trường hợp của Google Clos Linter.

Môi trường

Google Clos Linter là một trong một loạt các công cụ . Nếu bạn đã sử dụng Trình biên dịch đóng cửa của Google hoặc Thư viện đóng cửa của Google , tốt nhất nên chọn Công cụ đóng cửa trên các công cụ khác.

Nghiêm khắc

jsLint được biết đến là nghiêm khắc. jsHint dễ dãi hơn, điều này không phải lúc nào cũng tốt. Ví dụ: một trong những lý do để fork jsLint cho jsHint được giải thích trong một bài viết cho thấy mã xấu sẽ tạo ra lỗi trong jsLint, nhưng không phải trong jsHint:

/*global jQuery */

// Example taken from jQuery 1.4.2 source
jQuery.extend({
    /* ... */

    isEmptyObject: function( obj ) {
        for ( var name in obj ) {
            return false;
        }
        return true;
    }

    /* ... */
});

Mã này rất tệ, vì có vẻ như JavaScript có phạm vi chặn, trong khi nó thì không. Xem JavaScript: Phần tốt, trang. 102, Phụ lục A: Các bộ phận khủng khiếp, Phạm vi. Nói cách khác, nhìn vào mã mà không biết ngôn ngữ, chúng tôi hy vọng namesẽ không hiển thị bên ngoài vòng lặp, trong khi nó sẽ vẫn hiển thị.

Đối với Google Clos Linter, tôi tin rằng nó ở đâu đó ở giữa jsLint và jsHint, nhưng tôi không có đủ thông tin để hỗ trợ điều đó.

Phần kết luận

Tôi sẽ tránh jsHint: nó quá dễ dãi, có nghĩa là nó sẽ không tìm thấy các lỗi tiềm ẩn mà những kẻ khác sẽ phát hiện ra. Hướng dẫn phong cách được sử dụng là khó tìm.

Trong số jsLint và Google Clos Linter, sự lựa chọn không rõ ràng. Cả hai đều được viết bởi các chuyên gia, cả hai đều tuân theo hướng dẫn phong cách nghiêm ngặt, được mô tả kỹ lưỡng đã được hàng ngàn nhà phát triển theo dõi. Sử dụng cả hai trong một thời gian, sau đó chọn một trong đó là thực tế hơn cho bạn.


+1: Đánh bại tôi với nó. Tôi bắt đầu bỏ dấu chấm phẩy của mình khi tôi chuyển ngôn ngữ từ F # sang C #, vì vậy tôi có thể chia sẻ nỗi đau của bạn không;)
Scrwtp

2
Xin lưu ý, vì OP đang sử dụng PhpStorm: Cả JSLint và JSHint đều được tích hợp và có thể được thiết lập để kiểm tra mã của họ theo yêu cầu hoặc thậm chí khi đang di chuyển. Các lỗi như trong ví dụ của bạn khá dễ bắt.
yannis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.