Lompat ke konten utama
EP 78

Ngobrolin OOP di JS

Ringkasan Episode

Bantu Koreksi

Episode ini membahas Object-Oriented Programming (OOP) di JavaScript secara mendalam, dimulai dari konsep dasar prototype, class, inheritance, hingga perbedaan antara paradigma OOP dan fungsional. Host Ivan yang sedang berada di Yunani dan pembicara lain membahas artikel dari Kensho.dot yang membandingkan penggunaan class dan function, termasuk kelebihan dan kekurangan masing-masing pendekatan. Diskusi juga menyentuh tantangan JavaScript yang sering disalahartikan karena sejarahnya yang dibuat dalam waktu singkat (10 hari) oleh Brendan Eich untuk keperluan sederhana di browser, namun kemudian berkembang menjadi bahasa yang digunakan di berbagai platform. Topik lain yang dibahas meliputi masalah `this` context yang sering membingungkan developer, penggunaan private properties dengan hashtag syntax, module pattern, serta perbandingan performa antara penggunaan class dan object literal. Episode ini juga menyinggung tentang masa depan JavaScript dan bahasa-bahasa yang meng-compile ke JavaScript seperti TypeScript, ReScript, dan PureScript, serta tantangan backward compatibility yang harus dipertahankan oleh JavaScript karena digunakan di berbagai browser.

Poin-poin Utama

  • JavaScript awalnya diciptakan oleh Brendan Eich dengan pengaruh bahasa Scheme (functional programming), namun dipaksa meniru sintaks Java untuk kepentingan marketing Netscape
  • JavaScript itu multi-paradigma - bisa functional, OOP, atau prosedural, bukan murni OOP seperti Java
  • OOP di JavaScript itu prototype-based, bukan class-based seperti Java atau C++
  • Sebelum ES6 (2015), JavaScript belum memiliki keyword `class` - orang membuat kelas menggunakan function dan prototype
  • Keyword `class` di ES6 sebenarnya hanya syntactic sugar - di belakang layar tetap menggunakan prototype-based approach
  • Masalah umum di JavaScript OOP adalah penggunaan `this` yang konteksnya bisa berubah tergantung bagaimana fungsi dipanggil
  • JavaScript banyak memiliki keanehan karena harus menjaga backward compatibility - kode JavaScript zaman dulu harus tetap bisa jalan di browser modern

(musik)

Minal Aydin, molpa Aydin, mohon maaf, terima kasih.

Minal Aydin, molpa Aydin.

Wah, kita kembali lagi.

Live lagi.

Di jam 8, live lagi.

Jamnya kembali ke jam 8.

Jam 4.

Jam 4, hebat.

Wah, ini Ivan lagi di kampung ya?

Iya.

Di mana kondisi kampung di sana?

Sepi.

Oh, sepi ya?

Aduh, enak sekali.

Boleh dong, boleh dong di-spill.

Ini kampungnya dimana nih?

Ini lagi dimana, lagi dimana?

Ini lagi di...

Lagi di...

Lagi di Eretria.

Lagi di ini ya? Lagi di apa namanya?

Labuan baju bukan?

Labuan baju gelap.

Ini lokasinya lagi di...

Yang masih jam 4 lah.

Eretria.

Ini lagi di Eretria.

Lagi di Yunani.

Greece.

Lihat transkrip lengkap (2444 segmen lagi)

Oh, wow, jauh sekali.

Jam 4 sore.

Ini ya, mengunjungi kakek ya?

Kakek Zeus.

Sebenarnya mau ketemu sama Tante Athena sih.

Athena.

Iya, silahatulah ketemu sama Tante Athena.

Oh, kalau di sana...

Eh, sebelum ke Athena kan sempat ke Turki ya?

Iya, sebelumnya sempat ke Turki.

Suruh banget tuh di Turki.

Berasa enggak?

Ramadhan sama lebarannya berasa enggak sih?

Berasa banget, berasa enggak.

Karena pas kita di sana tuh di...

Kena Ilulwitri kan.

Kena hari rayatnya gitu ya.

Ya, pas ya.

Kita...

Dan gue...

Maksudnya sengaja mengunjungi...

Blue Mosque.

Hagia Sophia.

Hagia Sophia itu Blue Mosque ya.

Itu...

Lagi jam solatnya tuh kelihatan banget tuh semua.

Penuh tuh, Hagia Sophia nya.

Dipakai buat solat, jadi kita gak bisa masuk.

Jadi habis solat...

Oke.

Ya, lame banget.

Itu...

Sempat gue video...

Video callan sama istri.

Dia...

Komen yang pertama kali di situ...

Style bajunya hetero banget ya.

Maksudnya...

Jomplong banget.

Ada yang...

Style Eropa.

Ada yang style...

Style Asia.

Asia.

Ada yang style...

Mediteran.

Mediteran.

Jadi kayak semuanya...

Misalnya kalau dibilang...

Kalau...

Jogja itu kan kota belajar...

Kayak kita bisa ketemu...

Ketemu orang dari seluruh...

Indonesia itu ada di Jogja.

Biasanya.

Ya.

Ya, kalau kita ke Istanbul...

Itu serasa kita lagi kayak...

Berpunjung, misalnya itu...

Kayak seluruh orang di dunia itu...

Ada di tal.

Berdahan dunia ya.

Lakin emang grafiknya kan...

Emang bener juga kan.

Apa?

Secara geografis emang ya.

Di Turki mereka menyebutnya...

Half of the world.

Karena mereka...

Batas...

Eropa.

Asia.

Afrika.

Mediteran.

Semuanya ada di situ.

Ya.

Mereka itu sebenarnya...

Secara geografis kan lebih...

Ke Asia kan.

Tapi mereka nggak mau kan.

Mereka maunya Eropa kan.

Mereka ikut...

Itu bolanya ikut Eropa ya.

Karena...

Secara ekonomi...

Mungkin mereka lebih terangka...

Ya.

Mereka mengatakan Eropa.

EU.

Masuk EU juga kan.

Makanannya apa?

Berarti iya.

Makanan lebarannya.

Makanannya yang bikin.

Nastar.

Yang jelas...

Tidak ada ketupat.

Tidak ada ketupat.

Gak ada ketupat.

Apa di sana?

Baklava.

Baklava.

Basterinya kan.

Baklava.

Baklava.

Enak banget.

Kalau hal hidupnya...

Sempat nyobain itu enggak?

Ice cream yang dibalik-balik itu.

Oh.

Sempat.

Cuma...

Waktu gue belinya...

Gue bilang...

Gue nggak mau dimain-mainin.

Iya.

Nggak mau dimain-main.

Kan justru itu.

Ice creamnya.

Jadi ciri khasnya.

Iya.

Tapi kan...

Kesel ya.

Masih sudah bayar.

Masih dimain-mainin.

Gitu.

Gini.

Kalau anak-anak boleh lah.

Itu kan kayak nge-bully ya.

Iya.

Udah pengen.

Terus tiba-tiba gitu.

Akhirnya ada yang kesel.

Nggak mau lagi.

Jadi trauma sama ice cream gitu ya.

Kasian banget.

Ngambek sama abang ice creamnya.

Ngambek.

Iya.

Iya, iya, iya.

Anyway.

Sempat belajar unit testing juga.

Kayak ke Istanbul.

Istanbul, iya.

Code coverage ya.

Kalau pakainya si Ed, nggak bisa ya.

Pakainya si Ed.

Di Istanbul ditolak.

Maaf, Mas.

Nggak boleh masuk.

Iya, iya, iya.

Tadinya kan kita mau bawain materi itu kan.

Tentang code coverage kan.

Ternyata Ivan udah nggak disambung lagi.

Tapi Ivan nggak di mana.

Topiknya dikit banget.

Garing lagi.

Kita mau istimewa banget.

Kita garing.

Kita memang garing.

Anyway, kita lagi ngobrol-ngobrol santai aja ya.

Catch up dengan habis liburannya.

Teman-teman udah pada aktivitas lagi belum ya?

Hari ini pertama atau kemarin?

Mulai kemarin kali ya.

PNS udah pada masuk belum sih sekarang?

Udah pada masuk, iya.

Udah baru masuk, iya.

Atau ada yang masih di kampung halaman?

Ada yang masih di kampung halaman?

Mungkin boleh.

Komen-komen.

Awas extendednya jangan lama-lama.

Nanti dipermanentikah.

Atau mungkin udah wefa dari kampung gitu.

Enak ya.

Itu bisa.

Atau ada yang ini ya harus balik karena baru pindah.

Terjabat macet.

Asyik.

Asyik.

Hari pertama.

Hari pertama masa tengah bulan nggak mungkin ya?

Mungkin aja.

Di perorakan.

On-board.

Atau ke Ivan.

Ini lagi, ini sebenarnya bukan jalan-jalan kan.

Kampanye retreat kan ya.

Sebetulnya kerja berkedok jalan-jalan.

Atau sebaliknya jalan-jalan berkedok kerja.

Sebenarnya di depannya kerja 100%.

Perus kerja remote ya.

Perus kerja remote ya.

Karena di sini.

Di sini kerjanya lebih intens.

Karena ketemu langsung.

Lebih intens.

Iya karena ketemu langsung.

Bahkan kita kemarin tuh set up office hour.

Kayak diskusi bersama.

Kayak handling tiket.

Terus kemudian tiketnya di diskusi.

Jadi justru ngambil tiket yang paling complicated.

Solve bareng-bareng saat itu juga.

Bahkan kayak.

Kalau ada orang infrastructure-nya.

Kan orang intranya datang juga kan.

Jadi kita tarik tangan orang intranya.

Kita punya masalah ini.

Terus.

Begini-begini.

Akhirnya kayak nyari solusi sama-sama.

