1 September 2021

Metode primitif

Javascript memperbolehkan kita untuk bekerja dengan primitif (string, angka, dan lain-lain.) seperti jika mereka adalah objek. Mereka juga menyediakan metode untuk dipanggil. Kita akan belajar tentang hal itu nanti, tapi pertama kita akan melihat bagaimana hal itu bekerja, dan juga, primitif bukanlah objek (dan disini kita akan membuat hal itu lebih jelas).

Ayo kita lihat pada kunci perbedaan diantara primitif dan objek.

Primitif

  • Adalah sebuah nilai dari tipe primitif.
  • Ada 7 primitif tipe: string, number, bigint, boolean, symbol, null dan undefined.

Objek

  • Mampu untuk menyimpan banyak nilai sebagai properti.
  • Bisa dibuat dengan menggunakan {}, contoh: {name: "John", age: 30}. Terdapat beberapa macam objek di Javascript: untuk contoh, fungsi, adalah objek.

Salah satu hal yang terbaik tentang objek adalah kita bisa menyimpan fungsi sebagai salah satu dari propertinya.

let john = {
  name: "John",
  sayHi: function() {
    alert("Hi buddy!");
  }
};

john.sayHi(); // Hi buddy!

Jadi disini kita membuat sebuah objek john dengan method sayHi.

Ada juga built-in objek yang tersedia, seperti objek yang bekerja dengan tanggal, error, elemen HTML, dll. Mereka mempunyai properti dan method yang berbeda-beda.

Tapi, fitur ini ada dengan efek samping.

Objek lebih “berat” dari primitif. Dan mereka membutuhkan sumber daya tambahan untuk mendukung pekerjaannya.

Sebuah primitif sebagai sebuah objek

Ini adalah paradoks yang dihadapi dari pencipta Javascript:

  • Terdapat banyak hal yang harus dilakukan dengan primitif seperti string atau angka. Akan menjadi lebih baik jika mereka bisa diakses sebagai method.
  • Primitives must be as fast and lightweight as possible.
  • Sebisa mungkin primitif haruslah cepat dan ringan.

Solusinya terlihat sedikit aneh, tapi inilah solusinya:

  1. Primitif masih tetap primitif. Sebuah nilai tunggal, seperti yang diinginkan.
  2. Bahasanya membolehkan untuk mengakses method dan properti dari string, number, boolean dan symbols.
  3. Untuk membuat itu bekerja, “objek pembungkus” spesial yang menyediakan fungsionalitas tambahan dibuat, dan lalu dihancurkan.

“Objek pembungkus” berbeda untuk setiap tipe primitif dan dipanggil: String, Number, Boolean dan Symbol. Lalu, mereka menyediakan metode-metode yang berbeda.

Contoh, ada methode string str.toUpperCase() yang mengembalikan string str yang telah diubah menjadi huruf kapital.

Beginilah caranya itu bekerja:

let str = "Hello";

alert( str.toUpperCase() ); // HELLO

Simpel, kan? Inilah sebenarnya yang terjadi didalam str.toUpperCase():

  1. String str adalah sebuah primitif. Jadi sementara waktu untuk mengakses propertinya, sebuah objek spesial yang tahu tentang nilai dari string dibuat, dan memiliki metode yang berguna, seperti toUpperCase().
  2. Metode itu menjalankan dan mengembalikan string baru (ditampilkan oleh alert).
  3. Objek spesial itu lalu dihancurkan, meninggalkan str primitif.

Jadi primitif bisa menyediakan metode, tapi mereka akan tetap ringan.

Mesin Javascript sangat mengoptimasi proses ini. Ini mungkin akan melewatkan pembuatan dari objek tambahan itu. Tapi itu masih melekat pada spesifikasinya dan bertingkah seperti jika itu memang diciptakan.

Sebuah angka mempunyai metodenya sendiri, contoh toFixed(n) membulatkan angka kedalam presisi yang diberikan:

let n = 1.23456;

alert( n.toFixed(2) ); // 1.23

Kita akan melihat metode spesifik lainnya di bab Angka dan String.

Konstruktor String/Number/Boolean hanya digunakan untuk kebutuhan internal

Beberapa bahasa seperti Java membolehkan kita untuk secara jelas membuat “objek pembungkus” untuk primitif menggunakan sintaks seperti new Number(1) atau new Boolean(false).

Didalam javascript, hal itu bisa dilakukan untuk beberapa alasan, tapi sangat tidak direkomendasikan. Beberapa hal akan menjadi rumit di beberapa tempat.

Contoh: