Pinakamahusay na Kasanayan para sa Iterasyon sa JavaScript
Ipinaliwanag ng artikulong ito ang pinakamahusay na kasanayan para sa iterasyon sa JavaScript.
YouTube Video
Pinakamahusay na Kasanayan para sa Iterasyon sa JavaScript
Karaniwan ang paggamit ng mga for
loops para sa iterasyon sa JavaScript. Dito, magbibigay kami ng detalyadong paliwanag ukol sa pinakamahusay na kasanayan para sa paggamit ng for
loops upang makapagsulat ng mahusay at madaling basahing code.
Piliin ang Tamang Estruktura ng Pagsusuri
Nagbibigay ang JavaScript ng iba't ibang estruktura ng pagsusuri, bawat isa ay angkop para sa iba't ibang layunin.
1// Example of a for loop
2for (let i = 0; i < 5; i++) {
3 console.log(i);
4}
5
6// Example of a for...of loop
7const array = [10, 20, 30];
8for (const value of array) {
9 console.log(value);
10}
11
12// Example of a for...in loop
13const obj = { a: 1, b: 2, c: 3 };
14for (const key in obj) {
15 console.log(`${key}: ${obj[key]}`);
16}
17
18// Example of a while loop
19let count = 0;
20while (count < 5) {
21 console.log(count);
22 count++;
23}
- Ang
for
statement ay angkop kapag ang bilang ng pag-uulit ay paunang natukoy. - Ang
for...of
statement ay angkop para sa maikling pagproseso ng arrays at iterable na mga object. - Ang
for...in
statement ay ginagamit upang mag-iterate sa mga property ng isang object. Gayunpaman, hindi ito angkop para sa mga array. - Ang
while
statement atdo...while
statement ay ginagamit upang kontrolin ang mga loop batay sa mga kondisyon.
Pagamit ng forEach
na method at for...of
na statement
Kapag nag-loop sa isang array, karaniwang gumagamit ng for
statement upang ma-access ang index, ngunit maaaring mas madaling basahin ang forEach
method o ang for...of
statement.
1// Using a standard for loop
2const array = ["apple", "banana", "cherry"];
3for (let i = 0; i < array.length; i++) {
4 console.log(array[i]);
5}
6
7// Using forEach
8array.forEach(item => console.log(item));
9
10// Using for...of
11for (const item of array) {
12 console.log(item);
13}
- Ang
for
statement ay nagpapahintulot sa malinaw na pamamahala ng index habang nag-iiterate. - Ang
forEach
method ay gumagamit ng callback function upang maiproseso nang maikli ang bawat elemento. - Ang
for...of
statement ay madaling basahin at nagbibigay-daan para sa direktang pag-access sa bawat elemento sa isang array.
I-optimize ang mga Kondisyon ng Loop
Dahil paulit-ulit na sinusuri ang kondisyon ng loop, ang pag-iwas sa hindi kinakailangang mga pagkalkula ay maaaring magpabuti sa pagganap.
1const names = ["Alice", "Bob", "Charlie"];
2const scores = [85, 92, 78];
3
4// Inefficient example
5for (let i = 0; i < Math.min(names.length, scores.length); i++) {
6 console.log(`${names[i]} scored ${scores[i]}`);
7}
8
9// Efficient example
10for (let i = 0, len = Math.min(names.length, scores.length); i < len; i++) {
11 console.log(`${names[i]} scored ${scores[i]}`);
12}
- Tulad ng ipinapakita sa halimbawang ito, ang pag-iimbak ng resulta ng kalkulasyon sa isang variable nang maaga ay nagbibigay-daan para sa mas mahusay na pagpapatupad ng loop.
1const scores = [85, 92, 78];
2let sum = 0;
3let sum2 = 0;
4
5// Inefficient example
6for (let i = 0; i < scores.length; i++) {
7 sum += scores[i];
8}
9console.log(`Total score : ${sum}`);
10
11// Efficient example
12for (let i = scores.length - 1; i >= 0; i--) {
13 sum2 += scores[i];
14}
15console.log(`Total score : ${sum2}`);
- Tulad ng ipinapakita sa halimbawang ito, ang pagbabaliktad ng kundisyon ay minsan ay mas mahusay.
Pag-optimize ng Proseso ng Loop
Dahil ang proseso ng loop ay paulit-ulit na isinasagawa, ang pag-iwas sa hindi kinakailangang mga kalkulasyon ay maaaring mapabuti ang pagganap.
1const array = ["apple", "banana", "cherry"];
2
3// Inefficient example
4for (let i = 0; i < 100; i++) {
5 const element = document.querySelector("#myElement");
6 element.textContent = `Count: ${i}`;
7}
8
9// Efficient example
10const element = document.querySelector("#myElement");
11for (let i = 0; i < 100; i++) {
12 element.textContent = `Count: ${i}`;
13}
- Sa halimbawang ito, sa pamamagitan ng paglipat ng
querySelector
na pamamaraan sa labas ng loop, naiiwasan ang hindi kinakailangang paulit-ulit na mga kalkulasyon.
Maging Maingat sa Saklaw (Scope)
Gamitin ang let
o const
upang matiyak na may tamang saklaw ang mga variable sa loob ng loop. Dahil ang var
ay limitado lamang sa saklaw ng function, maaari itong magdulot ng hindi inaasahang kilos.
1// Using let
2for (let i = 0; i < 3; i++) {
3 console.log(i);
4}
5
6// Potential issue with var
7for (var i = 0; i < 3; i++) {
8 setTimeout(() => console.log(i), 1000); // 3, 3, 3
9}
10
11// Using let to avoid the issue
12for (let i = 0; i < 3; i++) {
13 setTimeout(() => console.log(i), 1000); // 0, 1, 2
14}
- Ang
var
ay may saklaw ng function, kaya pagkatapos ng loop angi
ay3
, at lahat ng mga function na isinagawa ngsetTimeout
ay naglalabas ng3
. - Sa paggamit ng
let
, angi
sa loob ngsetTimeout
na callback function ay tumutukoy sa bagong halaga para sa bawat loop, kaya ang0, 1, 2
ay nailalabas ayon sa inaasahan.
Pagbutihin ang Pagkabasa sa Pamamagitan ng Maagang Paglabas
Upang gawing mas simple ang pagproseso ng loop, gamitin nang tama ang break
at continue
upang mapabuti ang pagbabasa.
1// Example using break
2for (let i = 0; i < 10; i++) {
3 if (i === 5) {
4 break; // Exit the loop
5 }
6 console.log(i);
7}
8
9// Example using continue
10for (let i = 0; i < 10; i++) {
11 if (i % 2 === 0) {
12 continue; // Skip to the next iteration
13 }
14 console.log(i);
15}
- Ang paggamit ng
break
ay nagbibigay-daan sa pagtapos ng loop process sa kalagitnaan, nilalampasan ang lahat ng susunod na mga pag-ulit. - Ang paggamit ng
continue
ay nagbibigay-daan sa pag-skip ng kasalukuyang proseso ng loop at paglipat sa susunod na pag-ulit.
Iwasan ang Malalim na Pagkaka-ugat (Nesting)
Ang malalim na pagkaka-ugat ay nagpapahirap sa pagbabasa ng code, kaya hangarin na gawing mababaw ang nesting sa pamamagitan ng maagang pagbabalik o paghahati ng mga functionality sa mga function.
1// Deeply nested example
2for (let i = 0; i < 5; i++) {
3 for (let j = 0; j < 5; j++) {
4 if (i + j > 5) {
5 console.log(i, j);
6 }
7 }
8}
9
10// Improved using function decomposition
11function processPairs(i) {
12 for (let j = 0; j < 5; j++) {
13 if (i + j > 5) {
14 console.log(i, j);
15 }
16 }
17}
18
19for (let i = 0; i < 5; i++) {
20 processPairs(i);
21}
- Sa halimbawang ito, ginagamit ang mga function upang mabawasan ang pag-nesting.
Isaalang-alang ang paghawak ng mga error
Kung may posibilidad ng mga error na maganap sa loob ng loop, magpatupad ng wastong paghawak ng error.
1const data = ["123", "abc", "456", "xyz"];
2
3// Without Error Handling
4for (const item of data) {
5 const result = parseInt(item);
6 console.log(`Parsed value: ${result}`);
7}
8
9// With Error Handling
10for (const item of data) {
11 try {
12 const result = parseInt(item);
13 if (isNaN(result)) {
14 throw new Error(`Invalid number: ${item}`);
15 }
16 console.log(`Parsed value: ${result}`);
17 } catch (error) {
18 console.error(`Error processing item: ${item}. ${error.message}`);
19 }
20}
- Sa halimbawang ito, ang paghawak ng error ay ginagawa para sa pagproseso ng hindi wastong data, pagtukoy at pag-uulat ng mga isyu.
Mga punto na dapat tandaan sa asynchronous na pagproseso
Kapag humahawak ng asynchronous na pagproseso sa mga loop, ang paggamit ng async/await
ay maaaring magresulta sa maikli at madaling maunawaang code.
1const urls = ["https://example.com/1", "https://example.com/2"];
2
3// Proper handling of asynchronous operations
4async function fetchUrls() {
5 for (const url of urls) {
6 const response = await fetch(url);
7 const data = await response.json();
8 console.log(data);
9 }
10}
11
12fetchUrls();
- Ang code na ito ay asynchronous na kumukuha ng mga URL mula sa
urls
na array paisa-isa at pinoproseso ang mga resulta sa JSON na format. Ang paggamit ngasync/await
ay nagpapadali ng mga asynchronous na operasyon, sunod-sunod na kinukuha ang data para sa bawat URL at inilalabas ito sa console.
Unawain ang pagkakaiba sa pagitan ng for...of
na pahayag at forEach()
sa asynchronous na pagproseso.
1async function asyncTask(num) {
2 return new Promise(resolve => {
3 setTimeout(() => {
4 console.log(`Task ${num} done`);
5 resolve();
6 }, 100);
7 });
8}
9
10async function runWithForOf() {
11 console.log("Start for...of");
12 for (const num of [1, 2, 3]) {
13 await asyncTask(num);
14 }
15 console.log("End for...of");
16}
17
18async function runWithForEach() {
19 console.log("Start forEach");
20 [1, 2, 3].forEach(async num => {
21 await asyncTask(num);
22 });
23 console.log("End forEach");
24}
25
26async function executeExamples() {
27 await runWithForOf();
28 await runWithForEach();
29}
30
31executeExamples();
-
Kapag humahawak ng asynchronous na pagproseso sa mga loop, tandaan ang pagkakaiba sa pag-uugali, tulad ng ipinapakita sa halimbawa na ito, sa pagitan ng paggamit ng
for...of
na mayasync/await
at paggamit ngforEach()
. -
Sa
for...of
, ang code ay isinasagawa nang sunud-sunod at naghihintay saawait
sa loob ng loop bago magpatuloy sa susunod na iterasyon. Sa kabilang banda, angforEach()
ay isinasagawa ang pagproseso nang sabay-sabay.
Konklusyon
Ang for
na pahayag sa JavaScript ay isang simple ngunit makapangyarihang kasangkapan. Sa pamamagitan ng paggamit ng mga pinakamahusay na kasanayan na ipinakita dito, makakagawa ka ng mahusay at mataas na nababasang code. Bigyang-pansin ang pagpili ng angkop na mga istruktura ng loop, pamamahala ng saklaw, paghawak ng error, at maghangad ng mataas na mapapanatiling code.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.