Terus bikin action item-nya ramir-ramir.

Terus kemudian bikin tiketnya.

Terus.

Gak banyak hands-on tapi lebih banyak diskusi.

Langsung.

To the point.

Karena.

Kalau asynchronous work kan biasanya.

Ini ya.

Nunggu ada.

Ada synchronous time-nya kan.

Ada.

Kalau ini kan langsung tarik orang ya.

Yuk kita solve.

Gitu.

Asik.

Jadi cepet.

Itu cepet lebih.

Serasa.

Serasa.

Serasa balik.

Serasa balik ke kantor ceritanya.

WFO.

Dalam waktu singkat.

WFO.

Dan.

Pasti senang sih.

Asal dia lama-lama.

Iya.

Asal dia bermain.

Yang jarang yang bisa dilakukan.

Sehari-hari dilakukan pada saat itu ya.

Jadi.

Seru ya.

Hmm.

Oke.

Oke.

Nah.

Kok mute.

Mic-nya ke mute.

Di telepon.

Di telepon istri.

Di telepon istri.

Oke.

Oke.

Siap.

Laporan dulu ya.

Laporan.

Anyway kita malam hari ini.

Membahas.

Kita lagi dibahas code coverage.

Enggak jadi.

Kita udah sempet membahas.

Tentang.

Funksional.

Funksional.

Di Jogoscript ya.

Beberapa waktu yang lalu.

Dan di episode.

Kita malah bahas funksional dulu ya.

Iya.

Kebalik ya.

Rivalnya funksional.

Yang gak kebalik lah.

Kalau di Jogoscript.

Rival.

Apa ya.

Metode.

Metode program yang cukup populer gitu ya.

Jadi di episode ke 80 ya.

Episode kita yang ke 80 ini.

Kita bahas tentang Object Oriented Programming.

Di Jogoscript.

Karena Jogoscript ini kan multi paradigma ya.

Jadi bisa OOP.

Bisa funksional.

Bisa prosedural.

Bedanya funksional sama prosedural.

Apa ya.

Sama kan.

Kita bahas kan waktu itu.

Yang.

Apa.

Sambil live-coding di.

Dev-code.

Dev-tube console bukan sih.

Kalau.

Waktu.

Jaman.

Imperatif.

Diklaratif.

Gak.

Ada juga funksional.

Kalau di C++ funksional dan prosedural itu bedanya.

Kalau funksional pasti return value.

Kalau prosedural.

Return point.

Nah udah pasti return point.

Oh gitu side effect dan pure function.

Versus side effect.

Iya.

Hmm.

Iya.

Jadi malam hari ini kita akan bahas sisi.

Object Oriented nya.

Si Javascript.

Nah mungkin.

Tapi sebelum itu saya mau bahas dulu.

Sedikit apa ya.

Latar belakang lah.

Latar belakang.

Cerita.

Kenapa Javascript bisa.

Kok bisa.

Kok dia kayak funksional.

Funksional banget gitu ya.

Kalau kita perhatiin kok funksional banget.

Karena.

Beberapa.

Ciri khas bahasa funksional.

Ada di Javascript.

Seperti high level.

Apa.

High.

Higher order function.

First class citizen.

Funksion itu sebagai first class citizen.

Terus bisa.

Apa.

Bisa.

Tadi.

High order function.

Terus apa lagi ya.

Explicit return.

Implicit return kan.

Dia pasti ngeretern kan.

Implicit return.

Iya implicit return.

Itu juga bagian dari funksional programming.

Tapi.

Juga dari awal.

Javascript.

Udah.

Mendeklarasikan bahwa dia adalah.

OOP.

Walaupun.

OOP yang.

Mirip mirip.

OOP pada umumnya kita ketahui.

Itu baru.

Baru mulai dari S6 ya.

Baru mulai muncul.

Itu.

Apa.

Sintax kelas.

Itu berdua dia di.

S6.

Iya.

Nah.

Sejarahnya gimana sih.

Nah.

Sejarahnya adalah.

Kira-kira.

Kayak gini.

Jadi.

Si pembuat.

Javascript.

Namanya.

Pak Brandon.

Muncul lagi.

Paper ini.

Kita sering ya.

Ya ini paper lagi.

Kita refresh paper ini lagi.

Karena menarik.

Gitu.

Karena ini sejarah ya.

Senjarah.

Funksional.

Jadi si pak Brandon ini.

Ternyata dia.

Di imingi.

Di imingi oleh.

Oleh apa ya.

Mungkin HRD nya di Netscape.

Join kita yuk.

Join kita yuk.

Join kita yuk.

Kamu boleh.

Ngapain aja.

Dengan iming-iming.

Kita mau buat.

Coba bikin.

Bisa bikin scheme.

Di browser.

Kita mau buat bahasa.

Untuk browser.

Nah.

Kebetulan si.

Brandon eike ini.

Dia mengidolakan bahasa pemograman namanya scheme.

Scheme ini.

Family nya.

Lispy ya.

Clojure.

Lispy.

Dan temen-temennya.

Macanya Lispy ya.

Bukan L.

Bukan LISP ya.

Kalau Lispy kan penya nggak ke itu kan.

Lispy.

Lispy.

Lispy.

Lispy aja.

Akhirnya.

Karena.

Apa.

Ter.

Terpancing dengan itu.

Jadi dia.

Mungkin ya.

Iming-iming.

Janji manis.

Marketing.

Janji manis ya.

Marketing.

Janji manis HRD.

Akhirnya dia join.

Begitu dia join.

Wah.

Ternyata.

Di dalamnya udah kompleks sekali.

Ya.

Situasinya udah.

Udah sangat kompleks.

Yang membuat.

Akhirnya.

Dicari lah kandidat.

Kira-kira scripting lens use buat web itu.

Yang cocok apa.

Salah satunya ya.

Scheme.

Terus ada Perl.

Ada Python.

Ada TCL.

Sama ada Visual Basic.

Tapi si Brandon Aiknya.

Masih pengen.

Ya sesuai janji apa loh kan.

Masih.

Kan iming-imingnya.

Ayo.

Nanti bisa masukin scheme ke browser loh.

Iya.

Masih.

Dan kayaknya ini jenis bahasa.

Yang idealis banget ya.

Buktinya idealis.

Betul.

Sekarang kita gak pernah.

Sekarang scheme punahan.

Yang demen ya.

Maksudnya orang-orang pemikir yang model-model Brandon Aik itu.

Masih diajarin di beberapa kampus.

Oh masih.

Scheme.

Masih ada.

Masih.

Masih.

Nah.

Nah di sisi lain si Netscape-nya ini.

Punya Bill Dillon sama Sun.

Yang bikin Java.

Jadi walaupun dia tidak bisa implementasi scheme di browser.

Sampai sekarang itu masih ada.

Gaya-gayanya scheme itu di JavaScript sebenarnya.

Kalau ada yang tahu ya.

Karena kita gak tahu dalam tentang scheme.

Jadi kita gak ngeh gitu kan.

Nah.

Masalahnya sekarang si Netscape ini.

Pada tahun 95 itu.

Dia bisa dikategorikan sebagai perusahaan kecil lah ya.

Masih baru berkembang kayak startup gitu kali ya.

Dia mau bikin.

Dia udah bikin browser.

Terus dia mau bikin bahasa di atas browser-nya.

Sedangkan pada saat itu.

Sun kabarnya.

Ini Sun.

Sun Microsystem kabarnya.

Udah gencar-gencar sekali mengkampanjakan.

Java yang belum release.

Akan segera release.

Itu kan.

Ya.

Nah si timnya Netscape ini bilang.

Daripada kita keluar duit marketing sendiri.

Mendingan kita dompleng aja si Sun.

Jadi kita bikin bahasa yang kayak Java.

Dan dulu katanya kan gamutnya mau dibikin Java itu untuk server-site-nya.

Script-nya.

Kalau yang buat client-site-nya yang di browser itu Java Script.

Jadi kayak dijual paket gitu lah.

Wah enak.

Kecil.

Kepencet.

Oke lanjut lanjut.

Kirain sengaja mau cari.

Enggak.

Kepencet.

Nah.

Nah.

Jadi akhirnya.

Netscape plus Java kills Windows.

Ya.

Jadi akhirnya.

Udah lah.

Apa jadi di ambil titik tengah.

Kita bikin sintaksnya.

Family-nya si Java gitu ya.

Yang pakai kurung-kurawal dan lain-lain.

Yang seperti JavaScript sekarang.

Tapi.

Apa ya.

Idealismenya si Brandon Aik tetap ada.

Salah satunya adalah.

Mereka tetap.

Mau bikin klase.

Atau OOP.

OOP tapi tidak klas base.

Nah ini.

Salah satu apa ya.

Salah satu.

Bagaimana sih.

OOP tapi tidak klas base itu gimana ya.

Ya itu.

Jadi.

Sebenarnya.

Mungkin banyak orang yang enggak tahu.

Bahwa.

Object Oriented Programming itu.

Bukan hanya yang klas base.

Jadi kalau misalkan yang kita tahu.

Kayak Java C++ gitu kan.

Ada kan.

Klas.

Car.

Extends.

Vehicle gitu kan.

Nah itu klas base.

Tapi ada juga.

Object Oriented Programming.

Yang tidak menggunakan.

Aks klas.

Salah satunya.

JavaScript.

Salah duanya.

Lua.

Itu juga.

Lua.

Tidak klas base.

Tapi dia OOP.

Jadi OOP-nya lebih ke.

Kayak.

Filosofi.

Prototipe.

Inheritance gitu ya.

Prototipe.

Iya.

Prototipe sama itu.

Struktur data object.

Dia berkutat di arah sana.

Jadi ada di JavaScript.

Ada yang.

Struktur data object.

