Seperti yang sudah kita ketahui, HTML berperan sebagai struktur untuk membangun sebuah halaman website. Dan pada modul ini kita akan mencoba menuliskan struktur HTML, siap? Pada akhir modul, kita akan membuat halaman website seperti gambar berikut:

201912031614177fb1d2b986df9d5d760fe845869eee98.jpeg

z




Web Server

Seperti yang sudah disebutkan sebelumnya, informasi pada sebuah website disimpan pada server. Lantas apa itu server? Banyak yang mengira bahwa server adalah sebuah komputer dengan performa tinggi dan berukuran besar. 


Hal tersebut tidak salah karena biasanya komputer yang dijadikan server memang harus memiliki performa yang tinggi, karena selain untuk menyimpan data (HTML, CSS dan JS disimpan di sini), server juga harus melakukan pekerjaan yang cukup berat, yaitu menanggapi, menyediakan dan mengelola data yang diminta oleh client. Tidak hanya satu client, bisa ratusan bahkan ribuan.
Tetapi pengertian server sebenarnya lebih merujuk pada sebuah software yang dapat menghubungkan sebuah komputer dengan komputer lain. Jadi penekanan sebuah server bukan pada sebuah komputernya, melainkan pada rule atau fungsi dari sebuah komputer tersebut.

HTTP Server

HTTP Server merupakan sebuah software yang dapat menerima transaksi dari HyperText Transfer Protocol dalam suatu website atau biasa disebut dengan “HTTP Server”. Banyak software yang dapat melakukan tugas tersebut. Apache adalah salah satunya yang cukup friendly, gratis dan tersedia untuk seluruh komputer dengan basis UNIX (termasuk MacOS) dan juga Windows.

DNS Server

Setiap perangkat baik komputer, smartphone, modem, maupun router yang terkoneksi internet akan memiliki IP Address. Contohnya, komputer yang menjadi host dari dicoding.com memiliki IP 104.28.20.105, Jika kita menggunakan IP tersebut untuk mengakses sebuah website, tentu akan repot. Mengingat kumpulan angka memang dapat seorang manusia lakukan, tapi bagaimana jika harus mengingat 10 IP? Untuk mengatasinya, dibuatlah Domain Name System (DNS) yang dapat mengubah/mengarahkan website melalui sebuah nama domain (“dicoding.com”). 

Client

Jika ada penyedia (server) tentu ada pengguna bukan? Perangkat yang meminta (request) suatu layanan tertentu ke suatu server disebut dengan client. Browser merupakan salah satu client yang memanfaatkan HTTP Server dalam transaksi datanya. Jelas, tujuannya adalah untuk mengolah, menampilkan dan melakukan interaksi dengan dokumen yang disediakan oleh web server. Layaknya sebuah pelukis, browser mampu menyajikan informasi dalam bentuk visual yang indah, bersumber dari data mentah yang diperoleh dari server.

Server-side dan Client-side

Dalam pengembangan web, terdapat istilah “Client-Side” atau “Server-side”. Hal ini merujuk pada sebuah proses yang dilakukan pada sisi client atau di sisi server. Untuk client side, semua proses terjadi di sisi pengguna, client meminta data ke server di mana data yang dikirimkan nanti diolah di sisi client. Biasanya data yang diolah dalam bentuk HTML, CSS dan JavaScript. 
Sedangkan untuk server side, semua proses yang terjadi dilakukan di sisi server. Server side bertanggung jawab untuk merespon data yang diminta oleh client side. Biasanya server side merupakan tempat di mana terjadinya interaksi pada database, sehingga sisi client tidak mengetahui prosesnya dan memang tidak boleh tahu. Client hanya diberikan sebuah data hasil olahan dari sisi server
Kita terbiasa dengan tampilan website yang nampak pada browser, tetapi apakah kalian tahu bagaimana website dapat tampil demikian? Terdapat 3 (tiga) fondasi penting dalam membuat website. 

