Mengapa kelas penting dalam javascript?

Selama bertahun-tahun, OOP (pemrograman berorientasi objek) adalah standar de-facto dalam rekayasa perangkat lunak. Konsep kelas, polimorfisme, pewarisan, dan inkapsulasi mendominasi dan merevolusi proses pembangunan. Tapi semuanya memiliki tanggal kedaluwarsa, termasuk paradigma pemrograman. Pada artikel ini saya akan berbicara tentang mengapa kelas diperkenalkan pertama kali, mengapa menggunakan kelas dalam JavaScript adalah ide yang buruk, dan apa saja alternatifnya

Saya tidak akan berbicara tentang mengapa OOP memudar secara umum, tetapi Anda dapat melihat artikel bagus ini untuk info lebih lanjut

Kelas pra-ES6

Meskipun kata kunci class ditambahkan ke JavaScript sejak ES6 (ECMAScript 2015), orang menggunakan class lebih awal. Cara untuk mencapai ini adalah fungsi konstruktor dan delegasi prototipe. Untuk menunjukkan dengan tepat apa yang saya maksud, saya akan mengimplementasikan kelas yang sama di lingkungan ES5 dan ES6. Pertimbangkan kelas Car dan SportsCar yang mewarisi Car. Keduanya memiliki properti make dan model dan metode start, tetapi SportsCar juga memiliki properti turbocharged dan mengganti metode start

Seperti yang mungkin Anda duga, fungsi Car_ (baris 2) dan SportsCar (baris 18) adalah fungsi konstruktor. Properti didefinisikan menggunakan kata kunci SportsCar_1 dan objek itu sendiri dibuat dengan SportsCar2. Jika Anda tidak terbiasa dengan SportsCar_3, ini adalah properti khusus yang dimiliki setiap objek JS untuk mendelegasikan perilaku umum. Misalnya, prototipe untuk objek array memiliki fungsi yang mungkin sudah Anda ketahui dengan baik. SportsCar4, SportsCar5, SportsCar6, dll. Prototipe untuk string memiliki fungsi SportsCar_7, SportsCar8, dll

Setelah objek Mobil dibuat pada baris 33, Anda dapat mengakses properti dan metodenya. Panggilan untuk memulai pada saluran 34 menghasilkan tindakan berikut

  1. Mesin JS meminta nilai objek SportsCar_9 dengan kunci start
  2. Objek menjawab bahwa ia tidak memiliki nilai seperti itu
  3. Mesin JS meminta nilai objek Car_1 dengan kunci start
  4. Car_1 mengembalikan fungsi start, yang dijalankan oleh mesin JS segera

Mengakses properti make dan model dilakukan dengan cara yang sama, kecuali keduanya ditentukan pada objek mobil secara langsung, bukan pada prototipe

Warisan sedikit lebih rumit. Itu ditangani pada baris 24-25. Fungsi terpenting di sini adalah fungsi Car5. Itu menerima objek dan mengembalikan yang baru, dengan prototipe diatur ke apa pun yang diteruskan sebagai argumen. Sekarang, jika mesin JS tidak menemukan nilai pada objek Car6 atau Car7, itu akan berkonsultasi dengan Car8 yang merupakan prototipe dari objek Car

Kata kunci Kelas ES6

Dengan dirilisnya ES6 pada tahun 2015, kata kunci make0 yang telah lama ditunggu-tunggu tiba di JavaScript. Itu dilakukan sesuai banyak permintaan oleh komunitas karena orang merasa tidak nyaman datang dari bahasa berorientasi objek. Tapi mereka melewatkan satu poin penting

JavaScript tidak tahu apa itu kelas

JavaScript bukan bahasa berorientasi objek, itu tidak dirancang untuk menjadi satu, gagasan kelas sama sekali tidak berlaku untuk itu. Meskipun semua yang ada di JS memang sebuah objek, objek-objek ini berbeda dari yang ada di Java atau C#. Di JS, sebuah objek hanyalah struktur data Peta dengan prosedur pencarian yang agak canggih. Itu dia, sungguh. Dan ketika saya mengatakan semuanya adalah objek, saya bersungguh-sungguh. bahkan fungsi adalah objek. Anda dapat memeriksanya dengan cuplikan ini