Yang pakai kurung-kurawal.

Nah itu yang dijadikan object.

Jadi disitu bisa ditaro metod.

Atau fungsi.

Bisa ditaro.

Tipe data apa saja.

Gitu kan.

Itulah.

Apa ya.

Bumbu utamanya sebenarnya.

Jadi bukan.

Klas yang.

Mungkin sekarang kita udah bisa bikin ya.

Udah bisa nulis seperti itu ya.

Setelah IS-6.

Ya setelah IS-6.

Tapi pada dasarnya bukan itu.

Jadi disini ada.

Artikel dari.

Free Code Camp.

Yang menjelaskan itu.

JavaScript isn't class based language.

Apa.

Yang di atas itu definisinya.

OOP itu.

Class based programming.

Adalah suatu style dari.

Object oriented programming.

Nah inheritance nya lewat mana.

Inheritance nya.

Lewat definisi.

Classes of objects.

Makanya kan kalau.

Jaman dulu kalau misalkan kita.

Mendefinisikan sesuatu tuh.

Biasanya.

Di.

Kalau di.

Console.

Itu kelihatan ada proto.

Ada underscore underscore proto.

Double underscore.

Terus.

Di artikel-artikel kan sering disebut tuh.

Namanya.

Donor.

D-U-N-D-E-R.

Dunder proto.

Tadinya kirain apa.

Dunder sampai.

Sampai cari di kampus ya kan.

Kaga ada kata-kata bahasa Inggris.

Dunder.

Ternyata itu cuma singkatan.

Double underscore.

Asli.

Dunder proto.

Kayaknya kalau ada yang nyebut.

Dunder proto.

Yaitu maksudnya double underscore.

Proto.

Itu yang menyimpan.

Apa sih.

Kayak.

Objek.

Nah ini bumbu utamanya kan objek ini kan.

Objek ini bisa ada property.

Bisa diisi string.

Atau tipe data lain.

Bisa juga diisi.

Fungsi.

Bisa diisi.

Method.

Method function ya.

Method apa namanya.

Method properties.

Itu.

Oke.

Nah jadi by default kan semua objek itu meng inherit.

Mereka adalah extension dari.

Maksudnya mereka adalah suatu objek ya.

Iya.

Objek prototype.

Dia menganggap sebagai objek.

Iya.

Kalau type of dia jadinya objek.

Nah ini dia.

Adapt underscore underscore proto.

Nah itu si dunder proto.

Iya.

Kalau kita buka.

Proto ini sebenarnya dulu sebelumnya ini kan.

Proto ini kan sebelumnya itu.

Prototype.

Library.

Framework.

Library atau framework ya.

Oh iya ya.

Ya salah satu ini.

Oh menarik.

Berita mau lah.

Today I learn.

Coba masih ada nggak ya.

Apa namanya.

Java script.

Itu librarynya namanya.

Prototype.

Prototype.

Framework.

Jadi ini masuk kategori apa sih.

Prototype GS.

Iya benar.

Hal-hal menariknya framework.

Terus lama-lama diserap di ECMA scriptnya sendiri.

Iya.

Coba aja buka dokumennya.

Oh terakhir 2015.

Kita lihat ya.

Defining class and inheritance.

Wow.

Tuh defining classnya class.create.

Terus person.prototype.

Iya kan.

Terus ini ada constructor.

Oh iya.

Method property ya.

Ya itu lah.

Constructor lah ya.

Constructor.

Terus ini new person.

Iya.

Ini seperti ini.

Ini awalnya ya.

Baru kemudian diimplementasi, diadaptasi oleh JavaScript ya.

ECMA script ya.

Karena banyak yang pakai, banyak yang suka.

Iya.

Dan di dalam proto ini ada constructor.

Ya.

Object oriented juga kan.

Terus ada hash on property.

Ada to string.

Ada value of.

Dan lain-lain.

Ada banyak.

Akhirnya tetap class tapi terselubung.

Iya.

Jadi dia tidak mau.

Si Brandon Eich ini tidak mau benar-benar yang fully seperti Java gitu.

Karena bahayanya adalah ya ngapain pilih JavaScript.

Mendingan pilih Java aja.

Karena waktu itu kan yang terkenalnya kan Java ya.

Dan prototype ini bisa kita modifikasi.

Oh ini juga sama ya.

Ini modelnya kayak tadi ya.

Bisa.

Bisa.

Tinggal ditimpa aja berarti ya.

Object.create.

Iya tinggal ditimpa.

Ini kan udah model-model class kan ya.

Kayak ada constructor-nya.

Ada method-nya gitu kan.

Iya.

Dan kalau kita lihat ya seperti ini.

Tiba-tiba ada speak-nya di dalam proto.

Karena tadi kita timpa pake constructor.

Ini kan inheritance.

Inheritance.

New keyword.

Nah new keyword ini juga lumayan apa ya.

Nah ini syntactic figure paling menarik sih.

Yang pas ES6 ada class-nya.

Kan ya dengan ada class.

Jadi bisa ini tuh mirip.

Sebenarnya mirip bahasa apa sih?

Bahasa lain ya yang lebih established.

Jadi bisa bilang, bisa mendefinisikan.

Meng-instantiate.

Ya jadi instance ya.

This user sama dengan new user.

Terus bisa di initialize pake argument juga.

Iya.

Ini salah satu menarik juga.

Karena di sini tidak menggunakan class base.

Atau tidak menggunakan sintaks class.

Tapi pake fungsi.

Cuman bisa pake new.

Jadi nyampur ya.

Seolah-olah dicampur gitu ya.

Definisinya pake function aja.

Tapi waktu di initialisasi tetap harus pake new.

Enggak harus ya.

Harus gak sih?

Ya harus kan objeknya function.

Coba-annya.

Coba-annya di konsol lo.

Kita coba ya.

Mana konsolnya?

Oh ini.

OOP tapi bohong.

OOP tapi bohong.

Tota OOP beneran.

Beneran OOP.

OOP tapi yang bukan class base.

Prototype base.

Mana tadi?

Tapi sintaksnya yang bohong.

Maksudnya aslinya gak kayak gitu.

Aslinya enggak.

Ya jadi yang si class base yang sekarang itu adalah pemanis aja.

Nanti di konversi jadi seperti ini.

Oh error.

Enggak boleh copy paste ya?

Enggak.

Warning.

Enggak warning doang kok.

Tapi bisa.

Asal gak boleh?

Hasilnya.

Gak bisa?

Coba.

Oh aloh pasting.

Please type aloh pasting.

Aloh pasting.

Oke.

Nah ini.

Ini kan fungsi ya.

Kalau kita langsung jalanin kan bisa gak?

Doc objek.

Buka.

Namanya John.

Koma 45.

Undefine.

Oh harus di assign ke variable name dong.

Coba.

Gini.

Nah sekarang John apa?

Undefine.

Gak bisa.

Oh Johnnya jadi function juga ya.

Karena gak ada this ya.

Oh iya.

Oh iya betul.

Scope ya.

Ini masuknya masa konsepnya adalah scope.

Nah ya.

Kalau kita kasih new.

Maka dia bisa gak ya?

Nah ini udah bisa nih John.

Muncul.

Oh.

Mana ada?

Dan itu ada program ada speaknya.

Ada.

Berarti bisa juga John.

Maaf kita gak tahu.

Terima kasih.

Sekarang jadi itu ya?

John.

Sekarang John dot speak itu pasti bisa.

John.

John dot speak.

Ya.

Dot speak.

Buka kurung.

Iya.

Tapi perhatikan ya temen-temen ya.

Disini meskipun ini objek literal.

Atau apa ya.

Struktur data objek.

Tapi ini ada tipe nya.

Dalam tanda kutip.

Beda kan?

Dok objek itu meng-extend objek.

Objek prototype biasa.

Kalau misalkan kita kasih gini name sama dengan.

E titik dua.

Jane misalkan kan.

Terus umurnya berapa gitu kan.

Ace nya 40 gitu.

Nah ini kan gak ada.

Dok objek atau apapun.

Kan ini biasa aja gitu.

Nah itu yang membedakan antara yang bisa menggunakan new.

Sama yang tidak.

Kalau misalkan ini.

Misalkan ini Jane.

Kita bikin gitu.

Eh gimana ya?

Iya sama dengan.

Bener kan?

Coba titik Jane.

Atau kalau misalkan gini.

New.

Gak bisa ya.

Gak bisa lah ya.

Gak bisa lah.

Jadi apa?

Error.

Gak bisa gak bisa.

Karena ini.

Terus sekarang Jane.

Karena not a constructor.

Errornya helpful kok.

Coba Jane.

Terus titik Jane.

Masih.

Coba di open itunya.

Di open.

Ada prototype nya juga ya.

Objek juga ya.

Dan banyak constructor nya ada apa.

Jadi Jane dot.

Jane dot.

Has on property.

Itu bisa.

Jane dot.

Dot.

Has on property.

Nama property nya H.

Eh kok ke enter?

String.

Gini ya.

True.

Oke.

Itu yang sedikit membedakan.

Life coding asik ya.

Prototype chaining.

Ini ada juga prototype chaining ya.

Apa tuh?

Hence it also has a proto property.

Which refers to global.

Coba titik Jane lagi deh.

Jadi semua objek yang ada di JavaScript.

Itu pasti ada prototype nya.

Ada protonya.

Chaining itu berarti kan.

Di Jane itu.

Di dock object.

Isi protonya kan.

Prototype nya inherit dari.

Yang bawaan objek.

Semua sama kecuali.

Plus ditambahin satu speak.

Ya kan.

Maksudnya gitu kan ya.

Window objek juga punya prototype.

Window objek nih.

Kalau mau document objek.

Dokumen.

Coba dokumen kalau mau lihat.

