<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hadi Hidayat Hammurabi</title>
    <description>The latest articles on DEV Community by Hadi Hidayat Hammurabi (@hadihammurabi).</description>
    <link>https://dev.to/hadihammurabi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F553668%2F084aba1d-05b5-4331-aad8-9c7eae3197e4.png</url>
      <title>DEV Community: Hadi Hidayat Hammurabi</title>
      <link>https://dev.to/hadihammurabi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hadihammurabi"/>
    <language>en</language>
    <item>
      <title>Memanfaatkan Promise.all()</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Mon, 20 Jan 2025 16:03:19 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/memanfaatkan-promiseall-46ob</link>
      <guid>https://dev.to/hadihammurabi/memanfaatkan-promiseall-46ob</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Menunggu beberapa proses asynchronous dengan 1 kali await.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hal menarik yang disediakan oleh Javascript salah satunya adalah kita dapat melakukan proses secara tidak sinkron (asynchronous) sehingga tidak terjadi saling tunggu antar proses. Dalam praktiknya, proses asynchronous ini digunakan untuk proses-proses yang waktu tunggunya tergantung pada hal di luar proses itu sendiri, seperti koneksi internet, kecepatan penyimpanan, dll. Contoh proses yang dapat dilakukan secara asynchronous:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query database&lt;/li&gt;
&lt;li&gt;Mengambil data dari web lain (HTTP Request)&lt;/li&gt;
&lt;li&gt;Menulis/membaca isi file&lt;/li&gt;
&lt;li&gt;Mengirim email&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Menjalankan Fungsi Secara Asynchronous
&lt;/h2&gt;

&lt;p&gt;Setiap proses yang asynchronous, di Javascript, umumnya dilakukan dengan memanfaatkan fungsi. Adapun fungsi adalah kumpulan aktivitas tertentu untuk memenuhi suatu kebutuhan, contoh fungsi penjumlahan untuk menjumlahkan, fungsi shutdown untuk mematikan komputer (mungkin saja ada ya 😅).&lt;/p&gt;

&lt;h3&gt;
  
  
  Mendefinisikan Fungsi
&lt;/h3&gt;

&lt;p&gt;Mendefinikan fungsi yang asynchronous dapat dilakukan dengan menambah kata async saat pembuatan fungsi, selebihnya sama seperti fungsi biasa.&lt;/p&gt;

&lt;p&gt;Contohnya kita akan melakukan proses kirim email secara asynchronous, dapat didefinisikan seperti ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tujuan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;judul&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// mengirim email&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;atau bila menggunakan arrow function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kirimEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tujuan&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;judul&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// mengirim email&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Memanggil Fungsi
&lt;/h3&gt;

&lt;p&gt;Saat fungsi diatas kita panggil, secara otomatis fungsi akan dijalankan secara asynchronous yang artinya tidak saling tunggu.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh1@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 1 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh2@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 2 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh3@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 3 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari contoh di atas, seluruh proses kirim email, dilakukan secara berurutan namun mengabaikan kapan harus selesai. Jadi saat proses lain di jalankan, maka akan disusul proses berikutnya tanpa menunggu berhentinya proses tersebut.&lt;/p&gt;

&lt;p&gt;Apabila kita membutuhkan data atau sengaja menunggu proses yang asynchronous, dapat dilakukan dengan menambah await saat pemanggilan fungsi.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh1@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 1 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh2@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 2 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh3@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 3 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari contoh di atas, tiap proses akan ditunggu hingga selesai. Keadaan ini terjadi biasanya bila ada data yang kita butuhkan untuk proses yang selanjutnya sehingga harus menunggu proses sampai mendapatkan data tersebut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promise.all()
&lt;/h2&gt;

&lt;p&gt;Dengan Promise.all, kita dapat memanggil dan menunggu beberapa fungsi asynchronous menjadi satu kesatuan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memanggil Fungsi
&lt;/h3&gt;

