Skip to content

Latest commit

Β 

History

History
1659 lines (881 loc) Β· 46.3 KB

kulgram.md

File metadata and controls

1659 lines (881 loc) Β· 46.3 KB

2017-09-16 21:55:48 bagongkia said:

 Selamat malam

2017-09-16 21:55:55 bagongkia said:

 Kulgram akan dimulai dalam 5 menit lagi

2017-09-16 21:56:10 zigic said:

 Malam min

2017-09-16 21:56:19 gunawan_indra said:

 woaa..

2017-09-16 21:56:28 gunawan_indra said:

 4mnit lg min

2017-09-16 21:56:36 putraxor said:

 πŸ˜ƒ

2017-09-16 21:56:40 albertawe said:

 hadir

2017-09-16 21:56:50 ferrwan said:

 Selamat Malam Pak @bagongkia

2017-09-16 21:56:52 kolonel_yudisetiawan said:

 Hadir.

2017-09-16 21:57:00 bagongkia said:

 Bagi yang mengenal rekan-rekan yang belum online, silahkan dibangunkan... Terima Kasih.. πŸ™πŸ™

2017-09-16 21:57:02 hendrahuang said:

 malam semua

2017-09-16 21:57:06 gunawan_indra said:

 udah kek show aja

2017-09-16 21:57:15 Erwin Chandra said:

 Hadir

2017-09-16 21:57:25 desdulianto said:

 dilarang stiker @gunawan_indra supaya ga mengganggu

2017-09-16 21:57:27 hendrahuang said:

 selamat berdebat eh brtanya

2017-09-16 21:57:45 kevinongko said:

 Absensi wkwk

2017-09-16 21:58:17 desdulianto said:

 boleh warming up dulu

2017-09-16 21:58:22 desdulianto said:

 menunggu jam 10

2017-09-16 21:58:30 desdulianto said:

 πŸ™Š

2017-09-16 21:58:36 hendrahuang said:

 boleh siapin pertanyaan

2017-09-16 21:58:42 putraxor said:

 2-2-3-4-5-6-7-8

2017-09-16 21:58:48 desdulianto said:

 and our bot is running well

2017-09-16 21:59:00 desdulianto said:

 thanks @ferrwan and @Xinvayne and @kevinongko πŸ‘πŸΏ

2017-09-16 21:59:07 bertzzie said:

 woah

2017-09-16 21:59:10 bertzzie said:

 1 min haha

2017-09-16 21:59:21 gunawan_indra said:

 wahh pemateri dah datang

2017-09-16 21:59:42 desdulianto said:

 silahkan mc @bagongkia boleh dibuka sepertinya acaranya

2017-09-16 21:59:45 bagongkia said:

 Selamat datang di kulgram perdana dari @KongkowITMedan

2017-09-16 22:00:01 Mickeel said:

desdulianto: thanks @ferrwan and @Xinvayne and @kevinongko πŸ‘πŸΏ

 *Sungkem utk botnya

2017-09-16 22:00:06 kevinongko said:

 Semua chat ini direcord sama bot, jd jgn tulis yg sensitif ya seperti pin ATM wk

2017-09-16 22:00:28 bagongkia said:

 Penyelenggaraan kulgram ini merupakan salah satu bentuk perwujudan visi dan misi @KongkowITMedan dalam berbagi pengalaman seputar dunia IT

2017-09-16 22:00:55 bagongkia said:

 Materi kulgram perdana kita kali ini, yaitu Monad: Intro

2017-09-16 22:01:09 bagongkia said:

 Pemateri : Pak Alex Xandra Albert Sim alias @bertzzie

2017-09-16 22:01:29 bagongkia said:

 Masih 11 members yang online

2017-09-16 22:01:44 bertzzie said:

 Ga apa lah, nanti kan bisa baca arsip

2017-09-16 22:01:45 Fran Jaya said:

 Iy pak

2017-09-16 22:01:47 bertzzie said:

 yuk mulai?

2017-09-16 22:02:10 bagongkia said:

 Baik lah kita mulai saja ya...

2017-09-16 22:02:13 adichang said:

 sikat lah

2017-09-16 22:02:15 bagongkia said:

 Silahkan pak Alex...

2017-09-16 22:02:28 bagongkia said:

 πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘

2017-09-16 22:02:36 gunawan_indra said:

 πŸ‘πŸ‘

2017-09-16 22:02:36 bertzzie said:

 Siip thanks @bagongkia

2017-09-16 22:02:41 Boby Christyawan said:

 Oke pak

2017-09-16 22:02:59 Fran Jaya said:

 Mulai aja pak

2017-09-16 22:03:11 bagongkia said:

 setelah pemateri mulai, harap jangan ada yg chat dl ya.. terima kasih

2017-09-16 22:03:13 albertawe said:

 πŸ‘

2017-09-16 22:03:31 bertzzie said:

 Untuk awal mulai, saya akan mulai dari yang paling simpel dulu ya, dan akan disingkat aja biar ga terlalu lama juga. Jadi yang bakal kita bahas hari ini:
 
 1. Monad itu bentuknya seperti apa
 2. Monad itu kasus umum penggunaan monad seperti apa

2017-09-16 22:04:14 bertzzie said:

 Jadi tidak ada bahasan tentang bagaimana membuat monad, dan category theory beserta teman-temannya. Tujuannya supaya yang lain punya gambaran dulu bentuk monad itu seperti apa. Kedepannya kalau lancar, mungkin kita bisa lanjutkan dengan yang beneren full category theory dan functional programming.

2017-09-16 22:05:27 bertzzie said:

 Untuk hari ini, saya akan pakai scala sebagai pengantar, dan saya usahakan kasih penjelasan sintaks jika diperlukan. Selama sudah mengerti dasar fungsional (misal: fungsi itu first-class value) dan pemrograman generik (kalau di java misalnya public T someMethod(T value)) harusnya tidak masalah.

2017-09-16 22:05:53 bertzzie said:

 So let's start. Mulai dari definisi dulu. Apa itu monad?

2017-09-16 22:06:19 bertzzie said:

 Sederhananya, kita bisa anggap monad sebagai pembungkus nilai. Nilai di sini maksudnya adalah satu *value* konkrit dari sebuah data.

2017-09-16 22:06:38 bertzzie said:

 Jadi kalau kita punya sebuah variabel seperti ini:
 
 val data = 100

2017-09-16 22:06:55 bertzzie said:

 tipe data dari variabel data adalah Integer, dengan *value* 100

2017-09-16 22:07:25 bertzzie said:

 Nah, Monad bisa dianggap sebuah tipe data spesial yang *membungkus* nilai kita (yang memiliki tipe data)

2017-09-16 22:08:09 bertzzie said:

 Ketika sesuatu dibungkus, pasti dimasukkan ke kotak dan di dalam kotaknya bisa saja ada barang-barang lain kan. Nah monad juga sama. Ketika kita bungkus sebuah nilai, kita bisa menambahkan *konteks* yang akan ikut bersama nilai ini.