Oke, ini semua bagus, tetapi bagaimana cara kerja kata kunci make0? . Apakah Anda ingat contoh Car dan SportsCar sebelumnya? . Dengan kata lain, kelas secara konseptual menghasilkan kode yang sama dan hanya melayani tujuan estetika dan keterbacaan. Seperti yang saya janjikan sebelumnya, berikut adalah contoh kelas yang sama di ES6

Contoh-contoh ini identik dan menghasilkan hasil yang sama. Yang menarik, mereka menghasilkan (hampir) kode yang sama di bawah tenda. Saya tidak akan menuliskannya di sini, tetapi jika Anda penasaran, pergilah ke dan lihat hasilnya

Kenapa tidak?

Sekarang Anda harus memiliki pemahaman tentang apa itu kelas di JS dan bagaimana cara kerjanya. Sekarang, dengan semua pengetahuan ini, saya bisa menjelaskan mengapa menggunakan kelas di JS adalah ide yang buruk

  1. Isu yang mengikat. Karena fungsi konstruktor kelas berhubungan erat dengan kata kunci SportsCar1, ini dapat menimbulkan potensi masalah yang mengikat, terutama jika Anda mencoba meneruskan metode kelas Anda sebagai panggilan balik ke rutin eksternal (halo, React devs 👋)
  2. Masalah kinerja. Karena penerapan kelas, mereka terkenal sulit untuk dioptimalkan pada waktu proses. Sementara kita menikmati mesin yang berkinerja tinggi saat ini, fakta bahwa hukum Moore memudar dapat mengubah semua itu
  3. Variabel pribadi. Salah satu keuntungan besar dan alasan utama kelas di tempat pertama, variabel pribadi, tidak ada di JS
  4. Hirarki yang ketat. Kelas memperkenalkan urutan langsung dari atas ke bawah dan membuat perubahan lebih sulit untuk diterapkan, yang tidak dapat diterima di sebagian besar aplikasi JS
  5. Karena tim Bereaksi memberi tahu Anda untuk tidak melakukannya. Meskipun mereka tidak secara eksplisit menolak komponen berbasis kelas, kemungkinan besar mereka akan melakukannya dalam waktu dekat

Semua masalah ini dapat dikurangi dengan objek JS dan delegasi prototipe. JS menawarkan jauh lebih banyak hal yang dapat dilakukan kelas, namun sebagian besar pengembang tidak mengetahuinya. Jika Anda ingin benar-benar menguasai JS, Anda perlu merangkul filosofinya dan menjauh dari pemikiran berbasis kelas yang dogmatis

Apakah kelas diperlukan dalam JavaScript?

Dalam JavaScript, Anda tidak . Anda dapat menulis program apa pun yang Anda inginkan tanpa menggunakan kelas atau kata kunci this ever. Memang, sintaks kelas agak baru untuk JavaScript, dan kode berorientasi objek ditulis dengan fungsi sebelumnya. Sintaks kelas hanyalah gula sintaksis di atas pendekatan berbasis fungsi untuk OOP.

Mengapa kita harus menggunakan kelas?

Kelas diperlukan dalam OOP karena. Menyediakan template untuk membuat objek, yang dapat mengikat kode ke dalam data . Ini memiliki definisi metode dan data. Ini mendukung properti warisan dari Pemrograman Berorientasi Objek dan karenanya dapat mempertahankan hierarki kelas.

Mengapa kita menggunakan kelas dalam pengkodean?

Kelas digunakan untuk membuat dan mengelola objek baru dan mendukung pewarisan —bahan utama dalam pemrograman berorientasi objek dan mekanisme penggunaan kembali kode.

Apa tujuan utama kelas dan objek?

sebuah objek adalah elemen (atau turunan) dari sebuah kelas; . Objek adalah komponen sebenarnya dari program, sedangkan kelas menentukan bagaimana instance dibuat dan bagaimana perilakunya .