Dokumen.

Gini ya.

Oh ini ke print isinya ya.

Window dokumen.

Kalau dokumen mungkin dom.

Gak ada.

Coba kalau window.

Langsung masuk dong.

Window objek.

Ya benar.

Ada protonya paling bawah.

Kok ada on youtube iframe ready.

API ready ya.

Apa itu?

Mana protonya?

Ada protonya somewhere.

Di paling bawah selalu.

Dan di dalam prototype window.

Ada prototype window apa nih?

Coba di geser window apa.

Dibesarin.

Dibesarin ini nya.

Sidebar nya.

Window properties.

Dalam window properties ada.

Prototype event target.

Event target.

Udah gitu aja sampe bosan.

Terakhir objek.

Terakhir objek.

Terakhir objek.

Ini inilah prototype chaining.

Inheritance ya.

Prototype di dalam prototype.

Di dalam prototype.

Wah ini panjang banget.

Diklir aja lah.

Makanya dulu.

Nggak tau nih temen-temen ngalamin ya.

Atau nggak ya.

Saya dulu sempet kebingungan kalau baca.

Baca.

Dokumentasinya javascript.

Karena tulisannya are.prototype.map.

Saya cari misalkan.

Oh iya.

Ini prototype ini apa ya.

Kayaknya gue pernah nyinggung ini.

Di beberapa kali kita bahas javascript framework.

Atau apa kan gue pernah bilang.

Iya terus kita selalu janji-janji gitu.

Oh iya kapan-kapan kita udah bahas nih.

Prototype.

Akhirnya ada Mas Danang.

Oh hai Mas Danang.

Ivan dimana?

Lagi itu mengunjungi kakek.

Di Athena.

Masih siang ya.

Sungkem sama Hercules.

Sungkem sama Hercules.

Minta THR ya.

Jadi dulu.

Setiap kali cari apa ya.

Setiap kali cari metode gitu ya.

array.filter atau array.foreach.

Kok ada prototipenya.

Ini apa.

Kalau ditulis begini kan nggak bisa kan ya.

Iya misalnya.

Dander proto.

Tapi sebenarnya.

Tanpa itu pun.

Sebenernya nggak perlu pake dot prototype.

Tapi langsung dot mapnya bisa.

Misalkan ini.

Yang saya lakukan adalah.

Saya tulis prototype disini.

Prototype.map.

Atau dot filter.

Kok nggak bisa.

Dan terus pas udah tau.

Pas udah kopas.

Yang betul yang jalan.

Ya sebelum ngerti tentang.

Prototype.Konsep.

OOP sendiri ya iya sih.

Bener sama bingung kenapa sih.

Di MDN tulisannya selalu array prototype.

Iya.

Itu yang dulu awal-awal bingung.

Jawabannya adalah.

Karena metode map itu sendiri.

Atau metode foreach.

Metode map apapun itu.

Itu bukan punya nya.

Kayak ibaratnya bukan punya nya si array 123 itu.

Tapi punya apa.

Itu adalah milik dari.

Si array.

Apa itu namanya.

Tipu prototype.

Tipu data array.

Yang punya metode map.

Adalah itu.

Apapun kalau kita mendefinisikan.

Array kita sendiri.

Itu akan meng inherit.

Akan mewarisi ya.

Akan mendapat metode itu.

Bukan karena dia punya metode.

Map sendiri tapi karena.

Boleh dapet dari si tipu data array.

Kalau.

Di PHP.

Kalau di PHP kan kita.

Bisa langsung pakai tipu data array.

Ya kan.

Tapi.

Sandainya kalian mau bikin map sendiri.

Atau mau bikin tipu data.

Yang seperti array.

Tetapi pengen.

Merubah cara kerjanya.

Kan berarti harus dibikin tipu data array sendiri.

Array yang spesial.

Custom array gitu ya.

Itu harus pakai implement.

Accountable.

Namanya kalau gak salah.

Implement ininya.

Apa itu namanya.

Kalau implement itu namanya apa sih.

Bukan extend.

Tapi implement.

Implement itu.

Turunan inheritance bukan ya.

Extend.

Kalau extend kan.

Extend class.

Kalau implement itu dari.

Lupa teori nya.

Lupa teori nya tetapi ada.

Ada implement countable.

Interface.

Interface.

Valeri.

Jadi.

Jadi interface dari.

Countable.

Ada traversable.

Ada.

Macam-macam tuh implementnya ada banyak.

Jadi kalau mau.

Menyerupai seperti array.

Ada implementnya ada banyak.

Bila map nya kita itu mau.

Kita cara ngambilnya gimana.

Itu harus kita implement satu-satu.

Jadi kalau.

Karena.

Array di PHP kita bisa langsung count.

Count itu langsung jadi apa.

Bagaimana apa yang di prosesnya.

Tapi harus ditulis beneran gak.

Itu jenis datanya.

Kita kayak apa.

Jadi class.

Jadi class sendiri kan.

Makanya.

Jadi class custom array nya kita sendiri.

Memang.

Contohnya yang paling ini.

Anggap aja.

Class array nya kita itu.

Saat kita mau ngambil data.

Ternyata ngambil data itu.

Bukan di mapping nya kita.

Tetapi mau ke.

Network.

Contohnya.

Atau file system.

Lebih tepatnya file system sih.

Jadi berbeda sedikit.

Kalau di JavaScript.

Ya itu harus yang.

Kalau mau extend array.

Dengan prototype nya kita juga bisa.

Extend dari array itu kan.

Kita menambahkan.

Prototype.

Method nya kita sendiri.

Yang tadi kayak kita bikin.

Mungkin.

Instead of.

Kita kata kata array.

Kita katakan map.

Jadi a new map. Contohnya map itu mungkin.

Kalau array kita dua dimensi.

Kita pengen bikin dia ada dimensi ketiga.

XYZ gitu ya.

Kita mau implement.

XYZ itu bagaimana hasilnya.

Kita bisa bikin.

Kita bisa extend.

Prototype nya sendiri.

Jadi kita bisa bikin method-method nya kita.

Atau contoh lainnya itu.

Pernah denger kata matrix jarang gak?

Matrix jarang.

Matrix?

Atau jarang pernah denger gak?

Jadi matrix.

Untuk memaping.

Let's say memaping hutan.

Jadi semua.

Value nya itu 0.

Tetapi daerah yang.

Daerah yang kita ingin mark.

Karena mungkin daerah itu ada hutan nya.

Kita bikin ini jadi satu.

Jadi matrix itu.

Jadi seperti peta.

Oh kayak ini kayak di game.

Sprite.

Hitmap.

Jadi semuanya 0.

Dan bagian yang.

Yang terkena.

Yang mau kita hitmarking.

Jadi satu atau dua atau tiga.

Kita jadi koordinat kayak index nya gitu ya.

Ya.

Kan matrix itu kan XN.

XNY.

Ini cuma salah satu sample ya.

Misalnya.

Dalam dunia nyata.

Kalau kalian mau meng-extend array.

Dari JavaScript juga bisa.

Pengen bikin custom mapping.

Link list misalkan.

Ya link list.

Bisa custom mapping.

Sehingga saat dipakai.

Di product itu ya.

Kalian punya method nya sendiri.

Karena array nya sudah prototype.

Bisa di-extend.

Contoh kasus.

Yang pernah saya kerjakan.

Bingung.

Jangan bingung.

OOP itu banyak.

Bahkan sekarang saya baru ingat tuh.

Kalau gak salah goleng juga OOP kan.

Tapi dia adalah struct base.

Nah ini beda lagi.

Struct itu interface kan?

Beda.

Interface itu kita nge-implement.

Dan method yang ada di interface.

Harus kita.

Kita implementasikan.

Kalau struct.

Kita cuma kayak.

Struct itu sudah ada prosedurnya.

Struct itu sudah ada prosedurnya.

Kalau class itu kita kasih struct.

Prosedur itu otomatis dimiliki.

Gak perlu didefinisikan lagi.

Ya.

Tapi istilah-istilah yang umum.

Di OOP juga ada kan.

Di goleng kayak method.

Ya kan.

Itu tetap ada ya. Walaupun gak semua.

Gak pure OOP kan.

Maksudnya yang class base.

Ya.

Jadi ya.

Umum maksudnya.

Hal yang umum bahwa.

OOP itu bukan hanya class base.

Seperti Java atau C++.

Objective-C.

Apalagi yang OOP.

Smalltalk.

Dan lain-lain.

Pascal?

Pascal ada class ya?

Pascal bukan prosedural.

Prosedural kan.

Ya.

Phoebe? Phoebe class.

Betul.

Phoebe C# itu class.

Kalau Swift beda lagi.

Swiftnya Apple itu

protocol orientate.

Apalagi itu?

Interface.

Interface.

Nih nih nih.

Sebentar.

Saya ingatnya itu si Swift itu

struct base. Ternyata bukan.

Interface or protocol type.

Is data type abstraction of class.

Oh salah ya.

Bukan ini ya maksudnya.

Bentar bentar.

Ini.

Itu.

Protocol orientate.

Object orientate.

Lagi share screen gak?

Belum muncul.

Ini.

Swift itu multi paradigm juga.

Tapi dia protocol orientate.

Protocol orientate.

Interface.

Oh protocol itu sinonimnya interface.

Ya.

Ada contohnya gak ya?

Kelihatan gak ya kalau di klik.

Gak ada ya.

Gak ada contohnya ya.

Ya itulah.

Jadi hal yang apa ya.

Bukan hanya JavaScript yang menerapkan

OOP tapi bukan class base.

Tapi ada banyak lagi.

Ya.

Dan berarti sebetulnya.

Berbagai jenis language nih.

Bisa menerapkan OOP dengan