Yang pertama adalah HTML, yakni salah satu markup language, yang digunakan untuk membuat struktur dan menampilkan konten pada World Wide Web (Website). CSS dan JavaScript merupakan fondasi lainnya yang digunakan untuk mempercantik dan menjadikan website lebih dinamis dan interaktif. 
20191203155453ea18e56254e5e7f1e2deaba1f99d8acb.png

Sama seperti halnya tubuh manusia yang disusun dari kerangka tulang, HTML pada website berperan sebagai kerangka dasar yang digunakan dalam menampilkan visual pada website. Tapi jika hanya sebatas kerangka, seorang manusia akan terlihat menyeramkan dan aneh bukan? Maka dari itu untuk mempercantik tampilannya kita membutuhkan sebuah kulit. Di sinilah peran CSS. Setelah memiliki kulit dan nampak cantik, selanjutnya kita membutuhkan sebuah otak dan otot agar seorang manusia dapat dinamis dan berinteraksi. Dalam website JavaScript-lah yang berperan dalam membuat website yang dinamis dan interaktif.

Bagaimana Website bekerja?

Ketika kita mengunjungi dicoding.com, tentu kita membutuhkan sebuah koneksi internet, karena website memerlukan sebuah web server hosting yang dapat disimpan di mana saja. Ketika kita menuliskan “dicoding.com” dan menekan enter pada browser, hal yang pertama dilakukan browser adalah menghubungi Domain Name System (DNS) server untuk mengarahkan ke alamat server. Kemudian browser mengirimkan sebuah permintaan (request) agar server mengirimkan salinan dari informasi yang nantinya ditampilkan pada client (browser). Jika request tersebut berhasil, maka server menanggapi (response) permintaan tersebut dan mulai mengirimkan salinan yang dibutuhkan secara berangsur. Browser menggabungkan bagian-bagian informasi yang diperoleh untuk kemudian tampil di jendela browser.

201912031545443a4f25f09b5b907307048cc864892642.jpeg

Untuk menampilkan informasi pada jendela, browser menggunakan HTML dan CSS yang dikirimkan dari server. Dengan begitu, informasi dalam bentuk HTML dan CSS-lah yang dikirimkan server untuk client (browser). Beberapa halaman website juga membutuhkan informasi ekstra seperti berkas gambar, suara atau video, tetapi berkas tersebut sebenarnya hanya ditanamkan (embed) pada HTML. Dan beberapa halaman website sebenarnya juga membutuhkan JavaScript untuk me-render HTML atau CSS agar dapat menampilkan informasi secara dinamis
Website adalah sebuah halaman yang menampilkan informasi melalui teks atau gambar. Website dapat diakses melalui internet dengan menggunakan browser.
Website ini unik karena tiap halaman dapat saling terhubung dengan menggunakan hypertext links. Umumnya sebuah website memuat informasi yang disediakan secara perorangan, kelompok, atau organisasi. Semua informasi yang tersedia pada halaman website disimpan pada server.
Website sudah berkembang sangat pesat. Sekarang, website digunakan tidak hanya untuk media berbagi informasi atau berita. Layaknya sebuah aplikasi pada komputer dan handphone kita, website dapat digunakan untuk komunikasi secara real-time, mendengarkan sebuah lagu bahkan photo editing sekarang dapat dilakukan pada sebuah website.

20191203150540096ac8a65c76e0fe8063515a3db046cc.jpeg
Memanfaatkan website sebagai alat editing photo. https://pixlr.com/
Website sendiri merupakan teknologi yang sudah ada sejak 30 tahun silam. Tim Berners-Lee seorang ilmuwan inggris menemukan World Wide Web (WWW) pada tahun 1989 ketika ia bekerja di CERN (Conseil Européen pour la Recherche Nucléaire). Web awalnya dibuat dan dikembangkan untuk memenuhi permintaan dalam berbagi informasi secara otomatis antar ilmuwan di universitas dan lembaga di seluruh dunia. Web pertama di CERN didedikasikan sebagai web pertama di dunia dan pada 2013 CERN merilis “a project to restore this first ever websiteinfo.cern.ch” untuk mengabadikan website pertama di dunia. Thank you CERN! Thank you Tim Berners-Lee!

