Biarkan vs const - apa yang harus digunakan?

Halo, Habr! Saya mempersembahkan untuk Anda terjemahan artikel "On let vs const" oleh Dan Abramov .

Posting saya sebelumnya berisi paragraf ini:

let vs const vs var : Biasanya, yang Anda butuhkan adalah membiarkan . Jika Anda perlu mencegah penulisan ulang variabel, Anda bisa menggunakan const . (Beberapa sangat pedantic tentang hal ini dan lebih suka menggunakan const ketika hanya ada satu tugas variabel).

Pernyataan ini ternyata sangat kontroversial, di Twitter'e dan Reddit'e segera mulai diskusi panas tentang ini. Tampaknya pendapat yang paling populer (atau paling tidak diungkapkan secara lisan oleh mayoritas) adalah bahwa Anda harus selalu menggunakan const dan merujuk untuk membiarkan hanya jika perlu, yang dapat diberikan oleh aturan const-const ESLint.

Dalam posting ini, saya akan mendaftar secara singkat semua pro dan kontra yang saya temui dan mengungkapkan pendapat pribadi saya tentang masalah ini.

Mengapa memilih const


  • Aturan yang jelas: Ini adalah beban tambahan bagi otak ketika Anda harus berpikir setiap kali apakah menggunakan const atau membiarkan lebih baik. Aturan "Selalu gunakan const tempat kerjanya" membebaskan Anda dari kerumitan yang tidak perlu dan meninggalkan tugas ini kepada linter.
  • Penugasan kembali dapat menyebabkan bug: Dalam fungsi yang besar, Anda mungkin tidak melihat jika suatu variabel dipindahkan, dan ini bisa menjadi penyebab bug. Terutama di penutupan. Const memberi Anda jaminan bahwa Anda akan selalu melihat nilai yang sama.
  • Memahami mutasi: Mereka yang baru mulai belajar JavaScript dapat salah memahami prinsip const , berpikir bahwa itu mencegah mutasi variabel. Penting untuk memahami perbedaan antara bermutasi suatu variabel dan penugasannya kembali. Menggunakan const memaksa Anda untuk memahami dan menghadapi perbedaan ini sejak awal.
  • Penugasan ulang yang tidak berarti: Kadang-kadang menugaskan kembali suatu variabel tidak masuk akal sama sekali. Misalnya, dalam React Hooks, nilai yang Anda dapatkan dari hook - seperti useState - lebih mirip parameter. Mereka menuju ke arah yang sama. Melihat kesalahan dalam penugasan mereka, Anda akan segera belajar tentang aliran data Bereaksi.
  • Keuntungan eksekusi: Ada juga klaim langka bahwa mesin JavaScript dapat mengeksekusi kode lebih cepat di mana const digunakan, karena ia tahu bahwa suatu variabel tidak dapat ditimpa.

Mengapa tidak suka const


  • Const kehilangan artinya: Jika kita menggunakan const di mana-mana, kita akan kehilangan kemampuan untuk memahami apakah penting bahwa sesuatu tidak dipindahkan.
  • Rasa malu dengan kekebalan: Dalam setiap diskusi di mana mereka mengatakan bahwa Anda harus selalu menggunakan const , ada orang-orang yang bingung tentang masalah kekebalan. Ini tidak mengejutkan karena kedua operasi (deklarasi dan penugasan kembali) menggunakan operator "=" yang sama. Menanggapi hal ini, mereka biasanya mengatakan bahwa Anda hanya perlu "belajar bahasa." Namun, bantahannya sedemikian rupa sehingga jika metode ini, yang mencegah kesalahan pemula, membingungkan pemula ini, maka ini tidak begitu berguna. Dan, sayangnya, ini tidak membantu mencegah kesalahan mutasi yang meluas ke modul dan mempengaruhi semuanya.
  • Tekanan untuk menghindari deklarasi berlebihan: Para pendukung metode "const-first" memaksa pengembang untuk tidak menggunakan variabel yang dideklarasikan dalam kondisi tersebut. Misalnya, Anda bisa menulis
    const a = cond ? b : c 
    alih-alih kondisi jika , bahkan jika kedua cabang b dan c (objek) kompleks dan memberi mereka nama rinci sulit.
  • Penugasan kembali tidak dapat menjadi penyebab bug: Ada tiga komponen utama ketika penugasan kembali dapat menjadi penyebab bug: cakupannya terlalu besar (sebagai fungsi modular atau besar), ketika nilainya adalah parameter (karena tidak diharapkan bahwa ini akan sama dengan hal lain dari apa yang dilewatkan), dan ketika variabel digunakan dalam fungsi bersarang. Namun, dalam banyak situasi, sebagian besar variabel tidak sesuai dengan semua kasus ini, dan parameternya tidak dapat ditetapkan sebagai konstanta sama sekali.
  • Tidak ada keunggulan kinerja: Menurut saya mesin sudah diperingatkan - variabel mana yang dideklarasikan sekali, bahkan jika Anda menggunakan var atau biarkan . Jika kita terus berpendapat bahwa const membuat kode lebih produktif, maka kita bisa juga berpendapat bahwa pemeriksaan tambahan dapat meningkatkan waktu eksekusi daripada menguranginya. Serius, mesinnya lebih pintar.

Pendapat saya


Saya tidak peduli.

Saya dapat menggunakan aturan apa pun yang digunakan orang lain.

Jika Anda peduli, gunakan linter, yang mengotomatiskan verifikasi dan koreksi, mengubah let to const , sehingga tidak akan membuang waktu Anda dalam ulasan kode yang akan datang.

Terakhir, ingat bahwa linter dirancang untuk membuat pengembangan lebih mudah. Jika ada aturan yang mengganggu Anda atau tim Anda, hapus saja. Itu akan menjadi yang terbaik. Belajarlah dari kesalahan Anda.

Tautan ke artikel asli - Di biarkan vs const .

Source: https://habr.com/ru/post/id482892/


All Articles