2017-09-16 22:09:02 bertzzie said:

 Misalnya: kita mengambil sebuah data dari database. Biasanya yang dilakukan adalah kita membuat sebuah fungsi untuk mengambil data, misalnya:
 
 def findUserByID(id: Int): User

2017-09-16 22:09:27 bertzzie said:

 fungsi findUserByID ini akan mengembalikan objek dengan tipe data User jika user ditemukan di database.

2017-09-16 22:09:44 bertzzie said:

 Pertanyaannya adalah, apa yang terjadi kalau ternyata user dengan ID yang diberikan di parameter tidak ada?

2017-09-16 22:12:11 desdulianto said:

 biasanya saya kan kembalikan null

2017-09-16 22:12:18 bertzzie said:

 Biasanya ada beberapa pendekatan untuk penanganan error seperti ini. Misalnya:
 
 1. Di bahasa klasik seperti C, akan dikembalikan null jika tidak ada user. Pemanggil fungsi jadi harus mengecek apakah nilai kembalian adalah null, dan menangani kondisi ini manual. Kalau si programmer lupa menangani, akan terjadi error yang berbahaya seperti mengakses memori yang tidak dialokasi.
 
 2. Di bahasa dengan fitur Exception seperti Java, kita bisa melakukan throw dan kembali lagi, pemrosesan error ini diserahkan kepada programmer.
 
 3. Di bahasa seperti lisp atau go, ada fitur pengembalian nilai lebih dari 1 di sebuah fungsi. Tapi kembali lagi, programmer harus menangani.

2017-09-16 22:12:22 Fran Jaya said:

 Tidak akan mengembalikan apa apa ,pak,akan null

2017-09-16 22:12:34 bertzzie said:

 iya bener dikasi null @desdulianto  Fran

2017-09-16 22:13:18 bertzzie said:

 Nah problem dengan null ini adalah null sendiri tidak bisa dipastikan ada, dan programmer tidak harus menangani kasus tersebut. Jadi program kita lebih rentan error.

2017-09-16 22:13:52 bertzzie said:

 Ketika ada monad, kita bisa melakuka "pembungkusan" nilai yang dikembalikan ini dengan konteks spesifik. Misalnya masih dengan contoh pengambilan user dari database.

2017-09-16 22:14:17 bertzzie said:

 Kita bisa memberikan konteks ke data kita, bahwa user ini bisa memiliki kemungkinan ada dan tidak.

2017-09-16 22:14:24 bertzzie said:

 Fungsinya jadi seperti ini:

2017-09-16 22:14:39 bertzzie said:

 def findUserByID(id: Int): Option[User]

2017-09-16 22:15:13 bertzzie said:

 Alih-alih mengembalikan User langsung dan kadang-kadang null, kita berikan satu nilai baru, Option. Option ini bisa memiliki dua nilai: None dan Some

2017-09-16 22:15:33 bertzzie said:

 dan Option bisa *membungkus* data di dalamnya, dalam kasus kita User

2017-09-16 22:15:44 bertzzie said:

 Jadi bisa saja ada Option[Int] atau Option[String] juga

2017-09-16 22:16:09 bertzzie said:

 nah data yang dibungkus si Option ini juga menambahkan konteks: yaitu nilai yang dia bungkus bisa ada dan bisa tidak ada

2017-09-16 22:16:25 bertzzie said:

 ketika nilai tidak ada, maka Option akan memiliki nilai None

2017-09-16 22:16:34 bertzzie said:

 ketika nilai ada, Option akan memberikan Some

2017-09-16 22:17:06 bertzzie said:

 Untungnya apa kalau begini? Sebagai programmer, kita dipaksa oleh compiler untuk melihat dan *acknowledge* keberadaan konteks User

2017-09-16 22:17:28 Willytan434 said:

 Untuk menghindari crash?

2017-09-16 22:17:28 bertzzie said:

 Jadi sampai satu titik ketika kita mau menggunakan nilai User, kita WAJIB melakukan handling kasus di mana User tidak ditemukan

2017-09-16 22:17:30 feetbo90 said:

 l

2017-09-16 22:17:57 bertzzie said:

Willytan434: Untuk menghindari crash?

 Iya, jadi lebih berkurang crash nya karena kita dipaksa untuk menanganni kasus di mana user tidak ada

2017-09-16 22:18:15 bertzzie said:

 Option ini adalah salah satu contoh monad yang paling sederhana di scala

2017-09-16 22:18:21 bertzzie said:

 kalau di haskell, namanya Maybe

2017-09-16 22:18:42 Fran Jaya said:

bertzzie: Jadi sampai satu titik ketika kita mau menggunakan nilai User, kita WAJIB melakukan handling kasus di mana User tidak ditemukan

 Pak,saya mau tanya ,bagaimana user tidak ditemukan?

2017-09-16 22:19:30 Willytan434 said:

Fran Jaya: Pak,saya mau tanya ,bagaimana user tidak ditemukan?

 Setahu saya nilai tersebut apabila null kita kasih nilai opsional sehingga kita menghindari null , betul ga pak?

2017-09-16 22:19:35 bertzzie said:

 Jadi sejauh ini ada 1 hal yang berbeda dari monad dan pemrograman biasa: ketika tidak pakai monad, karena kita tidak dapat konteks apakah user itu ada atau engga, penanganan kasus user tidak ada itu diserahkan ke programmer. Kalau si programmer lupa atau tidak tahu kasus ini ada, maka ya sudah crash saja program nya.

2017-09-16 22:19:42 bagongkia said:

 Nanti ada sesi tanya jawab setelah ini ya.. Harap bersabar..

2017-09-16 22:20:02 bertzzie said:

 Dengan pakai monad, programmer harus menangani kasus itu.

2017-09-16 22:20:14 bertzzie said:

 Bentar ya @Willytan434 Fran abis ini ada penanganannya

2017-09-16 22:21:02 bertzzie said:

 Nah jadi karena kita harus menangani kasus ketika user tidak ada ini, pertanyaan selanjutnya adalah, apa yang harus dilakukan untuk menangani kasus user tidak ada ini?

2017-09-16 22:22:29 bertzzie said:

 Semua monad wajib punya 2 operasi utama:
 
 1. Identity: operasi untuk membuat sebuah data menjadi monad.
 2. Bind: Operasi mengubah sebuah data A menjadi Monad B

2017-09-16 22:22:38 bertzzie said:

 Agak bingung ya. Kita lihat langsung saja pemakaiannya πŸ˜„

2017-09-16 22:22:48 bertzzie said:

 Identity itu sederhana, membuat monad dari data asal

2017-09-16 22:23:26 bertzzie said:

 Kembali ke contoh Option[User] tadi, kalau mau buat monad Option[User] dari sebuah User, kita cukup melakukannya seperti ini:
 
 val user = Option(user)

2017-09-16 22:24:05 bertzzie said:

 Option di sini kalau dijadikan fungsi kira-kira begini bentuknya:
 
 def Option[T](data: T): Option[T]

2017-09-16 22:24:24 bertzzie said:

 fungsi Option bisa mengambil data dalam tipe apapun, dan akan mengembalikan Option[T]