&lt;p&gt;Pemanggilan fungsi-fungsi asynchronous dengan Promise.all dapat dilakukan dengan contoh sebagai berikut.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh1@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 1 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh2@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 2 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nf"&gt;kirimEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contoh3@email.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tes 3 Email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Halo. Ini saya lagi ngetes.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari contoh di atas, kita menunggu ketiga proses pengiriman email yang hasilnya baik berhasil maupun gagal akan menjadi kesatuan yaitu dalam bentuk array.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sifat-Sifat
&lt;/h3&gt;

&lt;p&gt;Berikut ini sifat-sifat Promise.all:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fungsi asynchronous yang akan dijalankan, diletakkan secara bersamaan dalam sebuah array;&lt;/li&gt;
&lt;li&gt;seluruh fungsi yang dimasukkan akan menjadi kesatuan, mulai dari dijalankan hingga mendapatkan hasil;&lt;/li&gt;
&lt;li&gt;karena menjadi kesatuan, seluruh proses akan ditunggu hingga selesai, terutama saat kita menggunakan await;&lt;/li&gt;
&lt;li&gt;bila terjadi error pada salah satu proses, maka seluruh proses akan error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lebih lengkap dapat ditemukan di dokumentasi &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all" rel="noopener noreferrer"&gt;Promise.all dari MDN&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Menggunakan &lt;code&gt;Promise.all&lt;/code&gt; sangat menguntungkan, setidaknya kita cukup 1 kali menulis await 😂 dan juga bila kita ingin seluruh proses berhenti saat salah satunya terjadi error. Tetapi, kalau kita ingin tetap melanjutkan proses meskipun terjadi error pada proses tertentu, kita akan bahas di artikel berikutnya.&lt;/p&gt;

&lt;p&gt;Terima kasih sudah baca. Kalau mau diskusi, komen aja. Kalau mau berteman, bilang aja 😎&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cara Aman Mengakses Data pada Object</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Mon, 20 Jan 2025 15:54:29 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/cara-aman-mengakses-data-pada-object-1bkb</link>
      <guid>https://dev.to/hadihammurabi/cara-aman-mengakses-data-pada-object-1bkb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Terhindar dari masalah karena data null dengan cara yang Javascript banget&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cara aman saat mengakses data pada object di Javascript sangat penting dilakukan agar aplikasi dapat bertahan dengan kondisi data yang tidak sesuai. Teknik ini pada dasarnya dilakukan dengan menghindari masalah karena data null.&lt;/p&gt;

&lt;h3&gt;
  
  
  Perhatian!!!
&lt;/h3&gt;

&lt;p&gt;Agar dapat memahami tulisan ini dengan baik, diperlukan pengetahuan tentang nilai truthy dan falsy pada Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kasus
&lt;/h2&gt;

&lt;p&gt;Sering kali saat menulis kode, kita perlu mengambil data yang ada pada object. Katakan kita punya sebuah object pegawai, lalu kita perlu untuk mengambil data status nya.&lt;/p&gt;

&lt;p&gt;Jika ada, maka tulis status tersebut.&lt;/p&gt;

&lt;p&gt;Jika tidak ada, maka tulis "magang".&lt;/p&gt;

&lt;p&gt;Sebagai ilustrasi, kira-kira kodenya begini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alex Under&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tetap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka akan tampil&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alex Under adalah pegawai tetap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Masalah dan Solusi Ke-1
&lt;/h2&gt;

&lt;p&gt;Sekarang kita kurangi isi object-nya jadi begini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka akan tampil&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;undefined adalah pegawai undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di sini masih aman, semuanya masih bisa jalan dan gak ada error. Cuman datanya memang ditampilkan undefined, jadi terlihat aneh.&lt;/p&gt;

&lt;p&gt;Untuk mengatasi masalah ini, kita bisa tambahkan if-else seperti ini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Seorang Pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;magang&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka akan tampil&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Seorang Pegawai adalah pegawai magang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kita dapat memberi nilai default pada data sehingga jika data tidak tersedia, maka nilai default tersebut yang akan digunakan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus
&lt;/h3&gt;

&lt;p&gt;Supaya lebih singkat, bisa dibuat seperti ini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Seorang Pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;magang&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Masalah dan Solusi Ke-2
&lt;/h2&gt;