Ketika melakukan perulangan, terkadang kita dihadapkan dengan data yang tak sesuai harapan. Contoh, seperti berikut:


  1. fun main() {

  2.     val listOfInt = listOf(1, 2, 3, null, 5, null, 7)

  3.     for (i in listOfInt) {

  4.         print(i)

  5.     }

  6. }

  7. /*

  8.    output: 123null5null7

  9. */


Proses perulangan pada kode di atas akan menghasilkan nilai null. Jika kita mengelola nilai tersebut, ada potensi NullPointerException di sana. Lalu bagaimana kita melewatkan atau menghentikan proses perulangan jika nilai yang dihasilkan bernilai null? Nah, di sini kita bisa menggunakan Break dan Continue.
Continue digunakan untuk melewatkan proses iterasi dan lanjut dengan proses iterasi berikutnya. Sementara itu, Break digunakan untuk menghentikan proses iterasi.
Berikut adalah contoh proses iterasi pada kode di atas. Kita akan coba melewatkannya jika nilai yang dihasilkan adalah null.

  1. fun main() {

  2.     val listOfInt = listOf(1, 2, 3, null, 5, null, 7)

  3.  

  4.     for (i in listOfInt) {

  5.         if (i == null) continue

  6.         print(i)

  7.     }

  8. }

  9. /*

  10.    output: 12357

  11. */


Pada kode di atas kita menggunakan kata kunci continue. Jika hasil evaluasi expression yang diberikan bernilai true, maka proses iterasi akan dilewatkan dan lanjut ke proses iterasi berikutnya.
Berikut adalah contoh jika kita ingin menghentikan proses iterasi ketika nilai yang dihasilkan bernilai null.

  1. fun main() {

  2.     val listOfInt = listOf(1, 2, 3, null, 5, null, 7)

  3.  

  4.     for (i in listOfInt) {

  5.         if (i == null) break

  6.         print(i)

  7.     }

  8. }


Penggunaan break pada kode di atas akan langsung menghentikan proses iterasi jika variabel i bernilai null.

Break dan Continue Labels

Pada Kotlin, sebuah expression dapat ditandai dengan sebuah label. Label pada Kotlin memiliki sebuah identifier yang diikuti dengan tanda @. Contoh dari sebuah label adalah foo@ atau bar@.
Untuk melabeli sebuah expression, kita cukup menempatkan label di depannya. Contohnya seperti berikut:

  1. fun main() {

  2.     loop@ for (i in 1..10) {

  3.         println("Outside Loop")

  4.  

  5.         for (j in 1..10) {

  6.             println("Inside Loop")

  7.             if ( j > 5) break@loop

  8.         }

  9.     }

  10. }

  11.  

  12. /*

  13.    output :

  14.        Outside Loop

  15.        Inside Loop

  16.        Inside Loop

  17.        Inside Loop

  18.        Inside Loop

  19.        Inside Loop

  20.        Inside Loop

  21. */


Pada kode diatas, break yang sudah ditandai dengan label akan dilompati ke titik awal proses perulangan yang sudah ditandai dengan label. break akan menghentikan proses perulangan terluar dari dalam proses perulangan, di mana break tersebut dipanggil


For Loop

Sama seperti While dan Do WhileFor merupakan konsep perulangan pada blok yang sama selama hasil evaluasi kondisi yang diberikan terpenuhi atau
bernilai true. For dapat digunakan pada RangesCollectionsArrays dan apapun yang menyediakan iterator. Contoh dari For loop sendiri adalah sebagai berikut:

  1. fun main() {

  2.     val ranges = 1..5

  3.     for (i in ranges){

  4.         println("value is $i!")

  5.     }

  6. }

  7.  

  8. /*

  9.    output :

  10.        value is 1!

  11.        value is 2!

  12.        value is 3!

  13.        value is 4!

  14.        value is 5!

  15.  

  16. */


