|
1 | | -# Polyfills |
| 1 | +# Polyfills and transpilers |
2 | 2 |
|
3 | 3 | JavaScript secara konsisten terus berevolusi. Proposal-proposal untuk menambah fitur-fitur baru terus bermunculan. Proposal-proposal ini akan didaftarkan pada <https://tc39.github.io/ecma262/> jika memang berpotensi dan layak untuk ditambahkan dalam standard dalam bahasa pemrograman JavaScript. Kemudian proposal-proposal yang telah diterima akan dimasukkan dalam [daftar spesifikasi](http://www.ecma-international.org/publications/standards/Ecma-262.htm) JavaScript. |
4 | 4 |
|
5 | 5 | Tim yang mengurus JavaScript mengerti dan akan mengusulkan mana dari proposal-proposal ini yang akan diimplementasikan terlebih dahulu. Tim ini boleh saja nanti memasukkan proposal-proposal ini kedalam kategori 'draft / dalam perancangan' atau 'postpone / tunda' karena mungkin menurut mereka proposal-proposal ini menarik untuk didiskusikan lebih dalam atau sulit untuk direalisasikan. |
6 | 6 |
|
7 | 7 | Sangat wajar jika kebanyakan dari browser-browser yang ada hanya mengimplementasikan bagian-bagian yang tidak terlalu sulit. |
8 | 8 |
|
9 | | -Jika kalian ingin tahu apa saja yang didukung oleh JavaScript, bisa cek di: <https://kangax.github.io/compat-table/es6/> . |
| 9 | +Sebuah halaman yang bagus untuk melihat kondisi terkini dari fitur yang didukung oleh bahasa ini ialah <https://kangax.github.io/compat-table/es6/> (isinya banyak, kita masih banyak yang belum dipelajari) |
10 | 10 |
|
11 | | -## Babel |
| 11 | +Sebagai programmer, kita suka untuk menggunakan fitur yang terbaru. lebih banyak fitur bagus - lebih baik lagi! |
12 | 12 |
|
13 | | -Ketika kita menggunakan fitur-fitur modern dari JavaScript, beberapa engine browser bisa jadi belum mengenal bagaimana mengerjakan perintah dari fitur-fitur tersebut. Biasanya ada beberapa fitur baru tertentu yang masih belum didukung sepenuhnya oleh browser kebanyakan. |
| 13 | +di sisi lain, bagaimana membuat kodingan modern bekerja di mesin yang lama yang tidak mengetahui fitur-fitur terbaru ? |
14 | 14 |
|
15 | | -Jadi, inilah gunanya Babel. |
| 15 | +Ada dua cara untuk itu: |
16 | 16 |
|
17 | | -[Babel](https://babeljs.io) adalah [sebuah utilitas penerjemah](https://en.wikipedia.org/wiki/Source-to-source_compiler) perintah dari fitur-fitur baru ini dengan cara menuliskannya kembali kedalam perintah standar JavaScript. |
| 17 | +1. Transpilers. |
| 18 | +2. Polyfills. |
18 | 19 |
|
19 | | -Sebenarnya, ada dua bagian dari Babel: |
| 20 | +di chapter ini, tujuan kita adalah untuk mendapatkan intisari cara kerjanya, dan tempatnya dalam proses pengembangan web. |
20 | 21 |
|
21 | | -1. Traspiler, utilitas penerjemah dari Babel. |
| 22 | +## Transpilers |
22 | 23 |
|
23 | | - Biasanya, Developer akan menjalankan perintah ini di komputer mereka terlebih dahulu. Utilitas penerjemah dari Babel ini kemudian menuliskan kembali perintah-perintah di file JavaScript kedalam perintah-perintah yang dimengerti oleh JavaScript standar. Kemudian file Javascript yang berisi perintah standar Javascript inilah yang akan dibaca oleh browser yang dipakai pengguna. Sebagai contoh, [Webpack](http://webpack.github.io/) sudah memiliki fitur Babel yang akan melakukan proses penerjemahan setiap kali Developer menyimpan file JavaScript yang ditulis dengan fitur-fitur moderen. Ini tentu saja mempermudah proses pengembangan sebuah aplikasi. |
| 24 | +Sebuah [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler) adalah perangkat lunak khusus yang dapat mengurai ("membaca dan memahami") kode modern, dan menulis ulang menggunakan konstruksi sintaks yang lebih lama, sehingga hasilnya akan sama. |
24 | 25 |
|
25 | | -2. Polyfill itu sendiri. |
| 26 | +Misalnya. JavaScript sebelum tahun 2020 tidak memiliki "nullish coalescing operator" `??`. Jadi, jika pengunjung menggunakan browser yang sudah ketinggalan zaman, ia mungkin gagal memahami kode seperti `height = height ?? 100` |
26 | 27 |
|
27 | | - Fitur-fitur baru bisa saja memasukkan fungsi-fungsi built-in dan constructs jenis baru. |
28 | | - Transpiler, utilitas penerjemah dari poin 1 diatas, menulis fungsi-fungsi built-in dan constructs ini kembali kedalam perintah stardard dari JavaScript. |
| 28 | +Sebuah transpiler akan menganalisa kodingan kita dan menulis `height ?? 100` menjadi `(height !== undefined && height !== null) ? height : 100`. |
29 | 29 |
|
30 | | - Seperti disebutkan diatas, JavaScript adalah sebuah bahasa pemrograman yang sangat dinamis. Skrip-skrip baru terus ditambahkan kedalam JavaScript dengan tujuan untuk membuat fungsi-fungsi baru menjadi dapat dibaca oleh penerjemah JavaScript standar. |
| 30 | +```js |
| 31 | +// sebelum menjalankan transpiler |
| 32 | +height = height ?? 100; |
31 | 33 |
|
32 | | -<<<<<<< HEAD |
33 | | - Skrip-skrip tambahan inilah yang disebut Polyfill. Skrip-skrip ini biasanya berupa fungsi-fungsi yang bertujuan menambah atau memodifikasi perbendaharaan JavaScript standar agar mampu mengenal fitur-fitur modern. |
34 | | -======= |
35 | | - New language features may include not only syntax constructs, but also built-in functions. |
36 | | - The transpiler rewrites the code, transforming syntax constructs into older ones. But as for new built-in functions, we need to implement them. JavaScript is a highly dynamic language, scripts may add/modify any functions, so that they behave according to the modern standard. |
37 | | ->>>>>>> dccca58f268ad6d5a6f2160613a8ea3c5cd53a2d |
| 34 | +// setelah transpile dijalankan |
| 35 | +height = (height !== undefined && height !== null) ? height : 100; |
| 36 | +``` |
38 | 37 |
|
39 | | - Polifyll yang sering digunakan: |
| 38 | +Sekarang kode yang ditulis ulang cocok untuk mesin JavaScript lama. |
40 | 39 |
|
41 | | - - [core js](https://github.com/zloirock/core-js). |
| 40 | +Biasanya, pengembang menjalankan transpiler di komputer mereka sendiri, dan kemudian menyebarkan kode yang ditranspilasi ke server. |
42 | 41 |
|
43 | | - Core js mendukung banyak fitur baru, dan bisa dipersonalisasi sehingga kita bisa memilih fitur-fitur baru apa saja yang hendak kita gunakan dalam proyek kita. |
| 42 | +Berbicara tentang nama, [Babel](https://babeljs.io) adalah salah satu transpiler paling terkenal di luar sana. |
44 | 43 |
|
45 | | - - [polyfill.io](http://polyfill.io). |
| 44 | +Sistem pembangunan proyek modern, seperti [webpack](http://webpack.github.io/), menyediakan sarana untuk menjalankan transpiler secara otomatis pada setiap perubahan kode, sehingga sangat mudah untuk diintegrasikan ke dalam proses pengembangan. |
46 | 45 |
|
47 | | - Ini adalah sebuah website yang menyediakan skrip-skrip dan polifyll-nya. Kita juga bisa dapat mengetahui browser-browser apa saja yang mendukung fitur-fitur moderen tersebut. |
| 46 | +## Polyfills |
48 | 47 |
|
49 | | -Oleh karena itu, jika kita ingin menggunakan fitur-fitur baru dari JavaScript, pastinya kita akan butuh sebuah Polifyll dan Transpiler (utilitas penerjemah) |
| 48 | +Fitur bahasa baru tidak hanya mencakup konstruksi dan operator sintaks, tetapi juga fungsi bawaan. |
50 | 49 |
|
51 | | -## Contoh Pada File Tutorial |
| 50 | +Misalnya, `Math.trunc (n)` adalah fungsi yang "memotong" bagian desimal dari sebuah angka, misalnya `Math.trunc (1.23) = 1`. |
52 | 51 |
|
53 | | -````online |
54 | | -Contoh-contoh yang bekerja saat dipanggil, contohnya: |
| 52 | +Di beberapa mesin JavaScript (sangat usang), tidak ada `Math.trunc`, jadi kode seperti itu akan gagal. |
55 | 53 |
|
56 | | -```js run |
57 | | -alert('Press the "Play" button in the upper-right corner to run'); |
58 | | -``` |
| 54 | +karena kita berbicara tentang fungsi baru, bukan perubahan sintaks, tidak perlu mentranspilasi apa pun di sini. Kita hanya perlu mendeklarasikan fungsi yang hilang. |
59 | 55 |
|
60 | | -Contoh-contoh yang menggunakan JavaScript modern dan akan hanya bekerja pada browser-browser yang mendukungnya. |
| 56 | +Skrip yang memperbarui / menambahkan fungsi baru disebut "polyfill". Ini "mengisi" celah dan menambahkan implementasi yang hilang. |
61 | 57 |
|
62 | | -```` |
| 58 | +Untuk kasus khusus ini, polyfill untuk `Math.trunc` adalah skrip yang mengimplementasikannya, seperti ini: |
63 | 59 |
|
64 | | -```offline |
65 | | -Karena kamu sedang membaca versi offline, maka contoh-contoh pada PDF ini tidak bisa dijalankan. Mungkin beberapa EPUB bisa. |
| 60 | +```js |
| 61 | +if (!Math.trunc) { // kalo ga ada fungsi seperti ini |
| 62 | + // implementasikan |
| 63 | + Math.trunc = function(number) { |
| 64 | + // Math.ceil dan Math.floor ada bahkan di mesin JavaScript yang lama |
| 65 | + // mereka akan dibahas nanti di tutorial |
| 66 | + return number < 0 ? Math.ceil(number) : Math.floor(number); |
| 67 | + }; |
| 68 | +} |
66 | 69 | ``` |
67 | 70 |
|
68 | | -Google Chrome biasanya salah satu browser yang selalu mengikuti perkembangan implementasi fitur-fitur baru JavaScript. Kerennya lagi, jika kamu mengetik sebuah skrip menggunakan sebuah fitur baru, Google Chrome akan menterjemahkannya otomatis tanpa kamu harus menggunakan sebuah Polifyll dan sebuah mesin penerjemah. |
| 71 | +JavaScript adalah bahasa yang sangat dinamis, skrip dapat menambah / memodifikasi fungsi apa pun, bahkan termasuk yang sudah ada di dalamnya. |
| 72 | +
|
| 73 | +Dua library polyfill yang menarik adalah: |
| 74 | +- [core js](https://github.com/zloirock/core-js) yang mendukung banyak hal, memungkinkan untuk kita memasukkan hanya fitur yang dibutuhkan. |
| 75 | +- [polyfill.io](http://polyfill.io) layanan yang menyediakan skrip dengan polyfills, bergantung pada fitur dan browser pengguna. |
| 76 | +
|
| 77 | +
|
| 78 | +## Kesimpulan |
| 79 | +
|
| 80 | +Di bab ini, kami ingin memotivasi Anda untuk mempelajari fitur bahasa modern dan bahkan "yang paling mutakhir", meskipun fitur tersebut belum didukung dengan baik oleh mesin JavaScript. |
| 81 | +
|
| 82 | +Jangan lupa untuk menggunakan transpiler (jika menggunakan sintaks atau operator modern) dan polyfill (untuk menambahkan fungsi yang mungkin hilang). Dan mereka akan memastikan bahwa kodenya berfungsi. |
| 83 | +
|
| 84 | +Misalnya, nanti saat Anda sudah terbiasa dengan JavaScript, Anda dapat menyiapkan sistem pembuatan kode berdasarkan [webpack](http://webpack.github.io/) dengan [babel-loader](https://github.com/babel/babel-loader). |
| 85 | +
|
| 86 | +Sumber daya bagus yang menunjukkan status dukungan saat ini untuk berbagai fitur: |
| 87 | +- <https://kangax.github.io/compat-table/es6/> - untuk JavaScript murni. |
| 88 | +- <https://caniuse.com/> - untuk fungsi terkait dengan browser. |
| 89 | +
|
| 90 | +P.S. Google Chrome biasanya paling mutakhir dengan fitur bahasa, coba saja jika demo tutorial gagal. Sebagian besar demo tutorial berfungsi dengan browser modern apa pun. |
0 commit comments