cara mereka sendiri ya.

Yang sesuai sama

sintaks mereka maksudnya.

Bukan all or nothing itu.

Bukan yang kayak.

Harus OOP atau functional atau apa.

Cuma ini bisa kayak di

adaptasi.

Kan eksensinya adalah

gimana caranya suatu

obyek atau jenis

data bisa mengeksten kan.

Intinya kan ada prototipe.

Ada property-property

dari prototipe itu.

Dan bisa diinherit, bisa dieksten

dengan mudah. Kan sebenarnya berarti

esensinya gitu ya.

Cara dia implementnya.

Suka-suka masing-masing bahasa kan.

Suka-suka.

Ntar lagi ada asosiasi

object-oriented untuk mendefinisikan

apa sih object-oriented.

Standard.

Bahkan OOP yang

class-based aja itu

implementasinya bisa beda-beda.

Kalau temen-temen pernah ngoding

class atau OOP di

Python sama di Ruby

yang adalah dua-duanya OOP class-based

itu dua-duanya beda.

Sama Java apalagi. Beda juga.

Jadi masing-masing punya cara.

Karakternya atau hasilnya berbeda

atau pola pikirnya?

Misalkan, nggak tahu ya.

Mungkin sintaks ya. Cara inisiasi.

Misalkan, kalau di

Python itu

kalau kita mau definisiin metode, kita harus

pakai self atau disk kalau di JavaScript.

Jadi disk-nya itu harus ditambahin di

sebagai parameter pertama

di setiap metode.

Tapi Ruby nggak kayak gitu.

Kalau di Java juga nggak.

Jadi ya mungkin cara

ininya aja beda.

Dan tidak mesti semua

ciri-ciri OOP yang class-based itu

diimplementasikan di bahasa masing-masing.

Mungkin ada yang lengkap kayak Java

itu ada semua. Ada inheritance,

ada polymorphism, ada macem-macem kan.

Tapi mungkin di bahasa yang lain,

OOP yang lain, mungkin inheritance ada.

Mungkin polymorphism ada.

Iya. Misalkan kayak JavaScript

sendiri, private

property kan nggak ada.

Baru ada akhir-akhir ini ya.

Dulu kan nggak ada ya.

Property yang private. Nggak ada kan.

Class yang private juga belum ada.

Belum bisa kan sekarang ya.

Nggak bisa. Kenapa class private terus buat apa?

Nggak bisa di-extend gitu.

Nggak bisa di-export.

Nggak bisa di-extend.

Nggak bisa dibaca di

class yang lain.

Nggak bisa di-class yang tidak turunannya dia.

Jadi ya,

inilah. Jadi ada yang

kayak tadi kan. Gue sama dengan OOP

yang versi lite-nya. Cuma ada beberapa

apa ya. Beberapa ciri

dari bahasa

bahasa

object-oriented. Tapi tidak semua.

Gitu.

Oke. Kita lanjut lagi.

Tadi ya?

Nah,

sejak ECMAScript 2015 atau

ES6, itu mulai

muncul class...

Scroll ke atas sedikit deh. Tadi

penjelasan yang bagus soalnya atasnya

yang tadi kita kelewat sedikit. Nah,

itu object and function combination.

Nah, tadi kan kita

nyoba ini kan.

Kita nyoba manggil dog object

tanpa new kan.

Nah, itu

ternyata ini di eksekusi aja.

Oh, iya, iya, iya.

Benar, benar, benar.

Saya pernah demo ini dulu.

Oh, masih ada nggak function ininya?

Dog object.

Oh, masih ada. Eh, salah.

Object.

Oh, masih ada ya.

Jadi sebenarnya, kita

bisa... Eh, subclass.

Kok subclass? Ini dia.

Sebenarnya kita bisa

langsung jalanin

sekali.

Ini kan.

Mana dia?

Ini.

Nggak perlu pakai new.

Tapi...

Ini salah.

Kenapa, deh?

Itu...

Apa? Shortcut-nya salah.

Shortcut-nya ditaro tombol delete.

Jadi setiap pencet tombol delete,

bunyilah itu. Keren sengaja.

Nggak.

Function dog object.

Ini nggak usah pakai ya.

Ini nggak usah pakai ya.

Nah, ini bisa kita langsung eksekusi

pakai if.

Gini.

Undefined.

Atau nggak pakai ini?

Nggak pakai yang ini.

Nah, benar.

Cuma dikasih kurung doang berarti ya?

Bukan if dong.

Ini nggak dieksekusi.

Bukan if.

Memang bukan ya.

Oh, itu function biasa ya. Cuma...

Ada kurungnya.

Oh, kok kesini?

Iya, ada kurungnya.

Function dog object.

Oh, kalau kita mau tahu

isinya.

Oh...

Tapi buat apa ya?

Coba ya.

Itu declare, kok.

John.

Nah, kalau kita mau tahu

John, itu kayak gimana?

Eh, nggak juga ya.

Kalau kita print John biasa juga begini kan?

Iya, sama aja.

Gak ngaruh.

Jadi apa ini?

Itu

function object combination.

Itu kayaknya

cara buat...

Apa?

Kita bisa bikin object

melalui function.

Ini kayak itu deh.

Sebelum ada klas, sebelum ada sinteks klas.

Ya, cara orang bikin

klas ala-ala di JavaScript.

Maksudnya kayaknya gitu deh.

Tuh, when functions

are declared, by default

they are given a lot of properties

attached to it. Nah, function itu adalah

object juga.

Iya, dan function di JavaScript

itu adalah object.

Semua di JavaScript adalah object.

Jadi Java juga ya.

Iya, semuanya adalah object kan.

Java juga begitu kan. Ternyata

jauh di dalam

JavaScript yang sepertinya

lebih deket ke functional programming,

tapi ternyata dalamnya object gitu.

Tapi disembunyikan.

Nggak banyak

yang tahu. Nah, baru...

Nah, terus baru ada

sinteks klas, keyword class.

2015 baru muncul

sinteks keyword class

yang bisa

menjadi batu loncatan

buat teman-teman yang tadinya

terjebak di bahasa Java

pindah ke JavaScript.

Over existing

prototyping technique, it continues

its prototyping, tetap

behavior prototypenya seperti tadi.

Tetap sama.

Makes the outer body looks

like OOP.

Outer bodinya aja

seperti OOP.

Walaupun sebenarnya

hasilnya adalah

ada prototap juga.

Bisa dance, bisa sing.

Iya, dan yang

sedikit membedakan.

Ini kalau di Java pakai disk juga ya, kalau nggak salah.

Tapi disknya JavaScript

unik karena dia

multi-paradigma.

Jadi disk ini bukan hanya

untuk class, tapi juga bisa untuk

yang lain kan. Untuk konteks saat ini.

Conteks, ya cuma kalau nggak

di dalam class, ya udah. Apa?

Scope.

Hosting.

Pokoknya ngikut atasnya. Jadi kayak misalnya

kalau di browser tuh, ya

itu jadi masuk ke

window.

Ya, jadi window, karena paling atas.

Kalau dia masuk ke fungsi, dia

di dalam fungsi itu ada apa.

Cuman aja type di console.

This.

Nah, window.

Enter.

Oke, ini window.

Window.

This sama dengan that.

Monkey patching.

Akal-akalan montir.

Nah, sebetulnya dibalik layar itu

jadi class animals.

Itu sebenarnya function animals.

Tapi tetep ada disknya ya.

Cuman dipakein huru besar ya.

Ini buat convention aja, walaupun

sebenarnya nggak harus.

Jadi sebenarnya ES6 ini

sebenarnya tidak

apa namanya

engine-nya tetap sama. Dia cuma kayak

membuat satu layer di atas.

Sama syntax kayak shortcut gitu ya.

Iya, cuma kayak

terjemahin. Jadi sebenarnya

multi-layer. Jadi kalau kita nulis ES6

dia terjemahin lagi ke JavaScript

vanilla

baru ke machine.

Baru lagi ke

JavaScript engine-nya.

Apapun itu.

Ya, jadi

meskipun si JavaScript yang sebenarnya

nggak ada class,

kita semuanya function.

Tapi inisiasinya tetap ya, pakai new ya.

Jadi kombinasi gitu ya.

Subclassing.

Ini inheritance ya?

Iya.

Extend sih.

Di JavaScript namanya

inheritance.

Eh, sorry, subclassing.

Kalau aslinya kan

teorinya namanya inheritance.

Extend.

Kalau inheritance kan menerima property dari

parent-nya kayak

jenis yang di-extend kan.

Nah, kalau ini ditambahin yang

cuma ada di dia kan.

Kayak animals tuh cuma kucing yang

bisa punya warna apa?

Kumis.

Whisker color.

Iya, betul. Ini kan

kalau kita manggil super.

Super kan inheritance tuh.

Maka akan menjadi ini.

Animal object apapun,

pasti punya name dan age.

Tapi abis itu. Bukan.

Super itu adalah memanggil konstruktor

dari parent.

Yang di atasnya, parent-nya.

Ini kalau temen-temen

yang mengalami

React versi class.

Pasti

familiar ya dengan

super, kemudian

this.bind ya.

Yang di bawah sini

nanti banyak.

Bind.

Bind.

Banyak tuh.

Ya, dari sini gitu.

Salah satu yang mengerahkan

kenapa si ES6 ada

class, salah satunya React.

Tapi begitu udah ada class, React-nya

berpaling dari class.

Ya, lancar tuh fungsional, sembarangan banget itu.

Udah capek-capek digerakin

si JavaScript-nya udah

ada opsi, eh, React-nya

gak pakai lagi. Sorry ya, kita udah gak pakai lagi.

Ya, jadi begitu

kita pakai this di sini, dia akan

menjadi konteksnya si