Kode di atas merupakan contoh ketika ketika melakukan perulangan pada Ranges dengan menggunakan range expression yang sudah kita pelajari sebelumnya. Karena menggunakan range expression, kita juga dapat menuliskannya seperti berikut:

  1. fun main() {

  2.     val ranges = 1.rangeTo(5)

  3.     for (i in ranges){

  4.         println("value is $i!")

  5.     }

  6. }

  7.  

  8. /*

  9.    output :

  10.        value is 1!

  11.        value is 2!

  12.        value is 3!

  13.        value is 4!

  14.        value is 5!

  15.  

  16. */


Selain itu, kita juga dapat menuliskan For loop menggunakan range expression seperti berikut:

  1. fun main() {

  2.     val ranges = 1.rangeTo(10) step 3

  3.     for (i in ranges ){

  4.         println("value is $i!")

  5.     }

  6. }

  7.  

  8. /*

  9.    output :

  10.        value is 1!

  11.        value is 4!

  12.        value is 7!

  13.        value is 10!

  14. */


Pada kode di atas, kita menambahkan ekstensi step yang akan mengembalikan nilai baru dengan tipe IntProgression dengan jarak nilai sebelumnya adalah 3.
Kita juga dapat mengakses indeks untuk setiap elemen yang ada pada Ranges dengan memanfaatkan fungsi withIndex() seperti berikut:

  1. fun main() {

  2.     val ranges = 1.rangeTo(10) step 3

  3.     for ((index, value) in ranges.withIndex()) {

  4.         println("value $value with index $index")

  5.     }

  6. }

  7. /*

  8.    output :

  9.        value 1 with index 0

  10.        value 4 with index 1

  11.        value 7 with index 2

  12.        value 10 with index 3

  13. */


Kita menggunakan kata kunci for untuk memulai proses perulangan. Untuk tujuan yang sama, kita juga bisa loh, memanfaatkan salah satu ekstensi pada Kotlin yaitu forEach. Contohnya seperti berikut:

  1. fun main() {

  2.     val ranges = 1.rangeTo(10) step 3

  3.     ranges.forEach { value ->

  4.         println("value is $value!")

  5.     }

  6. }

  7.  

  8. /*

  9.    output :

  10.        value is 1!

  11.        value is 4!

  12.        value is 7!

  13.        value is 10!

  14. */


forEach pada kode di atas merupakan sebuah lambda expression yang hanya memiliki satu argumen yaitu nilai tunggal yang dicakup pada ranges. Jika kita mendapatkan indeks dari tiap nilai yang dicakup kita bisa menggunakan ekstensi forEachIndexed seperti berikut:

  1. fun main() {

  2.  

  3.     val ranges = 1.rangeTo(10) step 3

  4.     ranges.forEachIndexed { index, value ->

  5.         println("value $value with index $index")

  6.     }

  7. }

  8. /*

  9.    output :

  10.        value 1 with index 0

  11.        value 4 with index 1

  12.        value 7 with index 2

  13.        value 10 with index 3

  14. */


forEachIndexed memiliki dua argumen. Pertama adalah index yang merupakan indeks dari tiap nilai. Kedua adalah value yang merupakan nilai tunggal yang dicakup oleh ranges itu sendiri. Jika kita hanya ingin menggunakan argumen index, maka kita bisa mengubah argumen value menjadi _ seperti berikut:

  1. fun main() {

  2.     val ranges = 1.rangeTo(10) step 3

  3.     ranges.forEachIndexed { index, _ ->

  4.         println("index $index")

  5.     }

  6. }

  7. /*

  8.    output :

  9.        index 0

  10.        index 1

  11.        index 2

  12.        index 3

  13. */


Sebenarnya ini merupakan sebuah aturan di mana ketika argumen dari sebuah lambda expression tidak digunakan, kita disarankan agar mengubahnya menjadi _ untuk menggantikan nama dari argumen tersebut.