1- # Arrow functions ขั้นพื้นฐาน
1+ # ฟังก์ชันลูกศร ( Arrow functions) ข้อมูลพื้นฐาน
22
3- มีการสร้างฟังก์ชันอีกรูปแบบหนึ่งที่ประโยคเรียบง่ายและกระชับกว่านิพจน์ฟังก์ชัน
3+ มีไวยากรณ์ที่เรียบง่ายและกระชับอีกแบบหนึ่งในการสร้างฟังก์ชัน ซึ่งมักจะดีกว่า Function Expression
44
5- มันเรียกว่า "Arrow function" เพราะมีรูปประโยคดังนี้ :
5+ เรียกว่า "ฟังก์ชันลูกศร" เพราะมันดูแบบนี้ :
66
77``` js
88let func = (arg1 , arg2 , ... , argN ) => expression;
99```
1010
11- จากตัวอย่างด้านบน คือสร้างฟังก์ชัน ` func ` ที่ยอมรับอาร์กิวเมนต์ ` arg1..argN ` จากนั้นจึงประเมิน expression ที่อยู่ทางด้านขวาแล้วส่งคืนผลลัพธ์
11+ นี่จะสร้างฟังก์ชัน ` func ` ที่รับอาร์กิวเมนต์ ` arg1..argN ` จากนั้นจะประเมินค่า ` expression ` ทางด้านขวาโดยใช้อาร์กิวเมนต์เหล่านั้น แล้วส่งคืนผลลัพธ์
1212
13- กล่าวอีกนัยหนึ่งก็คือ เวอร์ชันที่สั้นกว่าของ
13+ อีกนัยหนึ่ง มันคือเวอร์ชันที่สั้นกว่าของ:
1414
1515``` js
1616let func = function (arg1 , arg2 , ... , argN ) {
@@ -23,7 +23,7 @@ let func = function(arg1, arg2, ..., argN) {
2323``` js run
2424let sum = (a , b ) => a + b;
2525
26- /* Arrow function นี้เป็นรูปที่เขียนสั้นกว่าของ :
26+ /* ฟังก์ชันลูกศรนี้เป็นรูปแบบสั้นกว่าของ :
2727
2828let sum = function(a, b) {
2929 return a + b;
@@ -33,83 +33,79 @@ let sum = function(a, b) {
3333alert ( sum (1 , 2 ) ); // 3
3434```
3535
36- อย่างที่เราเห็น ` (a, b) => a + b ` หมายถึงฟังก์ชันที่ยอมรับสองอาร์กิวเมนต์ชื่อ ` a ` และ ` b ` เมื่อดำเนินการ มันจะประเมินนิพจน์ ` a + b ` และส่งคืนผลลัพธ์
36+ ดังที่เห็น ` (a, b) => a + b ` หมายถึงฟังก์ชันที่รับอาร์กิวเมนต์สองตัว ชื่อ ` a ` และ ` b ` เมื่อรันฟังก์ชัน มันจะประเมินนิพจน์ ` a + b ` และส่งคืนผลลัพธ์
3737
38- - หากเรารับอาร์กิวเมนต์เพียงตัวเดียว วงเล็บรอบพารามิเตอร์สามารถละเว้นได้ ซึ่งจะทำให้มันเขียนสั้นลงอีก
38+ - ถ้าเรามีอาร์กิวเมนต์เพียงตัวเดียว วงเล็บล้อมรอบพารามิเตอร์สามารถละได้ ทำให้มันสั้นลงไปอีก
3939
40- ตัวอย่างเช่น :
40+ ยกตัวอย่างเช่น :
4141
4242 ``` js run
4343 * ! *
4444 let double = n => n * 2 ;
45- // roughly the same as : let double = function(n) { return n * 2 }
45+ // คล้ายๆ กับ : let double = function(n) { return n * 2 }
4646 */ ! *
4747
4848 alert ( double (3 ) ); // 6
4949 ```
5050
51- - หากไม่มีอาร์กิวเมนต์ จะเขียนวงเล็บเปล่าๆ (ควรมีวงเล็บเพื่อโปรแกรมจะได้รู้ว่านี่คือฟังก์ชั่น) :
51+ - ถ้าไม่มีอาร์กิวเมนต์เลย วงเล็บจะว่างเปล่า แต่ต้องใส่ไว้ :
5252
5353 ` ` ` js run
5454 let sayHi = () => alert("Hello!");
5555
5656 sayHi();
5757 ` ` `
5858
59- Arrow functions เหมือนกันกับนิพจน์ฟังก์ชันทุกอย่าง ( Function Expressions)
59+ ฟังก์ชันลูกศรสามารถใช้ได้ในลักษณะเดียวกับ Function Expression
6060
61- ตัวอย่างเช่น การสร้างฟังก์ชันแบบไดนามิก :
61+ ยกตัวอย่างเช่น สำหรับการสร้างฟังก์ชันแบบไดนามิก :
6262
6363` ` ` js run
6464let age = prompt("What is your age?", 18);
6565
6666let welcome = (age < 18) ?
67- () => alert('Hello') :
67+ () => alert('Hello! ') :
6868 () => alert("Greetings!");
6969
7070welcome();
7171` ` `
7272
73- Arrow functions อาจดูไม่คุ้นเคยและไม่ค่อยอ่านง่ายในตอนแรก แต่เมื่อเราทำงานกับมันเรื่อยๆก็จะคุ้นเคยกับพวกมันอย่างรวดเร็ว
73+ ฟังก์ชันลูกศรอาจดูไม่คุ้นตาและอ่านยากในตอนแรก แต่พอตาชินกับโครงสร้างแล้ว ก็จะเปลี่ยนไปอย่างรวดเร็ว
7474
75- หากเราขี้เกียจจะเขียนหลายบรรทัด Arrow functions สะดวกมากสำหรับการเขียนฟังก์ชั่นแบบบรรทัดเดียว
75+ มันสะดวกมากสำหรับการทำงานง่ายๆ บรรทัดเดียว ในยามที่เรารู้สึกขี้เกียจเขียนโค้ดยาวๆ
7676
77- ## Arrow functions แบบหลายบรรทัด
77+ ## ฟังก์ชันลูกศรแบบหลายบรรทัด
7878
79- ตัวอย่างข้างต้นใช้อาร์กิวเมนต์จากด้านซ้ายของ ` =>` และประเมินนิพจน์ที่อยู่ด้านขวา
79+ ฟังก์ชันลูกศรที่เราเห็นมาจนถึงตอนนี้ค่อนข้างเรียบง่าย โดยรับอาร์กิวเมนต์จากด้านซ้ายของ ` =>` ประเมินค่า และส่งคืนนิพจน์ทางขวาโดยใช้อาร์กิวเมนต์เหล่านั้น
8080
81- หากเราต้องการเขียนนิพจน์หรือคำสั่งหลายๆตัวใน Arrow function เราก็ทำได้เช่นกันเพียงแค่ ใส่ปีกกาเหมือนฟังก์ชั่นปกติ ดั่งตัวอย่างด้านล่าง
81+ บางครั้งเราต้องการฟังก์ชันที่ซับซ้อนกว่านั้น ที่มีหลายนิพจน์และประโยค ในกรณีนี้ เราสามารถครอบมันด้วยวงเล็บปีกกาได้ ความแตกต่างหลักคือ การใช้วงเล็บปีกกาต้องมีคำสั่ง ` return ` ภายในเพื่อส่งค่ากลับ (เหมือนฟังก์ชันปกติ)
8282
83- แบบนี้ :
83+ ตัวอย่างเช่น :
8484
8585` ` ` js run
86- let sum = (a , b ) => { // ปีกกาเปิดเพื่อเขียนนิพจน์หรือคำสั่งหลายๆตัว
86+ let sum = (a, b) => { // วงเล็บปีกกาเปิดฟังก์ชันแบบหลายบรรทัด
8787 let result = a + b;
8888*!*
89- <<<<<< < HEAD
90- return result; // หากเราใส่ปีกกาอย่าลืมใส่ `return` ลงไปด้วยเพื่อส่งกลับผลลัพธ์ที่ได้ ไม่งั้นฟังก์ชั่นนี้จะส่ง `undefined` แทน
91- ====== =
92- return result; // if we use curly braces, then we need an explicit "return"
93- >>>>>> > 29216730a877be28d0a75a459676db6e7f5c4834
89+ return result; // ถ้าเราใช้วงเล็บปีกกา ต้องใส่ "return" อย่างชัดเจน
9490*/!*
9591};
9692
9793alert( sum(1, 2) ); // 3
9894` ` `
9995
100- ``` smart header="เพิ่มเติม "
101- เราอวย Arrow functions เพราะว่ามันทำให้การเขียนฟังก์ชั่นกระชับขึ้น แต่นั่นไม่ใช่เหตุผลทั้งหมด
96+ ` ` ` smart header="ยังมีอีกมากมาย "
97+ ที่ผ่านมาเราชื่นชมฟังก์ชันลูกศรในเรื่องความกระชับ แต่นั่นไม่ใช่ทั้งหมด!
10298
103- Arrow functions ยังมีฟีเจอร์ที่น่าสนใจอื่นๆอีก
99+ ฟังก์ชันลูกศรยังมีคุณสมบัติที่น่าสนใจอื่นๆ อีก
104100
105- หากต้องการศึกษาเชิงลึก เราต้องทำความรู้จักกับจาวาสคริปต์ในด้านอื่นๆ ก่อน ดังนั้นเราค่อยจะกลับมาเจอกับ Arrow functions ใหม่ในบท <info:arrow-functions>
101+ เพื่อศึกษาสิ่งเหล่านั้นอย่างลึกซึ้ง เราจำเป็นต้องมีความรู้เกี่ยวกับแง่มุมอื่นๆ ของ JavaScript ก่อน ดังนั้นเราจะกลับมาพูดถึงฟังก์ชันลูกศรอีกครั้งในบท <info:arrow-functions>
106102
107- ในตอนนี้ เราก็สามารถใช้ Arrow functions เขียนฟังก์ชั่นบรรทัดเดียว รวมถึง ฟังก์ชันไว้เรียกทีหลัง (Callback function) ได้แล้ว
103+ สำหรับตอนนี้ เราสามารถใช้ฟังก์ชันลูกศรกับการทำงานแบบบรรทัดเดียวและฟังก์ชันคอลแบ็กได้แล้ว
108104` ` `
109105
110106## สรุป
111107
112- Arrow functions สำหรับคนชอบความกระชับ สามารถเขียนได้สองแบบ :
108+ ฟังก์ชันลูกศรนั้นใช้สะดวกสำหรับการกระทำง่ายๆ โดยเฉพาะอย่างยิ่งแบบบรรทัดเดียว มีสองรูปแบบดังนี้ :
113109
114- 1 . ไม่มีปีกกา : ` (...args) => expression ` -- ด้านขวาคือนิพจน์: ฟังก์ชันจะประเมินและส่งคืนผลลัพธ์ทันที
115- 2 . มีปีกกา : ` (...args) => { body } ` -- ช่วยให้เราสามารถเขียนหลายคำสั่งภายในฟังก์ชัน แต่เราจำเป็นต้องมี ` return ` เพื่อส่งผลลัพธ์กลับไป
110+ 1. ไม่มีวงเล็บปีกกา : ` (...args) => expression` -- ทางขวาเป็นนิพจน์ : ฟังก์ชันจะประเมินค่าและส่งคืนผลลัพธ์ สามารถละวงเล็บได้ถ้ามีอาร์กิวเมนต์เพียงตัวเดียว เช่น ` n => n*2 `
111+ 2. มีวงเล็บปีกกา : ` (...args) => { body }` -- วงเล็บปีกกาช่วยให้เราเขียนหลายคำสั่งภายในฟังก์ชันได้ แต่เราต้องใส่ ` return` อย่างชัดเจนเพื่อส่งอะไรบางอย่างกลับ
0 commit comments