yang berhubungan dengan animal ini ya.

Jadi ini kayak, apa ya,

menyimpan global variable

dari class ya.

Kayak memaksa

obyek tersebut punya property-property

itu, sesuai

jadi, apa, kayak logikanya, kayak

bahasa awamnya kan, setiap

kita bikin animal object,

itu harus punya name dan age.

Sebetulnya kan gak usah pakai klas-kelasan, bahkan

gak usah pakai function yang ada

prototype-nya tadi, kenapa gak define

aja, misalnya animal1

sama dengan langsung aja obyek.

Sebenarnya kayak gitu bisa, tapi kan

kita jadi gak bisa streamline,

gak bisa maksain bahwa semua

harus ada name dan age-nya.

Jadi ini kayak menstreamline bahwa setiap

animal itu harus punya name dan age.

Melalui prototype.

Oke, ini juga masih ada

contoh, beberapa contoh, ini

bahkan animal constructor

oh, di obyek create ya.

Jadi kita bisa definition

secara terpisah,

gak mesti di dalam

klas atau di dalam function,

tapi kita menggunakan

obyek.create.

Terus bisa set

property,

bisa banyak cara ya, ada banyak cara.

Intinya adalah

prototype-native

to welcome OOP developer

to its ecosystem, so provide easy

ways to creating prototype and

organize related data.

Jadi ini lebih masuk ke DX ya,

kalau menurut dia.

Apa? Lebih ke

DX-nya aja. Kan sebenarnya gak

pakai klas, kayak pakai cara yang kayak

di atas itu hasilnya sama aja kan.

Cuma kelihatannya kurang

catchy aja.

Ketiknya gak enak.

Saya jadi punya pertanyaan nih,

begitu melihat beberapa contoh

di sini. Ini contohnya,

contoh yang klas gini ya,

klas ya,

apakah, enggak,

pertanyaannya adalah kenapa

contohnya itu animal, kalau gak

cars, kenapa enggak contohnya yang real,

kayak misalkan kita bikin aplikasi gitu,

misalkan to do. To do itu

gimana cara implementasi pakai klas,

buat apa klas itu?

Gak perlu di extensi,

gue bayanginnya, task,

task kan ada

property-nya namanya status, misalnya.

Terus

di dalamnya, method-nya ada

update misalnya, atau set complete,

atau ayah, atau apalah.

Ya, tergantung

bagaimana implementasinya ya.

Contohnya, kalau misalnya

mau dijadikan sebuah

komponen, satu task itu jadi satu komponen,

dimana komponen

itu punya property,

dan punya method,

dia mau

edit dirinya sendiri, atau

delete dirinya sendiri,

dan juga bagaimana feel-nya dia,

ya kan? Biasanya

digabung jadi satu,

satu itu.

Oh, ada contoh bagus tuh, kalau buat

yang barusan dibahas Ivan,

sama yang Mas Rizat tadi bilang,

yang di link-nya can see dots, coba.

Itu lebih

real.

Lebih real use case-nya misalnya, ya itu

ada yang meng-edit

datanya sendiri, terus

ya, pakai user lah.

Bukan cuma car, atau vehicle.

Soalnya pernah ngobrol

sama temen yang

apa, itu kan,

jadi, menurut dia, bukan

skeptis ya, dia bisa dua-duanya, bisa

functional, bisa OOP, tapi menurut

dia, OOP itu kurang cocok

buat aplikasi,

aplikasi kantoran, atau aplikasi

inilah yang biasa kita kerjakan,

gitu. OOP itu justru

lebih cocok untuk game.

Oh, iya, iya, iya, misalnya.

Kalau misalnya kita mau bikin,

apa ya, mau bikin

musuhnya, karakter, karakter

ada, ada apa,

musuh extends dari karakternya.

Pemainnya, player-nya juga extend

dari, si itunya juga kan, karena ada.

Tapi kalau background, atau NPC,

kayak itu, itu beda jenis,

itu sendiri, karena mungkin gak bisa

apa, gak bisa punya dialog, atau

gak bisa, gak bisa,

ya beda pola pandang aja ya.

Ya, beda pola pikir ya.

Bisa juga, bisa juga aplikasi,

contohnya, pernah

bayangkan bagaimana

Google Doc, mungkin,

Google Doc, atau

Google Slideset bekerja,

atau Google Slideset, ya.

Mungkin, di belakang itu kan, ya,

kalau misalnya mau dibikin

semua fungsinya, mungkin bisa aja.

Tapi kan, kalau,

di sini kan, gunanya contohnya,

tools ya, tools itu kan ada,

anggap aja, bold, italic, segala macam.

Kalau dibikin satu-satu

fungsinya, bisa juga. Tapi, kalau misalnya

mau di-extend dan polymortism dengan

kelas-kelas, dan ada mungkin objek

utamanya, mungkin modifier,

terus ternyata dia modifier bold, modifier

italic, modifier apa, bisa juga kan,

tergantung arkitekturalnya aja sebenarnya.

Nah, berarti itu tergantung desain

di awal ya, desain sistem

di awal, dia pengen objek-objeknya

kayak gimana.

Anggap aja, Microsoft Word,

sorry, Google Doc,

atau Google Slideset itu kayak game.

Ada spreadsheet, ada musuhnya

pakai yang inheritance juga,

tools-tools yang ada di spreadsheet,

ya, inheritance juga kan bisa juga, ya.

Bisa, bisa, bisa.

Benar, benar, benar.

Nah, ini apa yang mau ditunjukin?

Apa yang mau dihalat? Ini ya?

Contoh yang lebih real lah.

Terus bisa buat nge-set,

bisa buat nge-get.

Oke, oke.

Nah, terus bikin new person

kayak gitu.

Terus kita bisa ngebah,

kita bisa bikin mereka

dia ngebah dininya sendiri tuh,

person.setname.

Terus bla-bla-bla.

Ya itu, ini artikel ini sih

lebih ke perbandingan aja sih.

Cuma kalau case ini dia secara

subjektif, dia lebih

encourage fungsional.

Dia jatuhnya ke situ.

Tapi maksudnya dia tetap menjelaskan

cara kerjanya gimana.

Dan dia, apa,

dia bikin equivalentnya, perbandingannya

pakai kelas sama pakai fungsion.

Dengan use case yang ya lebih

realistis sedikit daripada cuma tadi kayak

cat atau dog.

Iya, benar.

Ini lebih, kalau person itu

misalkan kita mau kontak, bikin kontak

kontak-kontak aplikasi

kontak ya.

Buat nyimpan nama,

nomor telepon gitu. User atau customer

atau apapun. User, customer, ya.

Benar-benar.

Menarik, menarik.

Terus scroll aja. Ini sebagian besar

sih kita udah, kita udah

pelajarin kan kayak si proto-nya.

Nah, cuma kebawah dia punya

ya opini dia.

Habis itu agak ribet dan

bisa bikin bingung.

Menurut dia.

Ini bisa jadi topik

di episode-episode berikutnya

nih di sini.

Bisa, bisa.

Bedanya nanti

penggunaan di sini. Bisa sih?

Satu topik sendiri.

Eh, eh, atas sedikit.

Nah, ada contohnya nih

apa, yang bikin bingung

kan const person, kita

instantiate new person

object ya. Terus

ada get greeting. Get greeting tuh emang ada

di method, di object person

tuh emang ada get greeting-nya.

Tapi, kalau

dijalani ketengan, walaupun

isi function-nya udah dipindahin,

ya nggak bisa. Karena butuh disk-nya tadi,

butuh fonteks yang nggak ada,

yang hilang waktu di-assign ke

variable terpisah.

Iya.

Menurut dia.

Jadi, ini agak misleading ya?

Sedikit misleading ya?

Bukan misleading, tapi kalau misalnya user

nggak, kalau developer-nya

nggak menguasain banget

object person-nya sendiri bentuknya

kayak apa, coba aja

cari get greeting. Get greeting nggak ada?

Nggak ada. Get greeting callback

kali ya maksudnya. Ya intinya

butuh data

dari disk. Butuh data

harus dipanggil dalam context

class itu.

Hmm.

Kan ilang jadinya disk-nya.

Ya, gitu. Terus, ini contoh

real world yang apa? Counter.

Ini ada insight menarik juga nih dari

Mustafa

Zaki.

Ya, API Discord itu banyak

tapi mirip-mirip. Bisa jadi ya

sengaja dipake HP karena

kalau API

itu lebih tepatnya

open API specification kali ya.

Hmm. Bisa jadi.

Jadi sudah ada

spesifikasi pakai apa itu?

Yang biasanya

untuk buat open API

spesifikasi.

Swagger. Itu sudah swagger.

Ya, pakai swagger. Jadi

mungkin waktu didefiniisikan

secara arkitektural mungkin sudah dibuat

sekema-nya. Dan sekema itu kan

bisa di-extend ya.

Sekema object A

let's say

messaging. Nanti kemudian

ada sekema tambahan-sekema-tambahan

itu yang extend

dari sekema sebelumnya. Itu bisa juga ya.

Tapi itu sudah sekema

base kalau API.

Walaupun nanti implementasi di belakangnya ya oke

mungkin pakai OOP

supaya mempermudah. Jadi

benar-benar nge-translate antara sekema

langsung jadi class. Bisa juga.

Gak, itu SDK-nya.

Cuma, anyway

SDK itu kayaknya salah satu

penggunaan class by syntax yang paling

sering ya. Kayak apalah

GraphQL apolo gitu.

Selalu kan new apa. Jadi

udah ya mempermudah.

Ya sekalian aja. Ya jadi apa

familiarity. Masa-masanya nge-import function A,

function B, function C. Masa-masanya ribet kan

kalau si developer yang menggunakan suatu

SDK harus nge-import semua metode-metode