&lt;p&gt;Gimana kalau object-nya gak ada (null) ?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka akan error dong kayak gini&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Uncaught TypeError: Cannot read properties of null (reading 'nama')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di sini sudah masalah, aplikasi berhenti karena ada error dikarenakan kita mengambil data nama dan status dari sebuah object yang bernilai null. Akhirnya, aplikasi akan crash dan berhenti.&lt;/p&gt;

&lt;p&gt;Untuk mengatasi masalah ini, kita bisa menggunakan teknik mantap seperti berikut.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Seorang Pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;magang&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka tidak ada error dan akan tampil&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Seorang Pegawai adalah pegawai magang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bonus
&lt;/h3&gt;

&lt;p&gt;Supaya lebih singkat, bisa dibuat seperti ini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Seorang Pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;magang&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Atau seperti ini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pegawai&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Seorang Pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;magang&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nama&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;adalah pegawai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pegawaiSafe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nahhh...&lt;/p&gt;

&lt;p&gt;Sekarang aplikasi kita gak crash lagi horeeee ahahahaa...&lt;/p&gt;

&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Dengan menerapkan solusi-solusi di atas, kita akan terhindar dari masalah null pada object terutama object yang menerima isian dari luar, seperti user input, database, service pihak ketiga, dll.&lt;/p&gt;

&lt;p&gt;Terima kasih sudah baca.&lt;/p&gt;

&lt;p&gt;Kalau mau diskusi, komen aja. Kalau mau berteman, bilang aja 😎&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mengubah Log pada Nginx Menjadi Mudah di Kelola</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Mon, 31 May 2021 15:25:59 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/mengubah-log-pada-nginx-menjadi-mudah-di-kelola-44h3</link>
      <guid>https://dev.to/hadihammurabi/mengubah-log-pada-nginx-menjadi-mudah-di-kelola-44h3</guid>
      <description>&lt;p&gt;Nginx merupakan web server yang umum digunakan untuk melayani kebutuhan web, seperti web server untuk web statis, menjadi loadbalancer, dll. Pada penggunaannya, Nginx mencatat segala akses dan error yang terjadi. Setiap akses akan disimpan sebagai access.log dan error sebagai error.log. Karena banyaknya akses dan error yang kemungkinan terjadi, maka akan semakin banyak pula yang dicatat dalam log sehingga kita perlu membuat log agar mudah diolah.&lt;/p&gt;

&lt;p&gt;Membuat dan menggunakan Log Format pada Nginx, dapat dibaca lebih lanjut &lt;a href="https://hadihammurabi.hashnode.dev/mengubah-log-pada-nginx-menjadi-mudah-di-kelola" rel="noopener noreferrer"&gt;di artikel ini&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nginx</category>
      <category>webdev</category>
    </item>
    <item>
      <title>JavaScript Tips #1: Menunggu beberapa proses asynchronous dengan Promise.all()</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Sat, 29 May 2021 09:47:17 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/javascript-tips-1-menunggu-beberapa-proses-asynchronous-dengan-promise-all-2b77</link>
      <guid>https://dev.to/hadihammurabi/javascript-tips-1-menunggu-beberapa-proses-asynchronous-dengan-promise-all-2b77</guid>
      <description>&lt;p&gt;Hal menarik yang disediakan oleh Javascript salah satunya adalah kita dapat melakukan proses secara tidak sinkron (asynchronous) sehingga tidak terjadi saling tunggu antar proses. Dalam praktiknya, proses asynchronous ini digunakan untuk proses-proses yang waktu tunggunya tergantung pada hal di luar proses itu sendiri, seperti koneksi internet, kecepatan penyimpanan, dll. Contoh proses yang dapat dilakukan secara asynchronous:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query database&lt;/li&gt;