2017-09-16 22:24:38 bertzzie said:

 ini fungsi identitas. Tipe dari variabel user di atas adalah Option[User]

2017-09-16 22:25:13 bertzzie said:

 nah operasi kedua, bind atau yang lebih dikenal dengan flatMap di java dan scala, atau operator >>= di haskell

2017-09-16 22:25:50 bertzzie said:

 punya aturan sederhana: flatMap adalah pemetaan yang akan melakukan penyederhanaan tipe menjadi bentuk awal

2017-09-16 22:26:46 bertzzie said:

 jadi kalau kita punya sebuah fungsi pemetaan map yang mengubah 1 tipe menjadi tipe atau nilai lain:
 
 def map[A, B](f: A => B ): B

2017-09-16 22:27:22 bertzzie said:

 atau dengan contoh langsung:
 
 val a = List(1, 2, 3, 4)
 val b = a.map(v => v * 2

2017-09-16 22:27:34 bertzzie said:

 maka b akan berisi List(2, 4, 6, 8 )

2017-09-16 22:28:00 bertzzie said:

 semua nilai a dikali dua dan dimasukkan ke b

2017-09-16 22:28:49 bertzzie said:

 nah flatMap memiliki kemiripan dengan map dengan sedikit perbedaan

2017-09-16 22:28:55 bertzzie said:

 signature nya seperti ini:

2017-09-16 22:29:02 bertzzie said:

 def flatMap[B](f: (A) => U[B]): U[B]

2017-09-16 22:29:25 bertzzie said:

 perbedaan utama ada di flatMap menerima A dan menjadikannya Monad U[B]

2017-09-16 22:29:32 bertzzie said:

 di mana A bisa jadi monad atau bukan

2017-09-16 22:30:12 bertzzie said:

 dengan contoh yang sama:
 
 val a = List(1, 2, 3, 4)
 val b = a.map(v => List(v * 2)
 
 di sini b akan bernilai List(List(2), List(4), List(6), List(8))

2017-09-16 22:30:17 bertzzie said:

 List[List[Int]]

2017-09-16 22:30:38 bertzzie said:

 dengan flatmap, kita menggabungkan kembali List[List[Int]] menjadi List[Int]

2017-09-16 22:31:36 bertzzie said:

 jadi dengan flatMap, kita bisa mengubah sebuah monad a menjadi monad b, tanpa kehilnagna konteks si A dan tanpa meningkatkan kompleksitas sampai sampai bisa seperti Option[Option[Option[Data]]]

2017-09-16 22:31:47 bertzzie said:

 nah kembali ke findUserByID

2017-09-16 22:32:01 bertzzie said:

 bagaimana jika kita ingin memproses data dan menangani kasus di mana user tidak ada?

2017-09-16 22:32:36 bertzzie said:

 ketika kita pakai fungsi tadi, misalnya:
 
 val user = findUserByID(10)
 
 user akan bertipe Option[User]

2017-09-16 22:32:44 Fran Jaya said:

 Finduserby id null pak?

2017-09-16 22:32:53 bertzzie said:

 engga null

2017-09-16 22:32:59 bertzzie said:

 tapi misalnya kalau id tidak ada di database

2017-09-16 22:33:09 Fran Jaya said:

 Val user=finduserbyid(null)

2017-09-16 22:33:32 bertzzie said:

 ya kalau dimasukkan parameter null nanti akan dikembalikan None karena tidak ada user dengan ID null di database

2017-09-16 22:33:37 bertzzie said:

 sebenarnya itu bakal compile error juga sih

2017-09-16 22:33:41 bertzzie said:

 but that's not the point

2017-09-16 22:33:50 bertzzie said:

bertzzie: ketika kita pakai fungsi tadi, misalnya:

val user = findUserByID(10)

user akan bertipe Option[User]

 kembali ke sini

2017-09-16 22:34:11 bertzzie said:

 kalau kita punya kode
 
 val user = findUserByID(10)

2017-09-16 22:34:11 kevinongko said:

Fran Jaya: Finduserby id null pak?

 Pertanyaan bs di draft dl, nanti ada sesi bertanya, makasi

2017-09-16 22:34:29 bertzzie said:

 dan ternyata tidak ada user dengan ID 10 di database

2017-09-16 22:35:19 bertzzie said:

 yang pertama adalah kita bisa memproses data seolah-olah user itu ada di database, dengan menggunakan flatMap

2017-09-16 22:35:45 bertzzie said:

 misal ingin ambil username nya:
 
 val username = user.flatMap(u => u.userName)

2017-09-16 22:35:58 bertzzie said:

 di sini, tipe dari username akan jadi Option[String], bukan lagi Option[User]

2017-09-16 22:36:02 bertzzie said:

 kenapa begitu?

2017-09-16 22:36:25 bertzzie said:

 karena waktu kita memasukkan fungsi u => u.userName, kita mengembalikan u.userName yang adalah string

2017-09-16 22:36:54 bertzzie said:

 dan secara otomatis, sesuai signature flatMap, maka akan dikembalikan dalam bentuk monad lagi, yaitu Option[String]

2017-09-16 22:37:25 bertzzie said:

 kalau misalnya kita punya field yang punya konteks lagi, misalnya field yang boleh diisi dan tidak diisi, maka kita bisa:
 
 val anak = user.flatMap(u => u.child)

2017-09-16 22:37:34 bertzzie said:

 dengan asumsi User.child itu bertipe Option[User]

2017-09-16 22:37:44 bertzzie said:

 maka anak tipenya adalah Option[User] juta

2017-09-16 22:37:56 bertzzie said:

 beda dengan kalau kita lakukan:
 
 val anak = user.map(u => u.child)

2017-09-16 22:38:06 bertzzie said:

 di sini anak tipenya adalah Option[Option[User]]

2017-09-16 22:38:35 bertzzie said:

 nah, dengan adanya monad yang menyimpan konteks ini, ktia bisa melakukan operasi apapun terhadap user, sampai ketika kita mau menggunakan data user nya

2017-09-16 22:40:24 bertzzie said:

 ketika mau menggukana data user, kode yang menggunakan data ini *dipaksa* untuk memproses, yaitu misalnya kalau di scala dengan pattern matching:
 
 `user match {
 case Some(u) => println(s"User name: ${u.userName}")
 case None => println("User not found")
 }`

2017-09-16 22:40:57 bertzzie said:

 jadi ketika kita sudah benar-benar harus menggunakan, sampai di satu titik kita akan dipaksa untuk menangani kasus ini

2017-09-16 22:41:11 bertzzie said:

 tapi ini sudah di luar scope monad, karena penanganan tiap-tiap monad berbeda-beda

2017-09-16 22:42:10 bertzzie said:

 Intinya untuk pembahasan kali ini adalah:
 
 Monad itu menyimpan konteks. Konteks ini bentuknya bisa banyak: bisa apakah user ada atau tidak (`Maybe` / Option monad), bisa satu data yang akan ada di masa depan Future monad, bisa apakah fungsi mengalami error Try monad

2017-09-16 22:42:40 bertzzie said:

 penanganan terhadap masing-masing monad akan berbeda, tapi pada umumyna akan memerlukan pattern matching

2017-09-16 22:43:00 bertzzie said:

 operasi terhadap data yang ada di dalam monad sendiri bisa dilakukan dengan flatMap

2017-09-16 22:43:12 bertzzie said:

 Dan kalau jeli, sebenarnya List di scala juga adalah monad

2017-09-16 22:44:05 bertzzie said:

 Hari ini begini dulu ya. Nanti next time kita baru bahas apa itu law of monad dan contoh penggunaan monad lain dan bentuk nya untuk yang lebih detail dan abstrak juga

2017-09-16 22:44:14 bertzzie said:

 karena ngelihat ini aja pasti uda banyak pertanyaan πŸ˜„

2017-09-16 22:44:22 bertzzie said:

 @bagongkia mungkin bisa dimasukkan ke sesi tanya jawab?

2017-09-16 22:44:34 bagongkia said:

 Hahaha... Terima kasih pak @bertzzie

2017-09-16 22:44:43 bagongkia said:

 Kita lanjutkan ke sesi tanya jawab

2017-09-16 22:44:56 Ng_Wilson said:

 πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘

2017-09-16 22:45:07 bagongkia said:

 silahkan yang ingin bertanya, langsung saja...

2017-09-16 22:45:47 desdulianto said:

 terima kasih pak @bertzzie , pertanyaan saya nih, untuk monad apakah selalu hasilnya diproses dengan flatMap? atau ada case lain?

2017-09-16 22:46:03 Fran Jaya said:

bagongkia: silahkan yang ingin bertanya, langsung saja...

 Pak,saya mau tanya,bagaimana proses ,jika user tidak ditemukan?

2017-09-16 22:46:52 bagongkia said:

 Masih ada yang typing... kita tunggu sebentar sblm saya hold pertanyaannya..

2017-09-16 22:46:58 bertzzie said:

desdulianto: terima kasih pak @bertzzie , pertanyaan saya nih, untuk monad apakah selalu hasilnya diproses dengan flatMap? atau ada case lain?

 flatMap dan map bisa, dan ini biasanya uda cukup buat hampir semua case sampai data mau digunakan

2017-09-16 22:47:13 adichang said:

 question: kapan saja musti pakai monad ? ada sisi negatif nya ga dari monad ini ?

2017-09-16 22:47:15 bertzzie said:

Fran Jaya: Pak,saya mau tanya,bagaimana proses ,jika user tidak ditemukan?

 pattern matching. lihat contoh ini di atas:
 
 
 user match {
 case Some(u) => println(s"User name: ${u.userName}")
 case None => println("User not found")
 }

2017-09-16 22:47:50 bagongkia said:

 Oke.. di pause dl ya pertanyaannya...

2017-09-16 22:48:04 kevinongko said:

 πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘

2017-09-16 22:48:23 feetbo90 said:

bertzzie: Intinya untuk pembahasan kali ini adalah:

Monad itu menyimpan konteks. Konteks ini bentuknya bisa banyak: bisa apakah user ada atau tidak (Maybe / Option monad), bisa satu data yang akan ada di masa depan Future monad, bisa apakah fungsi mengalami error Try monad

 apakah ada konteks yang lain?  kalau yg om bilang itu menyimpan konteks untuk handling error

2017-09-16 22:48:24 Fran Jaya said:

 Sip pak

2017-09-16 22:49:17 bertzzie said:

adichang: question: kapan saja musti pakai monad ? ada sisi negatif nya ga dari monad ini ?

 dalam pemrograman fungsional yang murni, basically kita ga punya side effect pak, jadi kalau perlu side effect (I/O, threading, dst) harus pakai monad.
 
 ketika ada konteks yang perlu diikutkan dengan data tapi engga mau harus dihandle setiap saat juga bisa pakai monad. misalnya apakah ada exception atau tidak. Ini sekalian jawaban @feetbo90  ya. Contoh konteksnya: ada exception atau tidak, data yang akan datang di masa depan sudah ada atau timeout, dst.

2017-09-16 22:49:30 bertzzie said:

 sisi negatifnya ada di maintainability

2017-09-16 22:49:58 bertzzie said:

 kalau tanpa disertai fitur bahasa yang kuat, kode yang pakai monad biasanya lebih sulit dibaca dan diproses mata karena kita harus selalu *aware* terhadap konteks kode kita

2017-09-16 22:50:11 bertzzie said:

 misalnya, ada kode lengendaris di blibli yang kira-kira bentuknya:
 
 `

2017-09-16 22:51:00 bertzzie said:

 yang susah banget dibaca dan diproses

2017-09-16 22:51:46 bertzzie said:

 scala bisa menyelesaikan ini dengan sintaks khusus di for (`for` di scala itu bukan looping tapi flatmap) dengan:
 
 
 for {
 xx <- xxxData
 x   <- xx
 } yield {
 // proses

2017-09-16 22:51:50 Fran Jaya said:

 Pak ,bolehkah,saya minta contoh maybe,jika ditemukan user dan jika tidak ditemukan

2017-09-16 22:52:01 bertzzie said:

Fran Jaya: Pak ,bolehkah,saya minta contoh maybe,jika ditemukan user dan jika tidak ditemukan

 user match {
 case Some(u) => println(s"User name: ${u.userName}")
 case None => println("User not found")
 }

2017-09-16 22:52:12 bertzzie said:

 jika user ditemukan print Username: nama user

2017-09-16 22:52:19 bertzzie said:

 jika tidak ditemukan print User not found

2017-09-16 22:52:25 bertzzie said:

 kode itu engga ngerti di mana ya?

2017-09-16 22:53:26 bagongkia said:

 Ada tanggapan dari yang lain?

2017-09-16 22:53:46 mattxw said:

 Maaf, saya kurang paham bahasanya, user match itu mirip switch gitu ya?

2017-09-16 22:54:02 bertzzie said:

mattxw: Maaf, saya kurang paham bahasanya, user match itu mirip switch gitu ya?

 iya, tapi yang di bandingkan itu tipe data, bukan isi data

2017-09-16 22:54:25 bertzzie said:

 kalau switch kan yang dibandingkan adalah isi, misalnya
 
 switch (data) {
 case 1
 case 2
 }

2017-09-16 22:54:27 kolonel_yudisetiawan said:

 Sesi Q&A nya masih ada kan? Saya mau tanya. Monad ini tersedia di setiap bahasa pemrograman?

2017-09-16 22:54:42 bertzzie said:

 kalau ini namanya "pattern matching" (silahkan di google), semua bahasa fungsional punya

2017-09-16 22:54:47 bertzzie said:

 untuk ngebandingin tipe data

2017-09-16 22:54:51 Fran Jaya said:

bertzzie: kode itu engga ngerti di mana ya?

 Maaf pak,soalnya ada option(user),dan ni termasuk dalam maybe pak?

2017-09-16 22:54:59 bagongkia said:

 Pertanyaannya hold dlu ya...

2017-09-16 22:55:24 bagongkia said:

 Biar agak terstruktur, nanti saya diberikan kesempatan kepada 5 orang dulu untuk mengajukan pertanyaan

2017-09-16 22:55:37 bertzzie said:

kolonel_yudisetiawan: Sesi Q&A nya masih ada kan? Saya mau tanya. Monad ini tersedia di setiap bahasa pemrograman?

 monad ini seperti design pattern, selama kita punya model yang bisa menampugn dan mengekspresikan identity dan flatMap, bisa di bahasa apapun termasuk C dan assembly

2017-09-16 22:56:04 bagongkia said:

 silahkan mengajukan diri untuk bertanya dengan command
 #ask nama_anda
 hold dulu pertanyaannya sampai saya mention
 
 contoh:
 #ask Reja

2017-09-16 22:56:14 bertzzie said:

Fran Jaya: Maaf pak,soalnya ada option(user),dan ni termasuk dalam maybe pak?

 Option dan Maybe itu sama, cuman beda isitlah karena beda bahasa pemrograman. Option itu punya scala, Maybe punya haskell. penggunaan dan konsepnya sama persis. kaya coca cola dan pepsi

2017-09-16 22:56:52 Fran Jaya said:

 Pak ,boleh minta perbedaan antara flatmap.dengan map,kan tadi bapak ada bilang sedilit perbedaan ,boleh minta contoh?

2017-09-16 22:57:03 putraxor said:

 😒

2017-09-16 22:57:09 kolonel_yudisetiawan said:

bertzzie: monad ini seperti design pattern, selama kita punya model yang bisa menampugn dan mengekspresikan identity dan flatMap, bisa di bahasa apapun termasuk C dan assembly

 Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap. Berarti, ReactiveX itu termasuk monad ya?

2017-09-16 22:57:28 kevinongko said:

 Halo2 semuanya, tolong gunakan format #ask yg sudah dijelaskan moderator ya

2017-09-16 22:57:37 kevinongko said:

 Supaya pemateri bs menjawab satu satu

2017-09-16 22:57:55 kevinongko said:

 Hold dl pertanyaanya sampai diberi aba2 dr moderator @bagongkia

2017-09-16 22:58:36 bagongkia said:

 start dari sini ikuti aturan yang saya jelaskan ya..

2017-09-16 22:58:39 bagongkia said:

 silahkan #ask

2017-09-16 22:58:47 delanobgt said:

 #ask irvin

2017-09-16 22:58:57 kolonel_yudisetiawan said:

 #ask Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap dan Map. Berarti, ReactiveX itu termasuk monad ya?

2017-09-16 22:59:07 kevinongko said:

kolonel_yudisetiawan: #ask Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap dan Map. Berarti, ReactiveX itu termasuk monad ya?

 Formatnya hanya #ask nama

2017-09-16 22:59:11 Fran Jaya said:

 #ask Fran Jaya:
 Pak ,boleh minta perbedaan antara flatmap.dengan map,kan tadi bapak ada bilang sedilit perbedaan ,boleh minta contoh?

2017-09-16 22:59:13 kevinongko said:

 Pertanyaan disimpan dl

2017-09-16 22:59:24 kevinongko said:

delanobgt: #ask irvin

 Seperti ini

2017-09-16 22:59:41 bertzzie said:

Fran Jaya: Pak ,boleh minta perbedaan antara flatmap.dengan map,kan tadi bapak ada bilang sedilit perbedaan ,boleh minta contoh?

 map memetakan satu nilai ke nilai lain, flatmap memetakan satu nilai ke *monad*
 
 contoh:
 val l = List(1, 2, 3)
 l.map(x => List(x * 2)) // hasil: List(List(2), List(4), List(6)) (tipe: List[List[Int]])
 
 val l = List(1, 2, 3)
 l.flatMap(x => List(x * 2)) // hasil: List(2, 4, 6) (tipe: List[Int])
 
 perhatikan bedanya cuman ada di apakah tipe akhirnya ada di List[List[Int]] atau List[Int]. Kodenya sm persis cuman 1 map dan 1 flatmap

2017-09-16 23:00:16 bertzzie said:

kolonel_yudisetiawan: #ask Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap dan Map. Berarti, ReactiveX itu termasuk monad ya?

 ReactiveX bisa support monad karena punya flatmap dan identity. Plus flatmap nya memenuhi syarat 3 hukum monad (yang belum dibahas sekarang πŸ˜„)

2017-09-16 23:01:01 bagongkia said:

 Silahkan pertanyaannya Pak Irvin @delanobgt

2017-09-16 23:01:46 delanobgt said:

 Selain sbg pengingat error handling, kira2 keuntungan apa lagi ya dri penggunaan monad

2017-09-16 23:01:56 delanobgt said:

 *pak

2017-09-16 23:02:06 feetbo90 said:

 #ask feetbo

2017-09-16 23:03:03 bertzzie said:

delanobgt: Selain sbg pengingat error handling, kira2 keuntungan apa lagi ya dri penggunaan monad

 konteks yang engga hilang dan bisa diproses kapanpun. Misalnya untuk query database bisa dismpan konteks koneksi ke database, jadi ketika nilai sudah atau mau dipakai, bisa di close. Engga ada lagi istilah lupa close connection dan database mati

2017-09-16 23:03:33 bertzzie said:

 dan kapan ngeclose nya ada kontrolnya sepenuhnya di tangan kita

2017-09-16 23:03:50 bagongkia said:

 tanggapannya pak @delanobgt ???

2017-09-16 23:04:14 delanobgt said:

 Oke makasih pak πŸ˜€

2017-09-16 23:04:22 Fran Jaya said:

 #ask fran jaya: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?

2017-09-16 23:04:38 bagongkia said:

 Kita lanjut ke Pak Iqbal @feetbo90

2017-09-16 23:04:41 bagongkia said:

 Silahkan pertanyaannya

2017-09-16 23:04:58 kevinongko said:

Fran Jaya: #ask fran jaya: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?

 Antri ya pak dengan format #ask nama makasih

2017-09-16 23:05:12 feetbo90 said:

 intinya kita memakai monad akan mengakses atau mengambil data nah jika data ada berarti tdk memakai monad,  nah jika data tidak ada kita memakai monad untuk memanipulasi data agar tidak terjadi crash,  nah pasti untuk proses I/O akses data internet sudah pasti bisa dipakai kan?  tergantung tipe data apakah itu flatmap,  list,  hashmap dll

2017-09-16 23:05:37 feetbo90 said:

 yg dikembalikan oleh monad

2017-09-16 23:05:45 Fran Jaya said:

 #ask pak alex

2017-09-16 23:06:34 Fran Jaya said:

 #ask pak alex: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?

2017-09-16 23:06:56 kevinongko said:

Fran Jaya: #ask pak alex: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?

 Sabar om, tunggu moderator

2017-09-16 23:07:30 bertzzie said:

feetbo90: intinya kita memakai monad akan mengakses atau mengambil data nah jika data ada berarti tdk memakai monad, nah jika data tidak ada kita memakai monad untuk memanipulasi data agar tidak terjadi crash, nah pasti untuk proses I/O akses data internet sudah pasti bisa dipakai kan? tergantung tipe data apakah itu flatmap, list, hashmap dll

 engga harus data, itu cuman contoh nya data. konteks bisa juga yang engga berhubungan dengan data, misalnya kalau bikin game bisa ada konteks apakah karakter sedang menjalankan animasi atau konteks status karakter
 
 Untuk akses data internet, konteksnya biasanya yang berhubungan dengan jaringan: status timeout, keberhasilan data, dst
 
 Data yang dibungkus si monad ya kita sendiri yang tentukan. Misalnya kalau dikembalikannya JSON, kita bisa proses JSON nya menjadi objek

2017-09-16 23:08:11 bertzzie said:

Fran Jaya: #ask pak alex: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?

 ini butuh sejam lagi kayanya. lain waktu aja ya πŸ˜„ tapi bisa coba baca2 soal "Future Monad"

2017-09-16 23:08:13 bertzzie said:

 itu keywordnya

2017-09-16 23:08:29 feetbo90 said:

bertzzie: engga harus data, itu cuman contoh nya data. konteks bisa juga yang engga berhubungan dengan data, misalnya kalau bikin game bisa ada konteks apakah karakter sedang menjalankan animasi atau konteks status karakter

Untuk akses data internet, konteksnya biasanya yang berhubungan dengan jaringan: status timeout, keberhasilan data, dst

Data yang dibungkus si monad ya kita sendiri yang tentukan. Misalnya kalau dikembalikannya JSON, kita bisa proses JSON nya menjadi objek

 ok terjawab arigatou...

2017-09-16 23:08:33 bagongkia said:

 Langsung ditanggapi saja kalo ada tanggapan ya..

2017-09-16 23:08:38 Fran Jaya said:

bertzzie: ini butuh sejam lagi kayanya. lain waktu aja ya πŸ˜„ tapi bisa coba baca2 soal "Future Monad"

 Ok pak,makasih pak

2017-09-16 23:08:51 bagongkia said:

 Silahkan yang masih mau bertanya #ask [nama anda]

2017-09-16 23:09:59 bertzzie said:

 Ingat ya kalo yang kita bahas hari ini masih super dangkal, dan belum nyentuh hukum monad (monadic law) juga. Masih hanya supaya ada feeling monad itu kira-kira bentuknya gimana aja. Next time kita dalami lagi. So feel free tanya2

2017-09-16 23:11:04 kolonel_yudisetiawan said:

 #ask Yudi Setiawan

2017-09-16 23:11:11 bagongkia said:

 Silahkan yudi

2017-09-16 23:12:25 kolonel_yudisetiawan said:

 Mau tanya. Masih belum paham tentang Monad. Dampak nyatanya ketika memakai monad dan tidak pakai monad apa ya? Monad ini cuma istilah saja kah atau gimana? Sebab, selama ini saya ReactiveX tapi, baru tau sekarang ada istilah monad.

2017-09-16 23:14:47 putraxor said:

 #ask Putra

2017-09-16 23:16:03 bertzzie said:

kolonel_yudisetiawan: Mau tanya. Masih belum paham tentang Monad. Dampak nyatanya ketika memakai monad dan tidak pakai monad apa ya? Monad ini cuma istilah saja kah atau gimana? Sebab, selama ini saya pakai ReactiveX tapi, baru tau sekarang ada istilah monad. Kalau untuk meng-handle data null itu bukannya tinggal dilakukan pengecekan saja ya. Buat apa ada monad kalau cuma untuk meng-handle data null doang. Kan bisa dilakukan pengecekan null seperti biasa. if data != null

 Monad ini kalau di dunia OOP bisa dibilang adalah "design pattern". Cuma satu set aturan yang kalau dipenuhi oleh tipe data tertentu, bisa dipakai untuk memudahkan hidup programmer dan bikin program yang lebih high quality karena jarang crash.
 
 Dampak ketika menggunakan monad yang paling terlihat adalah ketika kita punya konteks yang harus diproses (apakah user ada atau tidak, apakah koneksi database masih terbuka atau tidak), sebagai developer kita dipaksa buat melakukan handling ke konteks itu. Kalau engga pakai kan bisa lupa atau engga tau sekalian.
 
 Flatmap juga bisa di-chain (dilakukan pemanggilan berantai) untuk proses data terurut dan simple

2017-09-16 23:16:20 bertzzie said:

 Lebih ke masalah maintainability dan reliability initnya @kolonel_yudisetiawan

2017-09-16 23:16:52 kolonel_yudisetiawan said:

 Lebih ke masalah penulisan kodenya ya?

2017-09-16 23:17:06 desdulianto said:

 Saya sedikit kasi masukan mungkin ya

2017-09-16 23:17:12 bertzzie said:

kolonel_yudisetiawan: Lebih ke masalah penulisan kodenya ya?

 iya, maksa developer buat handling kasus tertentu dan detail tertentu

2017-09-16 23:17:18 bertzzie said:

desdulianto: Saya sedikit kasi masukan mungkin ya

 silahkan pak πŸ˜„

2017-09-16 23:17:20 bagongkia said:

 silahkan pak @desdulianto

2017-09-16 23:17:28 desdulianto said:

 tujuannya mungkin lebih ke memaksa dev untuk menghandle jika null tadi

2017-09-16 23:17:49 desdulianto said:

 kalau ga pakai monad kan jaidnya tergantung programmernya apakah mau di if x != null atau tidak

2017-09-16 23:18:12 desdulianto said:

 sedangkan kalau pakai monad si programmer harus menghandle seluruh jenis data bungkusan si monad

2017-09-16 23:18:26 desdulianto said:

 mungkin mirip dengan x? nya di kotlin

2017-09-16 23:18:43 kolonel_yudisetiawan said:

 Ouh, pencegahan terjadinya null ya?

2017-09-16 23:18:52 bagongkia said:

 Silahkan pertanyaannya pak Putra @putraxor ...

2017-09-16 23:18:56 kolonel_yudisetiawan said:

 Dari tadi kek ngomong Kotlin gitu.

2017-09-16 23:19:01 bertzzie said:

 iya bener pak @desdulianto. keep in mind kalau ini bukan untuk kasus null aja tapi kaya koneksi database engga di close, animasi karakter mati engga diputer waktu karakter mati, dst

2017-09-16 23:19:12 bertzzie said:

 konteks ini bisa banyak dan ga terbatas, sesuai kebutuhan kita

2017-09-16 23:19:19 putraxor said:

 Draft pertanyaanya udah ketanya duluan, dan udah terjawab πŸ˜…

2017-09-16 23:19:21 bertzzie said:

 kembali lagi, Option itu cuman salah satu jenis monad

2017-09-16 23:19:22 putraxor said:

 Untuk pembahasan monad sampai sekarang, khusus di bahasa pemrograman yang udah ada fitur null safety, pendekatan return null lebih less complicated ya pak, karena pada akhirnya programmer juga yang harus handle opsinya

2017-09-16 23:19:31 feetbo90 said:

bertzzie: engga harus data, itu cuman contoh nya data. konteks bisa juga yang engga berhubungan dengan data, misalnya kalau bikin game bisa ada konteks apakah karakter sedang menjalankan animasi atau konteks status karakter

Untuk akses data internet, konteksnya biasanya yang berhubungan dengan jaringan: status timeout, keberhasilan data, dst

Data yang dibungkus si monad ya kita sendiri yang tentukan. Misalnya kalau dikembalikannya JSON, kita bisa proses JSON nya menjadi objek

 sama kayak ini penjelasannya

2017-09-16 23:19:51 bagongkia said:

putraxor: Draft pertanyaanya udah ketanya duluan, dan udah terjawab πŸ˜…

 gpp... lanjut saja.. haha..

2017-09-16 23:20:09 desdulianto said:

 nah bisa dibilang ? nya di kotlin adalah versi monad yang untuk manusia fana yang belum paham monad kali ya ☺️

2017-09-16 23:20:12 bertzzie said:

feetbo90: sama kayak ini penjelasannya

 iya, dan handle nya bisa kapanpun jadi kita sendiri nentuin waktu tepatnya kapan. tapi tetep harus dihandle

2017-09-16 23:20:14 desdulianto said:

 dipermudah penggunaannya

2017-09-16 23:20:32 bertzzie said:

desdulianto: nah bisa dibilang ? nya di kotlin adalah versi monad yang untuk manusia fana yang belum paham monad kali ya ☺️

 itu bukan monad sih sebenarnya, cuman pendekatan menangani null pointer aja

2017-09-16 23:20:37 bertzzie said:

 ada banyak pendekatan lain kok

2017-09-16 23:20:39 kolonel_yudisetiawan said:

desdulianto: nah bisa dibilang ? nya di kotlin adalah versi monad yang untuk manusia fana yang belum paham monad kali ya ☺️

 Now I'm understand. Thanks. Null Safety.

2017-09-16 23:21:09 adichang said:

 ? itu cuman operator buat cek null atau tidak saja deh

2017-09-16 23:21:15 adichang said:

 harusnya bukan monad

2017-09-16 23:21:21 bertzzie said:

 again, Option itu cuman satu jenis. Ada Future monad, IO Monad, dst jg

2017-09-16 23:21:25 adichang said:

 sintaks sugar aja malah

2017-09-16 23:21:38 bertzzie said:

adichang: ? itu cuman operator buat cek null atau tidak saja deh

 iya bukan monad, cuman syntactic sugar

2017-09-16 23:21:41 bagongkia said:

 Daftar untuk mengajukan pertanyaan berikutnya.... Format : #ask [nama anda]

2017-09-16 23:22:12 Fran Jaya said:

 #ask fran jaya:
 Pak,bagaimana mengatasi suatu nilai monad ,apabila nilai bungkusan dalam.monad  itu banyak,jika satu per satu diatasi kan memakan waktu yang lama,apakah dengan monad ini,ada cara agar bisa mempercepat pengatasan kasus masalahnya?

2017-09-16 23:22:54 bertzzie said:

Fran Jaya: #ask fran jaya: Pak,bagaimana mengatasi suatu nilai monad ,apabila nilai bungkusan dalam.monad itu banyak,jika satu per satu diatasi kan memakan waktu yang lama,apakah dengan monad ini,ada cara agar bisa mempercepat pengatasan kasus masalahnya?

 engga, monad ini cuman pattern, engga ada hubungannya dengan performa

2017-09-16 23:24:01 bagongkia said:

 Batas pengajuan pertanyaan sampai jam 23.30 ya...

2017-09-16 23:24:12 desdulianto said:

 mc nya udah ngantuk mo tidur ~~~~

2017-09-16 23:24:19 bertzzie said:

 eh tapi ingat ya, contoh null safety tadi ya cuman contoh. Monad ini ga ada hubugannya dengan null safety sama sekali

2017-09-16 23:24:27 bertzzie said:

 ada banyak pendekatan null safety lain

2017-09-16 23:24:29 bertzzie said:

 dan ada banyak jenis lain

2017-09-16 23:24:48 kevinongko said:

 format #ask [nama anda] sblm 11.30 PM

2017-09-16 23:24:51 bertzzie said:

 inti dari monad itu adalah *pembungkusan nilai* dan operasi *identity* dan *flatmap*

2017-09-16 23:24:56 bertzzie said:

 bukan null safety

2017-09-16 23:25:14 kolonel_yudisetiawan said:

 Cuma mau bantu. Ini ada sedikit artikel tentang monad di Java.
 
 https://medium.com/@afcastano/monads-for-java-developers-part-1-the-optional-monad-aa6e797b8a6e

2017-09-16 23:25:16 bertzzie said:

 bisa coba baca-baca contoh monad lain kaya Future Monad, IO Monad

2017-09-16 23:25:40 feetbo90 said:

bertzzie: bisa coba baca-baca contoh monad lain kaya Future Monad, IO Monad

 youp tq ko

2017-09-16 23:26:00 kevinongko said:

 5menit lg, format #ask [nama anda]

2017-09-16 23:26:15 Fran Jaya said:

kolonel_yudisetiawan: Cuma mau bantu. Ini ada sedikit artikel tentang monad di Java.

https://medium.com/@afcastano/monads-for-java-developers-part-1-the-optional-monad-aa6e797b8a6e

 Ok makasih pak

2017-09-16 23:26:15 putraxor said:

 Ok terimakasih atas ilmunya pak Alex, sangat bermanfaat

2017-09-16 23:26:23 bertzzie said:

kolonel_yudisetiawan: Cuma mau bantu. Ini ada sedikit artikel tentang monad di Java.

https://medium.com/@afcastano/monads-for-java-developers-part-1-the-optional-monad-aa6e797b8a6e

 ini uda bahas sampai monad law sih, sengaja engga saya bring up karena kejauhan nanti

2017-09-16 23:26:25 bertzzie said:

 hahaha

2017-09-16 23:26:36 bertzzie said:

 masih mau kasih feel monad itu bentuknya seperti apa aja

2017-09-16 23:26:58 bertzzie said:

putraxor: Ok terimakasih atas ilmunya pak Alex, sangat bermanfaat

 sip

2017-09-16 23:27:11 desdulianto said:

 terima kasih pak @bertzzie sudah meluangkan waktunya

2017-09-16 23:27:32 bagongkia said:

 Masih 3 menit untuk mengajukan pertanyaan sebelum ditutup..

2017-09-16 23:27:32 steven_ch3n said:

 makasih Pak @bertzzie  utk sharing ilmu nya

2017-09-16 23:27:43 kevinongko said:

 last question #ask [nama anda]

2017-09-16 23:28:12 kolonel_yudisetiawan said:

 Thanks pak Alex untuk kulgram-nya. Di tunggu next kulgram-nya. πŸ‘πŸ‘πŸ‘

2017-09-16 23:28:27 bertzzie said:

 πŸ‘πŸ‘ sama sama

2017-09-16 23:28:38 bertzzie said:

 pengen ngelanjut monad law sama seluruh category theory kalau bisa

2017-09-16 23:28:44 bertzzie said:

 next time lah luang2 lagi haha

2017-09-16 23:29:26 kevinongko said:

 1 minit last chance

2017-09-16 23:29:50 Fran Jaya said:

bertzzie: nah, dengan adanya monad yang menyimpan konteks ini, ktia bisa melakukan operasi apapun terhadap user, sampai ketika kita mau menggunakan data user nya

 #ask fran jaya: pak saya belum paham yang dimaksud bapak pada kalimat ni?

2017-09-16 23:30:02 bertzzie said:

Fran Jaya: #ask fran jaya: pak saya belum paham yang dimaksud bapak pada kalimat ni?

 engga paham yang mana?

2017-09-16 23:30:04 Ng_Wilson said:

 terima kasih pak @bertzzie untuk kuliahnya dimalam hari ini.

2017-09-16 23:31:09 Fran Jaya said:

 #ask fran jaya: pakai data user

2017-09-16 23:31:42 bertzzie said:

 user kan tipenya Option[User], artinya dia monad Option yang membungkus data User

2017-09-16 23:32:01 bertzzie said:

 kita bisa pakai data User yang ada di dalam Option ini nanti belakangan

2017-09-16 23:32:07 bertzzie said:

 tapi uda bisa dikasi tau mau proses apa aja

2017-09-16 23:32:26 bertzzie said:

 misalnya tadi user.flatMap(u => u.userName), ini proses mengambil username nya

2017-09-16 23:32:45 Fran Jaya said:

 Ok pak makasih

2017-09-16 23:32:46 bertzzie said:

 tapi datanya baru benar-benar dipakai dan diakses waktu
 
 user match { ...

2017-09-16 23:32:54 bertzzie said:

 sip

2017-09-16 23:32:57 bagongkia said:

 Baiklah... Kita tutup kulgram kali ini...
 Terima kasih kepada pak @bertzzie  yang telah bersedia meluangkan waktu untuk sharing tentang monad..

2017-09-16 23:33:11 bagongkia said:

 Terima kasih juga kepada seluruh peserta yang telah mengikuti kulgram ini

2017-09-16 23:33:21 bagongkia said:

 Mohon maaf bila ada hal yang masih kurang dan tidak berkenan dalam kulgram kali ini.
 Ke depan @KongkowITMedan akan terus memperbaiki proses kulgram menjadi lebih baik lagi

2017-09-16 23:33:40 Ng_Wilson said:

 πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘

2017-09-16 23:33:40 bagongkia said:

 Mohon untuk mengisi form berikut:

2017-09-16 23:33:41 bagongkia said:

 https://goo.gl/forms/vE8jAulCDTtHfnr43

2017-09-16 23:34:16 kevinongko said:

bagongkia: Mohon untuk mengisi form berikut:

 silakan di isi form feedback, agar kedepan bs lebih baik lg

2017-09-16 23:34:25 bertzzie said:

 Thank you guys!

2017-09-16 23:34:36 umaryudi91 said:

 Terima kasih pak @bertzzie . Sungkem mastah

2017-09-16 23:34:38 kevinongko said:

 mari sama2 doakan pak @bertzzie cepat merit

2017-09-16 23:34:45 kevinongko said:

 πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘

2017-09-16 23:34:52 bagongkia said:

 πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘πŸ‘

2017-09-16 23:34:59 bertzzie said:

 wkwk apa itu

2017-09-16 23:35:08 desdulianto said:

 haha, sengaja ya karena mo di publish ke web ya

2017-09-16 23:35:09 bagongkia said:

bagongkia: https://goo.gl/forms/vE8jAulCDTtHfnr43

 Diisi ya... Biar next kulgram makin baik ke depan...

2017-09-16 23:35:17 feetbo90 said:

 πŸ™πŸ™πŸ™πŸ™πŸ™

2017-09-16 23:35:27 desdulianto said:

 terima kasih all, semoga ada manfaat kulgramnya

2017-09-16 23:35:30 ferrwan said:

 Terima Kasih ilmunya Pak @bertzzie πŸ™πŸ™

2017-09-16 23:35:43 feetbo90 said:

 ada disimpan ga ini pak @desdulianto

2017-09-16 23:35:48 feetbo90 said:

 ?

2017-09-16 23:35:49 desdulianto said:

 mohon form diisi supaya bisa menjadi masukan untuk kedepannya

2017-09-16 23:35:57 desdulianto said:

 ada @feetbo90 sudah di rekam pakai bot

2017-09-16 23:36:09 desdulianto said:

 nanti akan diolah dulu dan dipublish ke web

2017-09-16 23:36:14 xanxiver said:

 Thanks untuk sharing2nya pak @bertzzie πŸ™πŸ™πŸ™

2017-09-16 23:36:15 desdulianto said:

 nanti kami info ya di group

2017-09-16 23:36:26 bertzzie said:

 semoga bermanfaat ya. ingat intinya ini:
 
 inti dari monad itu adalah *pembungkusan nilai* dan operasi *identity* dan *flatmap*
 
 jangan sampai dianggap monad cuman buat option dan null safety. ada banyak jenis monad dan bisa bikin monad  dengan konteks sendiri jg πŸ˜„

2017-09-16 23:36:28 feetbo90 said:

desdulianto: nanti akan diolah dulu dan dipublish ke web

 πŸ˜‡πŸ˜‡πŸ˜‡

2017-09-16 23:36:51 feetbo90 said:

bertzzie: semoga bermanfaat ya. ingat intinya ini:

inti dari monad itu adalah pembungkusan nilai dan operasi identity dan flatmap

jangan sampai dianggap monad cuman buat option dan null safety. ada banyak jenis monad dan bisa bikin monad dengan konteks sendiri jg πŸ˜„

 siaapp,  terima kasih ilmunya pak alex

2017-09-16 23:36:56 kolonel_yudisetiawan said:

desdulianto: nanti akan diolah dulu dan dipublish ke web

 alamat web-nya apa?

2017-09-16 23:37:04 Fran Jaya said:

 Terima kasih pak ,atas ilmunya

2017-09-16 23:37:15 kevinongko said:

kolonel_yudisetiawan: alamat web-nya apa?

 nanti akan kita umumkan di grup @kongkowitmedan

2017-09-16 23:37:21 kevinongko said:

 bila sudah selesai di record

2017-09-16 23:37:22 desdulianto said:

kolonel_yudisetiawan: alamat web-nya apa?

 belum ada pak

2017-09-16 23:37:40 desdulianto said:

 haha, karena baru semalam direncakan kulgramnya sebenarnya

2017-09-16 23:37:42 kolonel_yudisetiawan said:

kevinongko: nanti akan kita umumkan di grup @kongkowitmedan

 Ok.

2017-09-16 23:38:05 desdulianto said:

 tapi semua bagi pembicara yang jauh2 ga bisa ke medan kita bisa undang lah untuk share di kulgram

2017-09-16 23:38:31 desdulianto said:

 thanks all, keep learning πŸ‘πŸΏ

2017-09-16 23:38:36 desdulianto said:

 and goodnight

2017-09-16 23:38:50 bertzzie said:

 goodnight!

2017-09-16 23:41:49 gunawan_indra said:

 thanks @bertzzie dan @bagongkia

2017-09-16 23:43:59 Fran Jaya said:

 Good.night