Skip to content

Commit b86da35

Browse files
Merge pull request #1445 from Namchee/id-js-modern
docs(i18n-id): Provide Indonesian translation for section `Modern JavaScript`
2 parents 281a7d9 + 9719a56 commit b86da35

File tree

4 files changed

+404
-0
lines changed

4 files changed

+404
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
//// { order: 1, target: "es5" }
2+
3+
// JavaScript modern menambahkan sebuah cara untuk menangani _callback_
4+
// dengan cara yang elegan melalui API berbasis Promise yang memiliki
5+
// sintaks khusus yang mengizinkan Anda untuk menganggap kode
6+
// program yang bersifat asinkron seperti kode program biasa
7+
8+
// Seperti fitur lainnya, Promise memiliki kekurangan dalam
9+
// hal kompleksitas kode program: membuat sebuah fungsi
10+
// sebagai fungsi asinkron akan membuat nilai kembalian
11+
// dibungkus dalam Promise. Apa yang sebelumnya mengembalikan
12+
// sebuah string, sekarang akan mengembalikan Promise<string>.
13+
14+
const fungsi = () => ":wave:";
15+
const fungsiAsinkron = async () => ":wave:";
16+
17+
const string = fungsi();
18+
const stringDalamPromise = fungsiAsinkron();
19+
20+
string.length;
21+
22+
// stringDalamPromise merupakan sebuah Promise, bukan string:
23+
24+
stringDalamPromise.length;
25+
26+
// Anda dapat menggunakan kata kunci `await` untuk mengubah
27+
// sebuah Promise menjadi nilai yang ditampung oleh Promise
28+
// tersebut. Untuk saat ini, kata kunci tersebut hanya dapat
29+
// digunakan pada fungsi asinkron.
30+
31+
const fungsiPembungkus = async () => {
32+
const string = fungsi();
33+
const stringDalamPromise = await fungsiAsinkron();
34+
35+
// Melalui kata kunci `await`, sekarang `stringDalamPromise`
36+
// merupakan sebuah string.
37+
string.length;
38+
stringDalamPromise.length;
39+
};
40+
41+
// Kode program yang berjalan menggunakan kata kunci `await`
42+
// dapat melempar galat, dan hal tersebut menjadi penting
43+
// karena galat tersebut harus ditangani pada bagian manapun.
44+
45+
const fungsiYangMelemparGalat = async () => {
46+
throw new Error("Jangan panggil fungsi ini");
47+
};
48+
49+
// Anda dapat membungkus pemanggilan fungsi asinkron pada sebuah
50+
// blok try-catch untuk menangani kasus di mana fungsi yang
51+
// dipanggil melakukan sesuatu yang tidak diharapkan.
52+
53+
const menangkapFungsiAsinkron = async () => {
54+
const nilaiKembalian = "Halo dunia!";
55+
try {
56+
await fungsiYangMelemparGalat();
57+
} catch (error) {
58+
console.error("fungsiYangMelemparGalat gagal dijalankan", error);
59+
}
60+
return nilaiKembalian;
61+
};
62+
63+
// Karena ergonomi dari API ini yang mengharuskan Anda untuk
64+
// mengembalikan satu nilai kembalian, atau melempar galat, Anda
65+
// sebaiknya memberikan informasi mengenai nilai-nilai yang
66+
// terdapat pada nilai yang dikembalikan dan melempat galat
67+
// apabila sesuatu yang benar-benar spesial terjadi.
68+
69+
const contohFungsiAkarKuadrat = async (masukan: any) => {
70+
if (isNaN(masukan)) {
71+
throw new Error("Masukan hanya dapat berupa angka");
72+
}
73+
74+
if (masukan < 0) {
75+
return { sukses: false, pesan: "Tidak bisa mencari akar bilangan negatif" };
76+
} else {
77+
return { sukses: true, nilai: Math.sqrt(masukan) };
78+
}
79+
};
80+
81+
// Lalu pengguna fungsi tersebut dapat memeriksa respon
82+
// dan mengetahui apa yang harus dilakukan dengan nilai kembalian
83+
// tersebut. Walaupun contoh berikut merupakan contoh yang
84+
// sederhana, ketika Anda mulai bekerja dengan kode
85+
// yang berhubungan dengan jaringan, API sebaiknya didokumentasikan.
86+
87+
const periksaAkarKuadrat = async (nilai: number) => {
88+
const respon = await contohFungsiAkarKuadrat(nilai);
89+
if (respon.sukses) {
90+
respon.nilai;
91+
}
92+
};
93+
94+
// Sintaks Async / Await mengubah kode yang seperti berikut:
95+
96+
// getResponse(url, (response) => {
97+
// getResponse(response.url, (secondResponse) => {
98+
// const responseData = secondResponse.data
99+
// getResponse(responseData.url, (thirdResponse) => {
100+
// ...
101+
// })
102+
// })
103+
// })
104+
105+
// Menjadi linear seperti berikut:
106+
107+
// const response = await getResponse(url)
108+
// const secondResponse = await getResponse(response.url)
109+
// const responseData = secondResponse.data
110+
// const thirdResponse = await getResponse(responseData.url)
111+
// ...
112+
113+
// Sintaks Async / Await dapat membuat kode program lebih condong
114+
// ke sisi kiri, dan dibaca pada ritme yang konsisten.
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// JavaScript adalah bahasa pemrograman yang memiliki
2+
// beberapa cara untuk mendeklarasikan objek-objek yang tidak
3+
// berubah. Cara yang paling menonjol adalah dengan menggunakan
4+
// kata kunci `const` - yang menandakan bahwa nilai tidak akan
5+
// berubah.
6+
7+
const haloDunia = "Halo Dunia";
8+
9+
// Sekarang, Anda tidak dapat mengubah nilai haloDunia, TypeScript
10+
// akan melempar sebuah galat mengenai hal tersebut, untuk
11+
// mencegah Anda mendapatkan galat saat program dieksekusi.
12+
13+
// You cannot change helloWorld now, TypeScript will give
14+
// you an error about this, because you would get one at
15+
// runtime instead.
16+
17+
haloDunia = "Hai Dunia";
18+
19+
// Mengapa Anda harus peduli pada nilai yang tidak dapat berubah?
20+
// Alasan utamanya adalah untuk mengurangi kompleksitas pada kode
21+
// program Anda. Apabila Anda dapat mengurangi hal-hal yang nilainya
22+
// dapat berubah, Anda akan mengurangi hal yang harus Anda pantau.
23+
24+
// Menggunakan kata kunci `const` merupakan langkah awal yang baik,
25+
// namun cara tersebut tidak akan sepenuhnya berhasil apabila
26+
// digunakan untuk objek.
27+
28+
const objekKonstanta = {
29+
pesan: "Halo Dunia",
30+
};
31+
32+
// objekKonstanta tidak sepenuhnya konstan, karena Anda masih
33+
// dapat mengubah beberapa bagian dari objek tersebut, sebagai
34+
// contoh Anda dapat mengubah nilai dari `pesan`:
35+
36+
objekKonstanta.pesan = "Hai Dunia";
37+
38+
// Kata kunci `const` menandakan objek yang ditunjuk memiliki
39+
// nilai yang tidak akan berubah, namun bagian internal
40+
// dari objek tersebut tetap dapat diubah. Perilaku tersebut
41+
// dapat diubah menggunakan `Object.freeze`.
42+
43+
const objekKonstantaPasti = Object.freeze({
44+
pesan: "Halo Dunia",
45+
});
46+
47+
// Ketika sebuah objek dibekukan, maka Anda tidak dapat
48+
// mengubah bagian internal dari objek tersebut. TypeScript
49+
// akan meleparkan sebuah galat pada kasus ini:
50+
51+
objekKonstantaPasti.pesan = "Hai Dunia";
52+
53+
// Cara tersebut juga dapat digunakan pada _array_:
54+
55+
const arrayYangDibekukan = Object.freeze(["Hai"]);
56+
arrayYangDibekukan.push("Dunia");
57+
58+
// Menggunakan kata kunci `Object.freeze` menjamin
59+
// bahwa nilai objek tidak akan berubah, termasuk
60+
// internal dari objek tersebut.
61+
62+
// TypeScript memiliki beberapa _hook_ sintaks tambahan untuk
63+
// meningkatkan kemampuan Anda ketika bekerja dengan data
64+
// yang tidak berubah yang dapat Anda temukan pada bagian
65+
// contoh TypeScript berikut:
66+
//
67+
// example:literals
68+
// example:type-widening-and-narrowing
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
//// { order: 1, target: "ES5" }
2+
3+
// JavaScript menambahkan sintaks impor dan ekspor pada tahun 2016
4+
// dan TypeScript memiliki dukungan penuh untuk sintaks ini yang
5+
// berfungsi untuk menghubungkan berkas dengan berkas lain dan
6+
// pada modul eksternal lain. TypeScript memperluas sintaks
7+
// impor dan ekspor dengan memperbolehkan tipe data untuk
8+
// diimpor dan diekspor pada kode program.
9+
10+
// Berikut merupakan kode program untuk mengimpor sebuah modul.
11+
12+
import { danger, message, warn, DangerDSLType } from "danger";
13+
14+
// Kode di atas berusaha mengimpor beberapa impor bernama
15+
// dari sebuah modul NodeJS bernama `danger`. Walaupun ada
16+
// lebih dari empat objek yang dapat diimpor, namun hanya
17+
// empat objek tersebut yang akan diimpor.
18+
19+
// Dengan mengimpor objek secara spesifik, perkakas yang
20+
// tersedia dapat menghapus kode-kode yang tidak dibutuhkan
21+
// pada aplikasi Anda, dan membantu Anda untuk mengetahui
22+
// impor apa yang digunakan pada sebuah berkas.
23+
24+
// Pada contoh di atas: `danger`, `message`. dan `warn`
25+
// merupakan impor JavaScript - sedangkan `DangerDSLType`
26+
// merupakan sebuah antarmuka.
27+
28+
// TypeScript mengizinkan pengembang untuk mendokumentasikan
29+
// kode program yang mereka buat menggunakan JSDoc, sehingga
30+
// dokumentasi juga dapat diimpor. Sebagai contoh, apabila
31+
// Anda menyorot pada bagian-bagian kode di bawah, Anda
32+
// dapat melihat penjelasan mengenai bagian tersebut.
33+
34+
danger.git.modified_files;
35+
36+
// Apabila Anda ingin mengetahui cara untuk menyediakan
37+
// anotasi pada dokumentasi, silahkan baca pada
38+
// example:jsdoc-support
39+
40+
// Cara lain untuk mengimpor kode adalah dengan menggunakan
41+
// ekspor bawaan milik modul. Berikut merupakan contoh
42+
// dari penggunaan ekspor bawaan pada modul `debug`, yang
43+
// mengekspos sebuah fungsi yang membuat sebuah fungsi pencatatan.
44+
45+
import debug from "debug";
46+
const log = debug("playground");
47+
log("Started running code");
48+
49+
// Karena sifat dari ekspor bawaan yang tidak memiliki
50+
// nama yang tetap, ekspor-ekspor bawaan dapat membingungkan
51+
// perkakas analisis seperti dukungan _refactoring_ pada
52+
// TypeScript, namun ekspor bawaan tetap memiliki kegunaan.
53+
54+
// Karena ada sejarah panjang dari impor dan ekspor kode
55+
// dalam JavaScript, terdapat sebuah bagian yang membingungkan
56+
// dari ekspor bawaan: Beberapa ekspor memiliki dokumentasi
57+
// yang menyatakan bahwa Anda dapat menulis sebuah impor sebagai
58+
// berikut:
59+
60+
import req from "request";
61+
62+
// Namun, impor tersebut akan gagal, kemudian Anda menemukan
63+
// sebuah pertanyaan pada StackOverflow yang menyarankan
64+
// Anda untuk mengimpor seperti berikut:
65+
66+
import * as req from "request";
67+
68+
// Dan cara tersebut akan berhasil. Alasan mengenai keberhasilan
69+
// tersebut akan dibahas pada bagian akhir dari dokumentasi ini.
70+
71+
// Supaya dapat diimpor, kode harus dapat diekspor. Cara modern
72+
// untuk menyatakan ekspor adalah menggunakan kata kunci `export`.
73+
74+
/** Jumlah stiker yang tersedia */
75+
export const jumlahStiker = 11;
76+
77+
// Ekspor tersebut dapat diimpor pada berkas lain dengan cara:
78+
//
79+
// import { jumlahStiker } from "./path/to/file"
80+
81+
// Anda dapat menulis `export` sebanyak mungkin pada sebuah
82+
// berkas sesuai keinginan Anda. Ekspor bawaan juga dapat
83+
// dinyatakan dengan cara yang sama.
84+
85+
/** Menghasilkan stiker untuk Anda */
86+
const pembuatStiker = () => { };
87+
export default pembuatStiker;
88+
89+
// Ekspor tersebut dapat diimpor pada berkas lain dengan cara:
90+
//
91+
// import perolehStiker from "./path/to/file"
92+
//
93+
// Impor bawaan dapat dinamai sesuai keinginan pada berkas
94+
// tempat bagian tersebut diimpor.
95+
96+
// Ada cara-cara lain untuk melakukan impor, namun contoh-contoh
97+
// di atas merupakan cara-cara yang umum digunakan pada kode
98+
// program modern. Membahas seluruh cara untuk mengimpor
99+
// kode merupakan sebuah topik yang panjang pada buku pegangan berikut:
100+
//
101+
// https://www.typescriptlang.org/docs/handbook/modules.html
102+
103+
// Namun, untuk menjawab pertanyaan terakhir, apabila Anda
104+
// melihat kode JavaScript pada contoh ini - Anda akan melihat:
105+
106+
// var pembuatStiker = function () { };
107+
// exports.default = pembuatStiker;
108+
109+
// Kode di atas akan menetapkan properti bawaan dari objek `exports`
110+
// menjadi `pembuatStiker`. Ada kode-kode lain yang menetapkan
111+
// `exports` bawaan menjadi sebuah fungsi.
112+
//
113+
// TypeScript memilih untuk berpegang pada spesifikasi ECMAScript
114+
// untuk menangani kasus-kasus tersebut, yaitu dengan melemparkan
115+
// sebuah galat. Namun, terdapat opsi `esModuleInterop` pada kompilator
116+
// untuk menangani kasus-kasus tersebut secara otomatis.
117+
//
118+
// Apabila Anda mengaktifkan opsi tersebut pada contoh ini, Anda
119+
// akan melihat bahwa galat akan hilang.

0 commit comments

Comments
 (0)