Ada banyak hal sederhana yang dapat Anda lakukan untuk meningkatkan JavaScript. Berikut adalah beberapa metode yang kami gunakan untuk menulis JS yang lebih baik Show
Ryland Goldstein Kepala Produk di Temporal Dalam Survei Dev 2019 kami, kami menanyakan jenis konten apa yang ingin dilihat pengguna Stack Overflow di luar pertanyaan dan jawaban. Yang paling banyak adalah “artikel teknologi yang ditulis oleh pengembang lain. “Jadi mulai sekarang kami akan rutin menerbitkan artikel dari para kontributor. Jika Anda memiliki ide dan ingin mengirimkan penawaran, Anda dapat mengirim email ke pitches@stackoverflow. com
Gunakan TypeScriptHal nomor satu yang dapat Anda lakukan untuk meningkatkan JS Anda adalah dengan tidak menulis JS. Untuk yang belum tahu, TypeScript (TS) adalah superset JS yang "dikompilasi" (apa pun yang berjalan di JS berjalan di TS). TS menambahkan sistem pengetikan opsional yang komprehensif di atas pengalaman vanilla JS. Untuk waktu yang lama, dukungan TS di seluruh ekosistem cukup tidak konsisten sehingga saya merasa tidak nyaman untuk merekomendasikannya. Untungnya, hari-hari itu sudah lama berlalu dan sebagian besar kerangka mendukung TS di luar kotak. Sekarang kita semua berada di halaman yang sama tentang apa itu TS, mari kita bicara tentang mengapa Anda ingin menggunakannya TypeScript memberlakukan keamanan tipeKeamanan tipe menjelaskan proses di mana kompiler memverifikasi bahwa semua tipe digunakan dengan cara yang legal di seluruh bagian kode. Dengan kata lain, jika Anda membuat fungsi 8 yang menggunakan angka _Fungsi _8 itu hanya boleh dipanggil dengan nomorgood
no good
Selain biaya tambahan untuk menambahkan tipe ke kode Anda, tidak ada kerugian dari penerapan keamanan tipe. Manfaatnya di sisi lain, terlalu besar untuk diabaikan. Keamanan jenis memberikan tingkat perlindungan ekstra terhadap kesalahan/bug umum, yang merupakan berkah bagi bahasa tanpa hukum seperti JS Jenis TypeScript memungkinkan pemfaktoran ulang aplikasi yang lebih besarMemfaktorkan ulang aplikasi JS yang besar bisa menjadi mimpi buruk yang nyata. Sebagian besar rasa sakit dari refactoring JS adalah karena fakta bahwa itu tidak menerapkan tanda tangan fungsi. Ini berarti fungsi JS tidak pernah bisa disalahgunakan. Misalnya, jika saya memiliki fungsi _0 yang digunakan oleh 1000 layanan berbeda
dan saya sedikit mengubah tanda panggilan _Saya harus 100% yakin, bahwa setiap tempat di mana fungsi ini digunakan (ribuan tempat), saya memperbarui penggunaannya dengan benar. Jika saya melewatkan satu saja, kredensial saya bisa bocor. Berikut skenario yang sama dengan TS before
after good0 Seperti yang Anda lihat, fungsi 1 mengalami perubahan yang sama dengan JavaScript. Namun alih-alih menghasilkan JavaScript yang valid, kode ini menghasilkan TypeScript yang tidak valid, karena ribuan tempat yang digunakan sekarang menyediakan jenis yang salah. Dan karena keamanan jenis yang telah kita bahas sebelumnya, ribuan kasus tersebut akan memblokir kompilasi dan kredensial Anda tidak akan bocor (itu selalu menyenangkan)TypeScript membuat komunikasi arsitektur tim lebih mudahKetika TS diatur dengan benar, akan sulit untuk menulis kode tanpa terlebih dahulu menentukan antarmuka dan kelas Anda. Ini menyediakan cara untuk berbagi proposal arsitektur yang ringkas dan komunikatif. Sebelum TS, ada solusi lain untuk masalah ini, tetapi tidak ada yang menyelesaikannya secara asli tanpa membuat Anda melakukan pekerjaan ekstra. Misalnya, jika saya ingin mengusulkan tipe 2 baru untuk backend saya, saya dapat mengirimkan yang berikut ini ke rekan satu tim menggunakan TSgood1 Saya sudah harus menulis kodenya, tetapi sekarang saya dapat membagikan kemajuan tambahan saya dan mendapatkan umpan balik tanpa menginvestasikan lebih banyak waktu. Saya tidak tahu apakah TS secara inheren kurang rentan bug dibandingkan JS. Saya sangat percaya bahwa memaksa pengembang untuk mendefinisikan antarmuka dan API menghasilkan kode yang lebih baik terlebih dahulu Secara keseluruhan, TS telah berkembang menjadi alternatif yang matang dan lebih dapat diprediksi dari vanilla JS. Pengembang pasti masih harus merasa nyaman dengan vanilla JS, tetapi sebagian besar proyek baru yang saya mulai hari ini adalah TS sejak awal Gunakan Fitur ModernJavaScript adalah salah satu bahasa pemrograman paling populer (jika bukan yang paling banyak) di dunia. Anda mungkin berharap bahwa bahasa berusia 20+ tahun yang digunakan oleh ratusan juta orang sebagian besar sudah diketahui sekarang, tetapi yang terjadi justru sebaliknya. Baru-baru ini, banyak perubahan dan penambahan telah dilakukan pada JS (ya saya tahu, secara teknis ECMAScript), yang secara mendasar mengubah pengalaman pengembang. Sebagai seseorang yang baru mulai menulis JS dalam dua tahun terakhir, saya mendapat keuntungan karena masuk tanpa bias atau ekspektasi. Ini menghasilkan pilihan yang jauh lebih pragmatis tentang fitur bahasa apa yang akan digunakan dan mana yang harus dihindari function myAPI(someNum, someString) { if (someNum > 0) { leakCredentials(); } else { console.log(someString); } }3 dan function myAPI(someNum, someString) { if (someNum > 0) { leakCredentials(); } else { console.log(someString); } }4Untuk waktu yang lama, callback asinkron dan digerakkan oleh peristiwa adalah bagian yang tidak dapat dihindari dari pengembangan JS good2 good3 Saya tidak akan menghabiskan waktu untuk menjelaskan mengapa hal di atas bermasalah (tetapi saya pernah melakukannya sebelumnya). Untuk mengatasi masalah callback, konsep baru—Janji—ditambahkan ke JS. Janji memungkinkan Anda untuk menulis logika asinkron sambil menghindari masalah bersarang yang sebelumnya mengganggu kode berbasis panggilan balik good4 good5 Keuntungan terbesar Janji dibandingkan panggilan balik adalah keterbacaan dan keteraturan rantai Sementara Janji itu bagus, mereka masih meninggalkan sesuatu yang diinginkan. Bagi banyak orang, pengalaman Janji masih terlalu mirip dengan panggilan balik. Secara khusus, pengembang meminta alternatif untuk model Janji. Untuk mengatasinya, komite ECMAScript memutuskan untuk menambahkan metode baru dalam memanfaatkan promise, 3 dan 4good6 good7 Satu-satunya peringatan adalah, apa pun yang Anda 4 harus telah dinyatakan 3good8 good9 Juga dimungkinkan untuk _4 Promise secara langsung karena fungsi 3 sebenarnya hanyalah pembungkus Promise yang mewah. Ini juga berarti kode _1 dan kode Promise secara fungsional setara. Jadi jangan ragu untuk menggunakan _1 tanpa merasa bersalahfunction myAPI(someString, someNum) { if (someNum > 0) { leakCredentials(); } else { console.log(someString); } }3 dan function myAPI(someString, someNum) { if (someNum > 0) { leakCredentials(); } else { console.log(someString); } }4Untuk sebagian besar keberadaan JS, hanya ada satu kualifikasi cakupan variabel. _5. 5 memiliki beberapa aturan yang cukup unik/menarik terkait dengan cara menangani ruang lingkup. Perilaku pelingkupan _5 tidak konsisten dan membingungkan dan telah menghasilkan perilaku yang tidak terduga dan karenanya bug sepanjang masa pakai JS. Tetapi pada ES6, ada alternatif untuk 5. 4 dan 3. Praktis tidak perlu lagi menggunakan 5, jadi jangan. Logika apa pun yang menggunakan 5 selalu dapat dikonversi menjadi kode berbasis 4 dan 3 yang setaraAdapun kapan harus menggunakan 4 vs 3, saya selalu memulai dengan mendeklarasikan semuanya 4. 4 jauh lebih membatasi dan "tidak dapat diubah", yang biasanya menghasilkan kode yang lebih baik. Tidak ada satu ton "skenario nyata" di mana menggunakan 3 diperlukan, saya akan mengatakan 1/20 variabel saya nyatakan dengan 3. Sisanya semua _4Saya mengatakan _4 adalah "tidak dapat diubah" karena tidak bekerja dengan cara yang sama seperti 4 di C/C++. Apa _4 berarti waktu proses JavaScript adalah bahwa referensi ke variabel 4 itu tidak akan pernah berubah. Ini tidak berarti konten yang disimpan pada referensi tersebut tidak akan pernah berubah. Untuk tipe primitif (angka, boolean, dll. ), _4 diterjemahkan menjadi kekekalan (karena ini adalah satu alamat memori). Tapi untuk semua objek (kelas, array, dicts), 4 tidak menjamin kekekalanPanah function myAPITS(someNum: number, someString: string) { .. }_8 FungsiFungsi panah adalah metode ringkas untuk mendeklarasikan fungsi anonim di JS. Fungsi anonim mendeskripsikan fungsi yang tidak diberi nama secara eksplisit. Biasanya, fungsi anonim diteruskan sebagai callback atau event hook 0 1Sebagian besar, tidak ada yang "salah" dengan gaya ini. Fungsi anonim vanilla berperilaku "menarik" dalam hal ruang lingkup, yang dapat/telah mengakibatkan banyak bug yang tidak terduga. Kami tidak perlu khawatir tentang itu lagi berkat fungsi panah. Ini adalah kode yang sama yang diimplementasikan dengan fungsi panah _4_______3Selain jauh lebih ringkas, fungsi panah memiliki perilaku pelingkupan yang jauh lebih praktis. Fungsi panah mewarisi _9 dari cakupan tempat mereka didefinisikanDalam beberapa kasus, fungsi panah bisa lebih ringkas _4Fungsi panah yang berada pada satu baris menyertakan pernyataan after0 implisit. Tidak perlu tanda kurung atau titik koma dengan fungsi panah satu baris Saya ingin menjelaskannya. Ini bukan situasi 5; . Yang sedang berkata, saya telah menemukan bahwa jika Anda selalu default ke fungsi panah, Anda akhirnya melakukan lebih sedikit debugging dibandingkan dengan default ke fungsi anonim vanilla _5Menyebarkan Operator after2Mengekstrak pasangan kunci/nilai dari satu objek dan menambahkannya sebagai turunan dari objek lain adalah skenario yang sangat umum. Secara historis, ada beberapa cara untuk melakukannya, tetapi semua metode itu cukup kikuk _6Pola ini sangat umum, sehingga pendekatan di atas dengan cepat menjadi membosankan. Berkat operator spread, tidak perlu menggunakannya lagi _7Bagian terbaiknya adalah, ini juga berfungsi mulus dengan array _8Ini mungkin bukan fitur JS terbaru yang paling penting, tapi ini salah satu favorit saya Templat Literal (String Templat)String adalah salah satu konstruksi pemrograman yang paling umum. Inilah mengapa sangat memalukan bahwa mendeklarasikan string secara native masih kurang didukung dalam banyak bahasa. Untuk waktu yang lama, JS termasuk dalam keluarga "string jelek". Namun penambahan literal template menempatkan JS dalam kategori tersendiri. Template literal secara native dan mudah memecahkan dua masalah terbesar dengan menulis string. menambahkan konten dinamis dan menulis string yang menjembatani banyak baris _9Saya pikir kode berbicara untuk dirinya sendiri. Implementasi yang luar biasa Penghancuran ObjekPenghancuran objek adalah cara untuk mengekstraksi nilai dari kumpulan data (objek, larik, dll. ), tanpa harus mengulangi data atau mengakses kuncinya secara eksplisit no good0 no good1 perusakan no good2 Tapi tunggu, masih ada lagi. Anda juga dapat menentukan destrukturisasi dalam tanda tangan suatu fungsi no good3 no good4 Ini juga bekerja dengan array no good5 no good6 Ada banyak fitur modern lainnya yang harus Anda manfaatkan. Berikut adalah beberapa orang lain yang menonjol bagi saya
Selalu Asumsikan Sistem Anda TerdistribusiSaat menulis aplikasi paralel, tujuan Anda adalah mengoptimalkan jumlah pekerjaan yang Anda lakukan pada satu waktu. Jika Anda memiliki empat inti yang tersedia dan kode Anda hanya dapat menggunakan satu inti, 75% dari potensi Anda terbuang sia-sia. Ini berarti pemblokiran, operasi sinkron adalah musuh utama komputasi paralel. Tetapi mengingat JS adalah bahasa utas tunggal, banyak hal tidak berjalan pada banyak inti. Jadi apa gunanya? no good_7 Vanilla for-loop adalah salah satu konstruksi paling tidak paralel yang ada dalam pemrograman. Pada pekerjaan terakhir saya, saya memimpin sebuah tim yang menghabiskan waktu berbulan-bulan mencoba mengubah after3 lang for-loop tradisional menjadi kode paralel otomatis. Ini pada dasarnya adalah masalah yang tidak mungkin, hanya dapat dipecahkan dengan menunggu pembelajaran mendalam untuk meningkat. Kesulitan memparalelkan for-loop berasal dari beberapa pola yang bermasalah. For-loop berurutan sangat jarang, tetapi mereka sendiri tidak memungkinkan untuk menjamin dekomposisi for-loop no good_8 Kode ini hanya menghasilkan hasil yang diinginkan jika dijalankan secara berurutan, iterasi demi iterasi. Jika Anda mencoba menjalankan beberapa iterasi sekaligus, prosesor mungkin salah bercabang berdasarkan nilai yang tidak akurat, yang membuat hasilnya tidak valid. Kami akan melakukan percakapan yang berbeda jika ini adalah kode C, karena penggunaannya berbeda dan ada beberapa trik yang dapat dilakukan kompiler dengan loop. Dalam JavaScript, for-loop tradisional hanya boleh digunakan jika benar-benar diperlukan. Jika tidak, gunakan konstruksi berikut
no good_9 peta dengan indeks 0untuk setiap _1Saya akan menjelaskan mengapa ini merupakan peningkatan dari for-loop tradisional. Alih-alih menjalankan setiap iterasi secara berurutan (berurutan), konstruksi seperti after4 mengambil semua elemen dan mengirimkannya sebagai peristiwa individual ke fungsi peta yang ditentukan pengguna. Sebagian besar, iterasi individu tidak memiliki koneksi atau ketergantungan yang melekat satu sama lain, yang memungkinkan mereka untuk berjalan secara bersamaan. Ini bukan untuk mengatakan bahwa Anda tidak dapat mencapai hal yang sama dengan for-loop. Bahkan, itu akan terlihat seperti ini _2Seperti yang Anda lihat, for-loop tidak mencegah saya melakukannya dengan cara yang benar, tetapi tentu saja juga tidak membuatnya lebih mudah. Bandingkan dengan versi peta _3Seperti yang Anda lihat, after_4 baru saja berfungsi. Keuntungan peta menjadi lebih jelas jika Anda ingin memblokir hingga semua operasi asinkron individual selesai. Dengan kode for-loop, Anda perlu mengatur sendiri sebuah array. Inilah versi after_4 4 5Ada banyak kasus di mana for-loop akan sama berkinerjanya (atau mungkin lebih) dibandingkan dengan after4 atau after8. Saya masih berpendapat bahwa kehilangan beberapa siklus sekarang sepadan dengan keuntungan menggunakan API yang terdefinisi dengan baik. Dengan begitu, perbaikan apa pun di masa mendatang pada penerapan pola akses data tersebut akan menguntungkan kode Anda. for-loop terlalu umum untuk memiliki pengoptimalan yang berarti untuk pola yang sama Ada opsi asinkron valid lainnya di luar after4 dan after8, seperti good01 Lint Kode Anda dan Terapkan GayaKode tanpa gaya yang konsisten (tampilan dan nuansa) sangat sulit untuk dibaca dan dipahami. Oleh karena itu, aspek penting dalam penulisan kode kelas atas dalam bahasa apa pun adalah memiliki gaya yang konsisten dan masuk akal. Karena luasnya ekosistem JS, ada BANYAK pilihan untuk linter dan spesifikasi gaya. Apa yang saya tidak bisa cukup tekankan adalah bahwa jauh lebih penting bahwa Anda menggunakan linter dan menerapkan gaya (salah satunya) daripada linter/gaya mana yang Anda pilih secara khusus. Pada akhirnya, tidak ada yang akan menulis kode persis seperti yang saya inginkan, jadi mengoptimalkannya adalah tujuan yang tidak realistis _6Seharusnya cukup jelas bagaimana eslint menambah nilai pada siklus pengembangan Anda. Intinya, ini memastikan Anda mengikuti aturan tentang praktik yang baik dan tidak. Karena itu, linter secara inheren berpendirian. Seperti semua pendapat, ambillah dengan sebutir garam. Linter bisa salah 5, tetapi secara otomatis akan menyelaraskan semua tanda kurung dalam kode Anda. Dalam proses pengembangan pribadi saya, saya selalu menjalankan lebih cantik sebagai langkah terakhir sebelum memasukkan kode ke Git. Dalam banyak kasus, masuk akal untuk menjalankan Prettier secara otomatis pada setiap komit ke repo. Ini memastikan bahwa semua kode yang masuk ke kontrol sumber memiliki gaya dan struktur yang konsistenUji Kode AndaTes penulisan adalah metode tidak langsung namun sangat efektif untuk meningkatkan kode JS yang Anda tulis. Saya merekomendasikan untuk membiasakan diri dengan beragam alat pengujian. Kebutuhan pengujian Anda akan bervariasi, dan tidak ada alat tunggal yang dapat menangani semuanya. Ada banyak sekali alat pengujian yang mapan di ekosistem JS, jadi memilih alat sebagian besar bergantung pada selera pribadi. Seperti biasa, pikirkan sendiri Bagaimana saya bisa memvalidasi kata sandi dalam JavaScript?Konfirmasi validasi kata sandi dalam JavaScript . Kata sandi harus berupa alfanumerik Huruf pertama kata sandi harus kapital Kata sandi harus mengandung karakter khusus (@, $,. , &, dll) Panjang kata sandi harus lebih dari 8 karakter Salah satu yang paling penting adalah bidang kata sandi tidak boleh kosong Apa itu Validator () dalam JavaScript?Validasi adalah metode untuk mengautentikasi pengguna . JavaScript menyediakan fasilitas untuk memvalidasi form di sisi klien sehingga pemrosesan data akan lebih cepat daripada validasi di sisi server. Ini disukai oleh sebagian besar pengembang web.
Bagaimana Anda mengonfirmasi kata sandi dalam HTML?Apa itu validasi kata sandi?Validasi kata sandi dalam JavaScript adalah proses untuk menentukan apakah kata sandi yang dimasukkan oleh pengguna valid atau tidak . Ini dapat dilakukan dengan berbagai cara, tetapi cara yang paling umum adalah memeriksa apakah kata sandi yang dimasukkan oleh pengguna cocok dengan kriteria yang ditetapkan oleh sistem. |