&lt;li&gt;Mengambil data dari web lain (HTTP Request)&lt;/li&gt;
&lt;li&gt;Menulis/membaca isi file&lt;/li&gt;
&lt;li&gt;Mengirim email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selengkapnya baca di:&lt;br&gt;
&lt;a href="https://hadihammurabi.hashnode.dev/javascript-tips-1-menunggu-beberapa-proses-asynchronous-dengan-promiseall" rel="noopener noreferrer"&gt;https://hadihammurabi.hashnode.dev/javascript-tips-1-menunggu-beberapa-proses-asynchronous-dengan-promiseall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terima kasih sudah baca.&lt;br&gt;
Kalau mau diskusi, komen aja. Kalau mau berteman, bilang aja 😎&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>asynchronous</category>
    </item>
    <item>
      <title>Apa itu Frontend?</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Mon, 01 Feb 2021 16:03:41 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/apa-itu-frontend-5aed</link>
      <guid>https://dev.to/hadihammurabi/apa-itu-frontend-5aed</guid>
      <description>&lt;p&gt;Rasanya temen-temen sudah akrab ni sama istilah ini. Ya, memang lagi ngetren. Pada &lt;a href="https://dev.to/hadihammurabi/perbedaan-frontend-dengan-backend-563n"&gt;pembahasan sebelumnya&lt;/a&gt; juga sudah kita bahas secara mendasar. Sekarang, mari kita bahas lebih lanjut...&lt;/p&gt;

&lt;h1&gt;
  
  
  Pengertian
&lt;/h1&gt;

&lt;p&gt;Sebenernya frontend ini adalah aplikasi yang berhadapan langsung dengan pengguna. Kalau di desktop berarti aplikasi desktop biasa, kayak &lt;code&gt;.exe&lt;/code&gt; gitu. Kalau di perangkat mobile ya berarti &lt;code&gt;.apk&lt;/code&gt;. Kalau di web, berarti halaman web itu sendiri.&lt;/p&gt;

&lt;h1&gt;
  
  
  Teknologi
&lt;/h1&gt;

&lt;p&gt;Ketiga contoh frontend di atas, bisa dibuat dengan teknologi yang berbeda-beda. Kalau desktop, bisa pakai Java atau Python. Kalau mobile, bisa pakai Java, Kotlin, atau Dart. Kalau web, bisa pakai HTML, Javascript, dan CSS.&lt;/p&gt;

&lt;p&gt;Ciri khas frontend, yaitu pengguna dapat berinteraksi langsung dengan aplikasi. Nah ini sudah jelas berarti aplikasinya adalah frontend.&lt;/p&gt;

&lt;p&gt;Kebanyakan, istilah frontend ini dipakai untuk frontend web. Kalau desktop sama mobile sudah punya sebutan sendiri soalnya wehehehe...&lt;/p&gt;

&lt;h1&gt;
  
  
  Frontend web
&lt;/h1&gt;

&lt;p&gt;Kalau gitu, kita fokus yang ke web-weban ya. Biar umum.&lt;/p&gt;

&lt;p&gt;Seperti sudah disebutkan di atas, teknologi yang bisa digunakan untuk membuat frontend web. Mari kita tuliskan perannya:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML (Hypertext Markup Language)
Gunanya untuk membuat struktur dokumen web.&lt;/li&gt;
&lt;li&gt;CSS (Cascading Stylesheet)
Bisa kita pake untuk memperindah dokumen web.&lt;/li&gt;
&lt;li&gt;Javascript
Nah di sini kita ngoding wehehehe... Kalau butuh aksi-aksi yang mendukung daya interaktif web, bisa pake ini nih.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Semakin maju teknologi, termasuk frontend, sekarang sudah banyak sekali tools yang bisa ngebantu kita untuk membuat frontend ini. Kalau temen-temen mau lihat apa aja, bisa klik &lt;a href="https://github.com/syaning/awesome-frontend" rel="noopener noreferrer"&gt;di sini&lt;/a&gt; nih, ada banyak.&lt;/p&gt;

&lt;h1&gt;
  
  
  Penutup
&lt;/h1&gt;

&lt;p&gt;Dasar-dasar pengetahuan mengenai frontend cukup sampai di sini. Berikutnya kita akan ke sesi koding. Belum tau akan mulai dari mana, yang jelas salah satu dari 3 teknologi frontend di atas.&lt;/p&gt;

