Blues Tanda Dolar: Javascript dan PHP

18

Saya tumbuh pemrograman C ++ dan Java di mana semuanya aman dan indah. Compiler memastikan saya tetap di cek jika saya pernah tersesat. Tentu saja, semua orang melakukan Perl kecil di perguruan tinggi, tetapi saya tidak menghirup. Anak-anak hari ini adalah semua tentang PHP di backend dan Javascript di depan. Dalam mencoba menjadi pinggul, saya melakukan hal yang sama (untuk pengembangan web). Masalah yang terus saya temui adalah saya tidak sengaja menambahkan tanda dolar ($) di depan variabel biasa dalam Javascript dan tentu saja tidak ada yang mengatakan apa-apa karena itu sintaksis hukum yang sering digunakan untuk objek jQuery.

Apakah ada alat debugging atau trik dev untuk menangkap kebingungan tanda dolar ini? Apakah Anda sering melakukan kesalahan yang sama, dan bagaimana Anda menghadapinya secara emosional? Alat dev Chrome tidak selalu melihat ini adalah kesalahan Javascript. Saya menggunakan PhpStorm dan Emacs untuk pengembangan, tetapi mereka tidak menangkap kebodohan saya, meskipun saya menduga Emacs tetapi memilih untuk tidak memberi tahu saya tentang hal itu karena dendam.

Jika Anda pikir pertanyaan ini konyol, saya pikir Anda benar. Tapi kita hidup di dunia di mana variabel memiliki tanda dolar di depannya. Di dunia seperti itu, tidak ada yang konyol.

Alan Turing
sumber
2
Secara emosional? Hanya menyerang rekan-rekan Anda.
Chris Schiffhauer
@ChrisSchiffhauer Sayangnya saya bekerja di dunia akademis di mana isolasi lengkap dan mengucapkan adalah nama permainan. Saya harus menjadwalkan pertemuan dengan seorang kolega agar bisa bertahan, dan itu akan menghilangkan spontanitas dari semuanya.
Alan Turing

Jawaban:

11

Tidak ada yang salah dalam menggunakan $variabel. Saya tidak akan sengaja melakukannya pada setiap variabel, tapi itu masih sintaks yang valid. jQuery adalah salah satu contoh di mana $digunakan sebagai nama variabel. Itu juga mengapa "Alat dev Chrome tidak selalu melihat ini adalah kesalahan Javascript" , karena tidak ada kesalahan di tempat pertama.

Jika Anda takut menulis kode seperti:

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

maka Anda harus menggunakan pemeriksa gaya, seperti jsLint , jsHint atau Google Closure Linter . Yang mana dari mereka? Terserah Anda untuk membuat pilihan. Untuk membantu Anda dengan itu, berikut adalah beberapa catatan:

Gaya

Google Closure Linter mengikuti Panduan Gaya JavaScript Google , yang diketahui dilakukan dengan cerdik. Menggunakan gaya yang terkenal untuk JavaScript atau salah satu dari enam bahasa lainnya adalah ide yang bagus: ketika Anda membagikan kode Anda atau menyewa pengembang baru, kemungkinan mereka sudah terbiasa dengan gaya ini.

Banyak pengembang yang akrab dengan gaya Douglas Crockford juga. Gaya ini dijelaskan secara terperinci dalam JavaScript: The Good Parts , sebuah buku yang layak dibeli oleh siapa saja yang bekerja dengan JavaScript.

Adapun jsHint, saya tidak bisa menemukan konvensi apa yang digunakan, dan situs web itu sendiri tampaknya tidak membicarakan masalah itu. Mungkin saya melewatkan sesuatu.

Didukung oleh IDE

Baik jsLint dan jsHint didukung oleh PhpStorm. Ini juga merupakan kasus Google Closure Linter.

Lingkungan Hidup

Google Closure Linter adalah salah satu dari serangkaian alat . Jika Anda sudah menggunakan Google Closure Compiler atau Google Closure Library , akan lebih baik untuk memilih Cluster Linter di atas alat lainnya.

Kekerasan

jsLint dikenal ketat. jsHint lebih permisif, yang tidak selalu merupakan hal yang baik. Misalnya, salah satu alasan untuk memotong jsLint untuk jsHint dijelaskan dalam artikel yang menunjukkan kode buruk yang akan menghasilkan kesalahan di jsLint, tetapi tidak di 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;
    }

    /* ... */
});

Kodenya jelek, karena sepertinya JavaScript memiliki ruang lingkup blok, sedangkan belum. Lihat JavaScript: The Good Parts, hlm. 102, Lampiran A: Bagian Yang Mengerikan, Cakupan. Dengan kata lain, melihat kode tanpa mengetahui bahasa, kami berharap nametidak terlihat di luar loop, sementara itu akan tetap terlihat.

Sedangkan untuk Google Closure Linter, saya percaya itu ada di tengah-tengah antara jsLint dan jsHint, tetapi saya tidak memiliki cukup informasi untuk mendukungnya.

Kesimpulan

Saya akan menghindari jsHint: terlalu permisif, artinya tidak akan menemukan bug potensial yang akan terdeteksi oleh linter lainnya. Panduan gaya yang digunakan sulit ditemukan.

Di antara jsLint dan Google Closure Linter, pilihannya tidak jelas. Keduanya ditulis oleh para ahli, keduanya mengikuti panduan gaya yang ketat, dijelaskan dengan baik sudah diikuti oleh ribuan pengembang. Gunakan keduanya untuk beberapa waktu, lalu pilih yang lebih praktis untuk Anda.

Arseni Mourzenko
sumber
+1: Kalahkan saya untuk itu. Saya mulai menjatuhkan titik koma ketika saya beralih bahasa dari F # ke C #, jadi saya bisa berbagi rasa sakit Anda;)
scrwtp
2
Hanya sebuah catatan, karena OP menggunakan PhpStorm: JSLint dan JSHint terintegrasi dan dapat diatur untuk memeriksa kode mereka sesuai permintaan atau bahkan dengan cepat. Kesalahan seperti yang ada dalam contoh Anda cukup mudah ditangkap.
yannis