Praktik Terbaik untuk Loop 'for' di TypeScript
Artikel ini menjelaskan praktik terbaik untuk menggunakan loop 'for' di TypeScript.
YouTube Video
Praktik Terbaik untuk Loop 'for' di TypeScript
Pernyataan for
adalah sintaks yang mendasar dan sangat kuat untuk melakukan operasi berulang. Dalam TypeScript, memanfaatkan keamanan tipe dan menulis kode dengan mempertimbangkan keterbacaan dan kemudahan pemeliharaan memungkinkan Anda menulis kode yang efisien dengan lebih sedikit kesalahan.
Memilih Jenis Loop yang Tepat
TypeScript menawarkan beberapa konstruksi loop, masing-masing sesuai untuk kasus penggunaan yang berbeda. Memilih loop yang sesuai sangat penting untuk kejelasan kode dan kinerjanya.
Loop for
Standar
1for (let i = 0; i < 10; i++) {
2 console.log(i);
3}
Perulangan for
standar sangat ideal ketika Anda membutuhkan kendali yang tepat atas indeks iterasi.
Praktik Terbaik
1const maxIterations = 10;
2for (let i = 0; i < maxIterations; i++) {
3 console.log(i);
4}
Saat menulis pernyataan for
, mengingat poin-poin berikut dapat membantu Anda menulis kode yang lebih aman dan lebih mudah dibaca.
- Gunakan
let
untuk variabel indeks- Menggunakan
let
daripadavar
membatasi cakupan ke blok, mencegah perilaku yang tidak diinginkan.
- Menggunakan
- Gunakan konstanta dan nama variabel yang deskriptif untuk membuat batasan perulangan lebih jelas.
- Menghindari angka ajaib dan menggunakan nama variabel yang bermakna meningkatkan keterbacaan.
Loop for...of
1const array = [1, 2, 3];
2for (let value of array) {
3 console.log(value);
4}
Loop for...of
cocok untuk iterasi pada objek yang dapat diiterasi seperti array dan string.
Praktik Terbaik
1const array = [1, 2, 3];
2for (const value of array) {
3 console.log(value);
4}
Ketika menulis perulangan for...of
, memperhatikan poin-poin berikut dapat membantu Anda menulis kode yang lebih aman.
- Gunakan
const
untuk variabel loop- Jika nilai tidak dimodifikasi dalam perulangan, menggunakan
const
membantu mencegah pengubahan yang tidak disengaja.
- Jika nilai tidak dimodifikasi dalam perulangan, menggunakan
Loop for...in
1const obj = { a: 1, b: 2, c: 3 };
2for (const key in obj) {
3 console.log(`${key}: ${obj[key]}`);
4}
Loop for...in
melakukan iterasi pada properti yang dapat dienumerasi dari sebuah objek.
Praktik Terbaik
1const obj = { a: 1, b: 2, c: 3 };
2for (const key in obj) {
3 if (obj.hasOwnProperty(key)) {
4 console.log(`${key}: ${obj[key]}`);
5 }
6}
Saat menulis loop for...in
, Anda dapat mempertimbangkan poin-poin berikut.
- Saring properti
- Jika Anda perlu menghindari properti yang diwariskan, Anda dapat menggunakan
hasOwnProperty
.
- Jika Anda perlu menghindari properti yang diwariskan, Anda dapat menggunakan
- Jangan gunakan
for...in
pada array. Hindari menggunakanfor...in
dengan array. Ini dapat mengiterasi semua properti yang dapat dihitung, termasuk yang bukan indeks array.
Metode forEach
1const array = [1, 2, 3];
2array.forEach((value, index) => {
3 console.log(`Index: ${index}, Value: ${value}`);
4});
Saat melakukan iterasi pada array, forEach
lebih ringkas dan menghilangkan kebutuhan untuk mengelola indeks.
Praktik Terbaik
Saat menggunakan metode forEach
, Anda dapat mempertimbangkan poin-poin berikut.
- Gunakan fungsi panah
- Gunakan fungsi panah yang ringkas untuk meningkatkan keterbacaan.
- Hindari gangguan
forEach
tidak mendukungbreak
ataucontinue
. Gunakan perulanganfor...of
ataufor
jika diperlukan:.
Keamanan Tipe dan Pencegahan Kesalahan
Dengan memanfaatkan sistem tipe TypeScript, Anda dapat mencegah kesalahan saat runtime selama iterasi:.
Tentukan Tipe yang Ketat untuk Variabel Perulangan
1const items = [1, 2, 3];
2items.forEach(item => {
3 console.log(item * 2);
4});
1const items: number[] = [1, 2, 3];
2items.forEach((item: number) => {
3 console.log(item * 2);
4});
Dengan secara eksplisit menentukan tipe untuk variabel perulangan, Anda dapat mendeteksi ketidakcocokan tipe lebih awal.
Hindari any
yang Implisit
1{
2 "compilerOptions": {
3 "noImplicitAny": true
4 }
5}
Selain itu, dengan mengaktifkan noImplicitAny
di tsconfig.json
, Anda dapat mencegah variabel tanpa tipe eksplisit secara implisit diberikan tipe any
.
Gunakan ReadonlyArray
Jika Diperlukan
1const numbers: ReadonlyArray<number> = [1, 2, 3];
2for (const value of numbers) {
3 console.log(value);
4}
Jika Anda sedang melakukan iterasi pada array yang tidak boleh diubah, Anda bisa menggunakan ReadonlyArray
.
Pertimbangan Kinerja
Efisiensi sangat penting untuk perulangan yang memproses data besar atau perulangan yang sering dieksekusi:.
Pilih metode implementasi loop yang optimal.
Ada berbagai cara untuk mengimplementasikan loop, masing-masing memiliki perbedaan dalam keterbacaan dan efisiensi eksekusi.
1// Prepare input data (an array from 1 to 1000000)
2const input: number[] = Array.from({ length: 1000000 }, (_, i) => i + 1);
3
4// --- for ---
5console.time('for loop');
6const squaresFor: number[] = [];
7for (let i = 0; i < input.length; i++) {
8 squaresFor.push(input[i] * input[i]);
9}
10console.timeEnd('for loop');
11
12// --- while ---
13console.time('while loop');
14const squaresWhile: number[] = [];
15let i: number = 0;
16while (i < input.length) {
17 squaresWhile.push(input[i] * input[i]);
18 i++;
19}
20console.timeEnd('while loop');
21
22// --- for-of ---
23console.time('for-of loop');
24const squaresForOf: number[] = [];
25for (const num of input) {
26 squaresForOf.push(num * num);
27}
28console.timeEnd('for-of loop');
29
30// --- forEach ---
31console.time('forEach loop');
32const squaresForEach: number[] = [];
33input.forEach((num: number): void => {
34 squaresForEach.push(num * num);
35});
36console.timeEnd('forEach loop');
37
38// --- map ---
39console.time('map');
40const squaresMap: number[] = input.map((value: number): number => value * value);
41console.timeEnd('map');
Efisiensi bervariasi tergantung pada lingkungan eksekusi, tetapi misalnya, saat menjalankan loop sejuta kali, perbedaannya dapat menjadi cukup terasa. Pilih metode perulangan yang optimal dengan mempertimbangkan pemeliharaan dan kinerja.
Gunakan Metode Iterasi Bawaan
1const squares = [1, 2, 3].map(value => value * value);
2console.log(squares);
3
4const numbers = [1, 2, 3, 4, 5, 6];
5const evenNumbers = numbers.filter(value => value % 2 === 0);
6console.log(evenNumbers); // [2, 4, 6]
7
8const squaredEvens = numbers
9 .filter(value => value % 2 === 0) // Keep only even numbers
10 .map(value => value * value); // Square the remaining values
11
12console.log(squaredEvens); // [4, 16, 36]
Metode seperti map
dan filter
dapat lebih mudah dibaca dalam beberapa kasus.
Pilih for...of
untuk Keterbacaan
Kinerja sebaiknya diutamakan hanya dalam kasus terbatas; menulis kode yang dapat dibaca secara umum lebih penting. Sebagai contoh, memprioritaskan for...of
dapat meningkatkan keterbacaan.
1const fruits = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4 console.log(`${i}: ${fruits[i]}`);
5}
Praktik Terbaik
1const fruits = ["apple", "banana", "cherry"];
2
3for (const [index, fruit] of fruits.entries()) {
4 console.log(`${index}: ${fruit}`);
5}
Dengan memprioritaskan perulangan for...of
, Anda dapat menulis kode yang lebih mudah dibaca dan tahan terhadap kesalahan. Seperti yang ditunjukkan dalam contoh ini, jika Anda juga membutuhkan indeks array, menggabungkan entries()
dengan for...of
adalah cara yang efektif.
Menghindari Kesalahan Umum
Memodifikasi Koleksi Selama Iterasi
1const array = [1, 2, 3];
2for (const value of [...array]) {
3 if (value === 2) {
4 array.push(4); // Avoid this!
5 }
6}
7console.log(array);
Memodifikasi array selama iterasi dapat menyebabkan perilaku yang tidak terduga:. Gunakan salinan jika diperlukan.
Pertimbangkan kasus khusus
1const array: number[] = [];
2for (const value of array) {
3 console.log(value); // No output, but no errors
4}
Kode ini berfungsi dengan baik, tetapi jika Anda perlu menangani array kosong, Anda dapat meningkatkannya seperti berikut.
1const array: number[] = [];
2if (array.length === 0) {
3 console.log("The array is empty.");
4} else {
5 for (const value of array) {
6 console.log(value);
7 }
8}
Mempertimbangkan kasus khusus dapat membantu mencegah kesalahan dalam kode berikutnya.
Kesimpulan
Untuk menguasai pernyataan for
dalam TypeScript, penting untuk memahami berbagai konstruksi loop, mematuhi praktik yang aman secara tipe, dan mengoptimalkan kinerja. Praktik terbaik ini membantu Anda menulis kode yang lebih bersih, lebih andal, dan lebih mudah dipelihara.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.