Ngobrolin OOP di JS
Ringkasan Episode
Bantu KoreksiEpisode 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
9 Okt 2024
Ngobrolin Deno
Episode ini membahas tentang Deno 2, runtime JavaScript/TypeScript alternatif Node.js yang dibuat oleh Ryan Dahl (pencip...
14 Mei 2024
Ngobrolin Web API Baru
Episode ini membahas berbagai Web API baru yang sedang trending atau akan menjadi tren di tahun 2024. Diskusi dimulai de...
4 Jun 2025
Ngobrolin Astro
Episode ini membahas secara mendalam tentang fitur server-side Astro yang menjadikannya framework yang sangat versatile....
Suka episode ini?
Episode baru setiap Selasa malam. Dengarkan lewat YouTube, Spotify, atau feed podcast favoritmu.
Memuat komentar dari GitHub Discussions...
Jika komentar tidak muncul karena ekstensi privasi / adblocker, kamu bisa berdiskusi langsung di GitHub Discussions .