&lt;p&gt;Terima kasih sudah baca.&lt;br&gt;
Kalau mau diskusi, komen aja. Kalau mau berteman, bilang aja 😎&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>restapi</category>
    </item>
    <item>
      <title>Perbedaan Frontend dengan Backend</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Sat, 23 Jan 2021 08:57:49 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/perbedaan-frontend-dengan-backend-563n</link>
      <guid>https://dev.to/hadihammurabi/perbedaan-frontend-dengan-backend-563n</guid>
      <description>&lt;p&gt;Istilah frontend dan backend ini sedang populer beberapa tahun belakangan, bersamaan dengan popularitas arsitektur berbasis REST API.&lt;/p&gt;

&lt;p&gt;Pada &lt;a href="https://dev.to/hadihammurabi/apa-itu-rest-api-4dj0"&gt;pembahasan sebelumnya&lt;/a&gt;, temen-temen sudah paham ni apa itu REST API. Sekarang, kita bahas 2 bagian utama dari REST API, yaitu frontend dan backend.&lt;/p&gt;

&lt;h1&gt;
  
  
  Frontend
&lt;/h1&gt;

&lt;p&gt;Frontend bertugas menampilkan interface (antarmuka) kepada pengguna agar aplikasi mudah digunakan. Bagian inilah yang berhadapan langsung dengan pengguna, mulai dari menerima input, menampilkan data, bahkan bisa saja hanya sekadar aksesoris.&lt;/p&gt;

&lt;p&gt;Bila sebuah aplikasi diibaratkan restoran, maka frontend ini merupakan resepsionis dan kasir. Tugasnya menyambut dan menerima pesanan pelanggan, kemudian meneruskan pesanan tersebut ke dapur agar permintaan pelanggan dapat disiapkan.&lt;/p&gt;

&lt;h1&gt;
  
  
  Backend
&lt;/h1&gt;

&lt;p&gt;Backend bertugas memproses data yang dikirimkan dari frontend dan juga menyediakan data untuk ditampilkan oleh frontend. Bagian ini tidak perlu dilihat oleh pengguna (walaupun sebenarnya bisa saja), karena ruang lingkup tugasnya memang di belakang. Biasanya, alur-alur bisnis, perhitungan, penyimpanan data, di lakukan di bagian backend ini.&lt;/p&gt;

&lt;p&gt;Bila kembali pada analogi yang sebelumnya, backend dapat diibaratkan sebagai koki yang bertugas membuat dan menyediakan makanan yang dipesan oleh pelanggan. Tentunya pelanggan tidak perlu melihat bagaimana koki bekerja. Kemudian, penyajian akan dilakukan kembali oleh resepsionis atau pelayan.&lt;/p&gt;

&lt;h1&gt;
  
  
  Penutup
&lt;/h1&gt;

&lt;p&gt;Pada pembahasan ini, diharapkan temen-temen semua dapat mengerti apa itu frontend dan backend secara istilah dan apa bedanya. Pada materi berikutnya, kita akan bahas lebih detail untuk masing-masing bagian tersebut, sampai ke teknis-teknisnya.&lt;/p&gt;

&lt;p&gt;Terima kasih sudah baca.&lt;br&gt;
Kalau mau diskusi, komen aja. Kalau mau berteman, bilang aja 😎&lt;/p&gt;

</description>
      <category>architecture</category>
    </item>
    <item>
      <title>Apa itu REST API?</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Mon, 18 Jan 2021 16:36:40 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/apa-itu-rest-api-4dj0</link>
      <guid>https://dev.to/hadihammurabi/apa-itu-rest-api-4dj0</guid>
      <description>&lt;p&gt;Istilah REST API sedang populer, naik daun, dan memang sering diterapkan oleh berbagai tim programmer. Kalau temen-temen belum tau ini apa, tenang, ada banyak orang di seluruh dunia juga sedang mempelajarinya. Informasi bagus agar temen-temen gak merasa sendirian ahahaha...&lt;/p&gt;

&lt;p&gt;Oke, masuk ke materi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pengertian
&lt;/h2&gt;

&lt;p&gt;REST API ini tu arsitektur dalam pengembangan aplikasi yang memisahkan bagian tampilan (frontend) dengan alur bisnis (backend) dan pengiriman datanya melalui jalur HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keuntungan
&lt;/h2&gt;