nya terpisah. Nah

kalau cuma import satu class kan

ya, Ivan harus kerja ya.

Iya.

Saya harus cabut dulu ya.

Udah jam 5 mau ada

aktivitas.

Oke, thank you so much.

Bye bye. Salam buat Bos.

Buat Bos.

Minta naik gaji.

Oke, kita lanjut sedikit lagi kali ya.

Ini, tadi kita

udah bahas kalau temen-temen yang

ngalami react awal-awal ya. Seperti ini ya

bentuknya ya.

Dan banyak yang bikin kesandung gitu.

Kayak apa? Bikin

kesandung. Nah itu, ya

itu penjelasannya sih.

When you click the button,

you'll see type error set state

of null at increment.

Nah, berarti dia manggil sesuatu yang

disknya

gak ada.

Yang gak

di konteks yang sama.

Itu gak apa-apa.

Keliatannya

disk.state

yang di dalam.

Coba kesalahannya.

Ini ya, solusinya ini ya? Bukan?

Bukan, bukan, bukan. Itu solusinya

di link. Harus buka video

tapi.

Ini?

Yang ini pakai

bind-bind itu gak sih? Bukan ya?

Ya, kelihatan salah satu

workaround-nya pakai bind.

Jadi biar disk set-state sama

disk increment itu mengacu pada

konteks yang sama. Nah, cuma exactly

gimana? Gak inget sih.

Ingat dulu

pernah ketemu masalah

mirip-mirip gini, dan keliatannya pernah cari

apa, solusinya.

Dan pernah klik si video yang

di link ini juga.

Cuma intinya, ya

perbedaan konteks disk aja.

Nah, terus

argumenya dia adalah

kalau kita harus mikir

disk, itu banyak

kasus-kasus yang bisa bikin

unexpected

error, dan kita harus lusurin

itu konteksnya dari mana.

Betul.

Nah, dia

menyarankan menghindari

disk dengan

bikin pure function kecil-kecil.

Pure function, oke.

Ada get name,

kemudian person ini yang

dari, oh dari

person ini ya. Person masukin ke set

name,

greeting, dan lain-lain.

Jadi agak lebih panjang

ya. Ini equivalentnya

yang ini kan? Sama sih.

Baris 27, 27 baris

yang ini berapa? 27 juga.

Sama, persis.

Cuma ini gak pakai disk sama sekali ya.

Gak se-idiomatic, kayak

cara mikirnya bukan cara mikir yang

kelas yang semua di dalam satu objek

gitu, yaudah kayak ketenggan aja.

Hmm, oke.

Udah itu, itu

argumennya dia sih.

Jadi

usage of class is not

bad, ya gak apa-apa. Cuma

apa? Kalau mau menghindari

kekusingan disk,

bisa pakai, sebetulnya

ya pakai function aja.

Terus, di bawah ada

bonusnya lagi. Menarik sih.

Contoh-contohnya. Ada pattern namanya

module pattern.

Jadi sebetulnya malah mirip

yang, yang tadi

tuh, yang pas kita bikin

dock object pakai function itu loh.

Contoh awal sebelum ada class.

Balik ke situ lagi jadinya.

Iya, iya, iya.

Ini kan kita bikin object ya.

Di dalam objek kita punya

metode. Jangan lupa

di JavaScript kan function itu

apa? First class apa itu namanya?

Yang bisa, ya bisa di

oper-oper, misalnya

function method itu ya tetap bisa

di, bisa ke bawah lah.

Kalau apa? Initiate

person objek baru tuh, pakai get person.

Iya, iya. Nah, ini,

ini artikel yang sangat menarik.

Kenapa? Karena can see dots

itu platar belakangnya adalah dari

programmer Java sebenarnya.

Nah, dia berkhianat ya.

Agak, agak main blowing kalau

dia lebih prefer functional daripada

class. Karena

mungkin dia udah biasa class yang

sudah biasa dibanjakan dengan Java yang

istilahnya OOP-nya udah

lengkap gitu kan. Tiba-tiba di JavaScript

kok banyak yang aneh ya, kok pakai disk ya,

kok pakai ini bingung gitu kan. Mungkin itu yang membuat

dia akhirnya lebih memilih

paradigma functional mungkin, nggak tahu juga

gitu. Tapi ini menarik sih. Maksudnya

kita dapat dua sisi kan

OOP itu gimana,

functional itu seperti apa, gitu.

Terus pertimanya apa? Bagusnya

dia ngejelasin semua. Sampai bonus-bonusnya

tuh, bonusnya ke bawah masih ada lagi tuh.

Jadi kayak masing-masing ada

pertimanya, kelebihan,

kekurangannya. Yang tadi

tuh, apa, yang

appendix pertama itu

sebetulnya aman-aman

aja dari segi, maksudnya kalau kita bikin

person objek, ya tetap

ada, apa, tetap ada

property-nya, tetap ada method-nya,

tetap ada property-nya.

Cuma masalahnya,

apa tadi, dia ngejelasin

masalahnya

apa, itu

kan bukan dari inheritance

kan nggak salah ya. Jadi one of the flows

tuh, bawah dikit.

One of the flows

of the module pattern, every person has

its very own copy of

each property and function. Jadi bukan

satu. Itu kayak dianggap

function yang berbeda.

GetGreetingCallback-nya.

Ya, iya, iya.

Kita nggak bisa tahu bahwa ini adalah

person ini.

Hal yang sama.

Hal yang sama dengan person 2 gitu ya.

Ya, iya. Ya, mendinggal GetGreetingCallback-nya

itu sebetulnya

sama mesin, dianggap dua function,

dua method yang sama sekali

berbeda.

Nah, kan perserak kita kan,

buat kita itu masalah atau nggak, maksudnya

usage-nya kita. Ya, cuma minimal dia

ngejelasin kayak gitulah.

Iya. Ini ada pengaruhnya

sama performance nggak sih?

Kalau banyak banget ya

ada. Kan jadi, kan

occupy memory semua tuh. Memory ya?

Iya, iya. Benar-benar. Tapi maksudnya harus

sebanyak apa, datanya kayak sebanyak

apa yang sampai itu cukup mengganggu

gitu kompleksitinya.

Betul-betul.

Nah, kalau pakai arrow function kayaknya

udah implicit bind. Iya, benar. Benar ya.

Ya, setuju-setuju. Makanya

waktu di react jaman dulu, biar nggak pusing, ya kita

pakai arrow function aja, kan. Jadi

disk-nya itu nggak masuk ke dalam

si function-nya, kan.

Ada lagi.

Artikelnya tuh

detail banget. Private

properties. Pakai class, tapi pakai

private properties. Biar nggak

itu tadi, biar

method-nya nggak dipakai diluar. Kan tadi

yang, apa, const get greeting sama dengan

person.get greeting tuh. Disk-nya ilang.

Nah, ini dibikin diumpetin

biar nggak, biar nggak dipakai dari

luar, di mana konteks

disk-nya itu nggak ada atau berubah.

Pada saat private properties

muncul, kayaknya

saya udah nggak pakai class lagi.

Kayak gini ya caranya ya, pakai

hashtag ini ya.

Baru lihat nih.

Terus ini ada yang menarik nih.

Kayak tadi, dead sama dengan

dis. Ini kayak gini, kan. Ini

sebenarnya di-structuring, kan.

Sebenarnya ya.

Dis ini adalah yang ini, kan.

Ya, dia ngambil

greeting-nya doang.

Kemudian, ya, di return.

Return-nya pakai arrow function, ya.

Eh, ini return-nya

return function dong, ya.

Meeting callback.

Oh, iya benar. Tuh, manggilnya dua kali.

Ada ini.

Habis itu ada

subjeknya.

Subjeknya John.

Bisa gini ya.

Ya, inilah yang

Cuma ini baca artikel sekali,

ini pasti agak

cuma pas dilihat lagi, pasti

oh gitu.

Inilah yang

biasa anak-anak Twitter

sebut sebagai akrobat, ya.

Banyak akrobatnya.

Junkir balik ini.

Asli, junkir balik

yang pemutar lagi udah ini.

Oke, oke, oke.

Tapi kan ini, kalau pada akhirnya,

kan, ini berbagai cara buat

junkir balik itu untuk

mengeksekusi

perkara prototype dan

inherit waris.

Ya, hukum waris lah ya.

Waris?

Oh iya, iya, iya, waris, mau wariskan gitu ya.

JS nyebelin, makanya dengki.

Wah jangan dengki dong.

Kalau, apa, berbahagialah

temen-temen yang mungkin, sebuah

privilege ya, yang tidak, mungkin

pekerjaannya tidak ada hubungannya sama

JavaScript, ya, selamat

menikmati gitu. Tapi kalau kita yang

mau tidak mau rejekinya

di JavaScript, gimana ya?

Tapi, apa,

jokes aside gitu ya,

memang JavaScript

banyak aneh-anehnya, tapi di sisi yang

lain, kadang-kadang

keanehan itu ada sebabnya

yang mungkin kita nggak tahu.

Semua ada, maksudnya semua

keanehan itu ada sebabnya sih.

Ya itu penjelasan kita sengaja

atau sengaja. Begitu kita tahu penjelasannya

maksudnya seperti apa, akhirnya kita

gini, jadi JavaScript itu adalah

salah satu bahasa yang banyak

disalahartikan jadinya.

Karena banyak konsep-konsep yang berbeda

dengan bahasa yang lain mungkin.

Laperan time-nya juga

maksudnya ekstrim ya, tadinya

konsep awal kan cuma buat

di browser doang.

Makin lama, ya, di mana-mana.

Coba bayangkan ya,

jadi Brandon Egg gitu,

dia tadinya ditawarin, "Oh, boleh