&lt;p&gt;Nahhh... Ini beberapa keuntungan kalau kita menerapkan REST API nih.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kode lebih mudah dikelola karena frontend dan backend dibuat terpisah.&lt;/li&gt;
&lt;li&gt;Lebih mudah mencari akar masalah saat terjadi error. Kalau error di frontend ya cari aja di situ, begitu juga dengan backend, jangan cari yang bukan tempatnya ya ahahaha...&lt;/li&gt;
&lt;li&gt;Kalau kita ber-tim, pembagian tugas jadi lebih mudah.&lt;/li&gt;
&lt;li&gt;Karena menggunakan protokol HTTP, REST API jadi lebih familiar bagi kebanyakan orang. Kan banyak orang udah pada tau cara pakai si HTTP ini. Minimal, saat mengunjungi website.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Kekurangan
&lt;/h2&gt;

&lt;p&gt;Kalau sudah tau untungnya apa, sekarang kita perlu tau kekurangannya ni, supaya kita bisa antisipasi hal-hal yang tak diinginkan. Jadi ini nih kekurangannya.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kode yang dikelola jadi lebih banyak. Kalau biasanya cuma 1 projek aja, sekarang jadi 2 projek (frontend dan backend).&lt;/li&gt;
&lt;li&gt;Tidak disarankan untuk solo player (sendirian). Semakin banyak yang dikelola, semakin banyak yang diatur, dan semakin banyak pula yang harus dilakukan. Kasian kamu kalau sendirian 😊&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Saya sejauh ini menerapkan REST API dengan hati riang-gembira.&lt;br&gt;
- &lt;em&gt;&lt;a class="mentioned-user" href="https://dev.to/hadihammurabi"&gt;@hadihammurabi&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Komunikasi Data pada REST API
&lt;/h2&gt;

&lt;p&gt;Nahhh... Kalau temen-temen tertarik untuk menerapkan REST API, berarti harus ngerti ni gimana caranya berkirim data antara frontend dengan backend. Kita lanjuuuttt yaaa...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|-------------|                 |-------------|
|  Frontend   |  &amp;lt;-- HTTP --&amp;gt;   |   Backend   |
|-------------|                 |-------------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jadi untuk proses pengambilan data, frontend mengakses sebuah URL yang ada di backend, kemudian backend akan mengirimkan datanya sebagai respon. Pada dasarnya, sama seperti kita mengunjungi halaman web, kita lakukan request, kemudian webnya tampil.&lt;/p&gt;

&lt;p&gt;Terus, kalau frontend mau kirim data, juga sama-sama mengakses URL yang ada di backend. Hanya saja kali ini dengan menyertakan data yang dikirim. Misal di frontend, usernya mau login, terus frontend kirim data ini ke backend.&lt;/p&gt;

&lt;p&gt;Sebetulnya, cara kerjanya sesimpel ini.&lt;/p&gt;

&lt;h1&gt;
  
  
  Penutup
&lt;/h1&gt;

&lt;p&gt;Karena baru pengenalan, jadi segini dulu ya pembahasan tentang REST API. Di artikel-artikel selanjutnya, kita bahas lagi lebih detail. Bahkan sampai koding kalau bisa.&lt;/p&gt;

&lt;p&gt;Kalau mau diskusi, komen aja. Kalau mau berteman, bilang aja 😎&lt;/p&gt;

</description>
      <category>architecture</category>
    </item>
    <item>
      <title>Berkenalan Dengan Javascript</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Sat, 16 Jan 2021 15:59:18 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/berkenalan-dengan-javascript-2g4p</link>
      <guid>https://dev.to/hadihammurabi/berkenalan-dengan-javascript-2g4p</guid>
      <description>&lt;p&gt;Javascript merupakan bahasa pemrograman yang berjalan di web browser. Tugasnya, membuat halaman web menjadi lebih interaktif, seperti menampilkan pesan popup, jendela input, dan lainnya. Yang dapat dilakukan Javascript sangat beragam, mulai dari:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mengubah warna tombol,&lt;/li&gt;
&lt;li&gt;mengubah gambar latar belakang (background),&lt;/li&gt;
&lt;li&gt;menampilkan atau menyembunyikan elemen,&lt;/li&gt;
&lt;li&gt;mengambil data dari halaman web lain,&lt;/li&gt;
&lt;li&gt;dan banyak lagi.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Info: Javascript merupakan satu-satunya bahasa pemrograman yang dapat berjalan di web browser modern saat ini.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sumber:&lt;br&gt;
&lt;a href="https://github.com/tamankodekode/materi/blob/master/bahasa_pemrograman/javascript/01-pengertian-javascript.md" rel="noopener noreferrer"&gt;Taman Kode-Kode - Pengertian Javascript&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>tamankodekode</category>
    </item>
    <item>
      <title>Ubuntu Server Hardening</title>
      <dc:creator>Hadi Hidayat Hammurabi</dc:creator>
      <pubDate>Tue, 05 Jan 2021 04:03:42 +0000</pubDate>
      <link>https://dev.to/hadihammurabi/ubuntu-server-hardening-2pdg</link>
      <guid>https://dev.to/hadihammurabi/ubuntu-server-hardening-2pdg</guid>
      <description>&lt;p&gt;Hardening pada sistem operasi berbasis Linux merupakan kegiatan yang bertujuan untuk memperkuat keamanan dengan mengatur akses-akses yang diizinkan, seperti pengaturan akses user, menutup akses dari luar untuk layanan terbatas, dll.&lt;/p&gt;

&lt;p&gt;Kali ini kita akan praktik hardening dengan menggunakan Ubuntu Server. Karena tulisan ini bertujuan untuk berbagi kepada temen-temen semua, sekaligus mendokumentasikan setup server saya yang baru saja terinstalasi.&lt;/p&gt;

&lt;h1&gt;
  
  
  Menambah User
&lt;/h1&gt;

&lt;p&gt;Hardening pertama yang akan kita lakukan adalah membuat user baru. Hal ini diperlukan karena beberapa alasan, yaitu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saat pertama kali Ubuntu Server terinstalasi, kita hanya mendapatkan user root yang bila jatuh ke tangan orang lain, maka kita tidak dapat mencegah hal-hal di luar keinginan kita. Maka dari itu, kita perlu mengurangi penggunaan user root sehingga mengurangi kemungkinan orang lain melihat kita melakukan akses, terutama saat memasukkan password.&lt;/li&gt;
&lt;li&gt;Dengan menggunakan user selain root, kita juga mengurangi kemungkinan kesalahan dalam melakukan aksi.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Menambah user di Ubuntu Server dapat dilakukan dengan menggunakan perintah berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# adduser &amp;lt;username&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# adduser hammurabi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, isikan password, nama lengkap, dan informasi lainnya. Setelah selesai, maka user baru tersebut sudah bisa digunakan.&lt;/p&gt;

&lt;p&gt;Agar lebih pasti, bisa kita coba untuk masuk ke Ubuntu Server dengan menggunakan user yang baru saja kita buat. Hal ini dapat dilakukan dengan menjalankan perintah berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# login&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian masukkan username dan password user baru. Bila berhasil, maka kita akan masuk sebagai user tersebut.&lt;/p&gt;

&lt;h1&gt;
  
  
  Mendaftarkan User Sebagai &lt;code&gt;sudo&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Karena kita tidak akan menggunakan user root lagi, sekarang kita perlu mengatur agar user memiliki izin untuk mengakses hal-hal terkait sistem, seperti menginstalasi aplikasi, membaca file di sistem, dll.&lt;/p&gt;

&lt;p&gt;Mendaftarkan user sebagai &lt;code&gt;sudo&lt;/code&gt; dapat dilakukan dengan menggunakan perintah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# usermod -aG sudo &amp;lt;username&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# usermod -aG sudo hammurabi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agar lebih pasti, kita dapat mengecek apakah user kita sudah terdaftar sebagai sudo dengan menggunakan perintah:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# groups &amp;lt;username&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# groups hammurabi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bila tertulis &lt;code&gt;sudo&lt;/code&gt; berarti user kita sudah termasuk user dengan akses sudo.&lt;/p&gt;

&lt;p&gt;Sekarang, hardening untuk tahap user akses, sudah selesai, kalau temen-temen mau nambah lagi, bisa coba untuk mematikan akses root supaya aman. Kalau saya, cukup dengan jarang menggunakannya saja.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>devops</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