bikin bahasa pemohonan favorite

kamu di browser."

Terus tiba-tiba disuruh bikin.

Disuruh miripin ke Java deh, biar laku.

Ya udah, dia bikin.

Dia udah stress gitu, dia bikin.

Dikasih waktu berapa? 10 hari, 1 sprint.

Terus abis itu, ini bahasanya

buat browser aja, buat

buat validasi form,

kalau ada yang klik ini, nampilin ini,

gitu kan. Terus abis itu tiba-tiba

JavaScript dipakai buat aplikasi.

- Buat server. - Gimana itu?

Dungkir baliknya. Gimana?

Buat server lagi kan? Bisa buat server.

Wah, itu nggak kebayang sih.

Karena memang peruntukannya di awal ya

buat, buat hal, apa ya,

penunjang kan, penunjang dokumen

HTML

yang kalau diklik, dia lari ke mana,

nampilin alert, dan

yang hal-hal sederhana. Terus tiba-tiba

menjadi full

semuanya di load pakai

JavaScript. Sempet kan?

Sepet masa itu dimana kalau kita load,

isinya div kosong,

terus tiba-tiba yang render itu

JavaScript semua kan?

Jadi, ya,

evolusinya

lumayan besar,

jadi kalau banyak yang hal-hal

yang aneh dan unik,

ya, mungkin ada

peninggalan-peninggalan masa lalu

yang belum di clean up gitu, masih,

masih ke... - Dan harus

memfasilitasi berbagai runtime,

harus memfasilitasi berbagai

jenis developer,

di awalnya bikinnya

kejar setoran, kejar tayang,

harus dibenerin secara

incremental.

- Dan yang tidak kalah penting adalah

backward compatibility.

- Nggak boleh breaking.

- Iya, ini

kalau bahasa lain, mungkin ya udah,

breaking change aja, breaking aja, nggak apa-apa.

Orang ngikutin. Kalau JavaScript, nggak bisa.

JavaScript versi 3

yang digelanin di browser sekarang ya harus

bisa jalan, gitu. Jadi, itu yang

harus diakomodir oleh

para pencipta atau

yang kontribusi ke JavaScript

berbagai runtime-nya.

Yang membuat supaya

JavaScript jaman jadul sampai yang

paling modern itu bisa, nggak paling modern sih,

yang cukup modern itu bisa

tetap

bisa di eksekusi di JavaScript,

sorry, di browser.

Itu hal yang sangat challenging.

- Apa nih?

Fun fact, pakai kelas di High Performance JS

pakai kelas dengan metode

Clear lebih cepat dibandingkan pakai

Object. Pakai Object

maksudnya...

- Banding mendefinisiin obyek satu

bersatu. Kalau bikin obyek

satu bersatu, walaupun pakai

apa, yang tadi Pure Function

terpisah, kan semua

masing-masing occupy memory tuh. Bikin obyek

lagi, bikin obyek lagi, bikin obyek lagi,

yang tadi itu kayak getGreeting call.

Misalnya masing-masing obyek punya metode

getGreeting callback. Nah, kalau misalnya

nggak pakai kelas, kayak cuma pakai

definisiin obyek biasa, itu kan

masing-masing kayak dianggap terpisah, tuh.

Kalau misalnya kita punya 20

obyek person, ada

20 metode bawaan.

Kalau pakai kelas kan cuma satu.

Tergantung kita pakainya buat apa.

- Betul. Kembali lagi ke kita.

Jadi kita udah tahu nih, oh, JavaScript

bisa OOP, tapi banyak

apa ya, banyak

banyak ininya, apa,

kejutannya, banyak kejutannya.

Ya udah,

kalau nggak suka, ya pakai yang fungsional.

Kalau nggak suka juga, ya udah, cari platform

lain selain JavaScript.

Sekarang kan udah banyak ya,

ada TypeScript lah, ada Rescript,

ada apa lagi, ada Pure.

- TypeScript lah, JavaScript juga, compile

to JavaScript. - Iya, semuanya compile to

JavaScript, ya. Tapi kan kita istilahnya

meskipun kita belajar bahasa-bahasa

yang ditulis di atas JavaScript,

ketemu error, error-nya JavaScript, kan.

Jadi tetap harus belajar

JavaScript juga, kan, sebelum belajar

bahasa-bahasa itu, kan, yang di atasnya,

gitu kan. - Puas semua

sekarang.

- Haskell.

Haskell, yang

ada scriptnya PureScript, ya, kalau nggak

salah, ya.

- Haskell kayak gimana sih, bahasanya?

- Bahasanya...

Matematis sekali,

matematis.

PureScript,

pada akhirnya tetap belajar

JavaScript, ya mau nggak mau, ya?

- Iya, kalau

develop what what, ya,

harus mau.

- Error-nya JavaScript, masalahnya

masih JavaScript, kecuali nanti

ada browser yang berani

kita pakai TypeScript, gitu.

JavaScript udah nggak bisa,

gitu, nah.

Nah, itu baru.

Karena sempat

ada beberapa moment

browser

ingin mengganti JavaScript,

tapi belum berhasil sampai

sekarang. Microsoft sempat ngeluarin

namanya, apa,

J++, kalau nggak salah, ya, itu

saingannya JavaScript. Mau ditanam

di Microsoft

Internet Explorer,

Internet Explorer,

belum, eh, nggak kan.

Iya, tapi nggak jadi.

Terus, Chrome

juga pernah mau tanam

Dart.

Dulu sempat, ada

wacana kesana, tapi akhirnya

nggak jadi, akhirnya Dart

diadopsi sama Flutter, ya kan?

Ini sempat ada, cuman

ya, balik lagi,

apa, browser kan

nggak cuman satu pemain, kan, pemainnya

banyak, dan pemainnya ini

kan nggak mau dimonopoly oleh satu

pihak doang, kan. Jadi, harus ada kesepakatan

yang TCA39, ya, kalau nggak salah, ya.

Kalau mereka masih tetap

mempertahankan si JavaScript, ya,

ya, kita berharap aja

semoga TypeScript ini, atau

bahasa-bahasa scripting yang diatas

JavaScript, bisa

sedikit-sedikit diadopsi ke

JavaScript, seperti

CoffeeScript, apa, berapa fitur

CoffeeScript yang diadopsi, kayak AeroFunction,

sort, sintaks yang

lebih singkat, dan lain-lain, gitu.

Nah, itu tadi Prototype juga, kan,

diadopsi dari

library external. Dari framework, ya, betul.

Tapi tetap betasannya, bahwa nggak

behavior-nya tetap bakal gitu, kan,

cuman syntactic sugar, atau apalah

yang mempermudahkan, kayak Prototype

juga, kayak mempermudah TypeScript, ya,

mungkin nanti paling ujung-ujungnya gitu, cuman

maksudnya kayak perspektifnya,

cara kerjanya, ya,

nggak, mungkin nggak

berubah secara signifikan, ya.

Signifikan, ya, bisa, mungkin bisa

option, jadi ada, kan, ada

apa, ada, ada wacana, katanya

JavaScript nanti bakal ada type-nya juga,

gitu, kan, mungkin itu optional,

jadi bisa pakai atau bisa nggak.

Untuk, ya itu, kesulitannya

si JavaScript berkembang itu,

terutama di browser, ya, compatibility,

backward compatibility-nya harus dijaga terus, kan.

Iya, Wasm nggak matang-matang,

masih menunggu Rust di front-end,

ya, Wasm-nya mungkin

nulis, nulis, Wasm,

nulis Rust untuk Wasm sebenarnya

mungkin masih udah aman,

gitu, ya, bisa, ya, tapi

yang untuk manipulasi

DOM-nya belum ada, ya, API kesananya

belum, belum ada, ya.

Iya, sama kayak PHP, ya,

ada type tapi optional,

mungkin, kita nggak tahu,

karena ada wacana, katanya,

ya, kita mau tambahin types, gitu, misalkan

kayak flow, kan, jaman dulu ada flow, gitu, kan,

ada, apalagi itu, ada JS, JS doc,

ya, itu juga bisa

digunakan, gitu, ya,

jadi, begitulah cerita kita

tentang JavaScript dan OOP.

OOP dan JavaScript,

cukup nggak warngindul tapi seru, ya.

Iya, banyak, banyak hal yang kita

pelajari juga, kan.

Oke, kalau gitu,

terima kasih ya buat teman-teman semua yang

sudah ikutan diskusi ini,

seru banget diskusinya.

Kita malah lebih banyak belajar

dari komen.

Betul.

Karena, ya,

kita juga banyak yang nggak tahu, ya.

Kita taunya mungkin sebagian

dan banyak juga

teman-teman di sini yang mungkin

yang mengulik lebih dalam dibandingkan

Jita.

Jadi, ya, terima kasih

Insight-nya, terima kasih diskusinya.

Kita ketemu lagi minggu depan.

Ketemu lagi minggu depan di hari yang sama,

di jam yang sama juga, kembali

ke jam 8, ya, dengan topik yang

beda.

Mudah-mudahan nanti kita bisa

diskusi lagi minggu depan.

Oke, kalau begitu, untuk malam ini

sekian dulu. Terima kasih banyak.

Sampai juga minggu depan. Bye-bye.

Deskripsi asli dari YouTube

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. Topik, tautan dan pertanyaan menarik bisa dilayangkan ke https://ksana.in/ngobrolinweb Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.

Episode Terkait

Bagikan:

Suka episode ini?

Episode baru setiap Selasa malam. Dengarkan lewat YouTube, Spotify, atau feed podcast favoritmu.

Pilih Cara Langganan

Memuat komentar dari GitHub Discussions...

Jika komentar tidak muncul karena ekstensi privasi / adblocker, kamu bisa berdiskusi langsung di GitHub Discussions .