Skip to content

Commit 80ad60c

Browse files
authored
Merge pull request #151 from javascript-tutorial/arrow-function
Arrow functions, the basics
2 parents c6cf546 + c807e8e commit 80ad60c

File tree

1 file changed

+30
-34
lines changed
  • 1-js/02-first-steps/17-arrow-functions-basics

1 file changed

+30
-34
lines changed
Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
# Arrow functions ขั้นพื้นฐาน
1+
# ฟังก์ชันลูกศร (Arrow functions) ข้อมูลพื้นฐาน
22

3-
มีการสร้างฟังก์ชันอีกรูปแบบหนึ่งที่ประโยคเรียบง่ายและกระชับกว่านิพจน์ฟังก์ชัน
3+
มีไวยากรณ์ที่เรียบง่ายและกระชับอีกแบบหนึ่งในการสร้างฟังก์ชัน ซึ่งมักจะดีกว่า Function Expression
44

5-
มันเรียกว่า "Arrow function" เพราะมีรูปประโยคดังนี้:
5+
เรียกว่า "ฟังก์ชันลูกศร" เพราะมันดูแบบนี้:
66

77
```js
88
let func = (arg1, arg2, ..., argN) => expression;
99
```
1010

11-
จากตัวอย่างด้านบน คือสร้างฟังก์ชัน `func` ที่ยอมรับอาร์กิวเมนต์ `arg1..argN` จากนั้นจึงประเมิน expression ที่อยู่ทางด้านขวาแล้วส่งคืนผลลัพธ์
11+
นี่จะสร้างฟังก์ชัน `func` ที่รับอาร์กิวเมนต์ `arg1..argN` จากนั้นจะประเมินค่า `expression` ทางด้านขวาโดยใช้อาร์กิวเมนต์เหล่านั้น แล้วส่งคืนผลลัพธ์
1212

13-
กล่าวอีกนัยหนึ่งก็คือ เวอร์ชันที่สั้นกว่าของ
13+
อีกนัยหนึ่ง มันคือเวอร์ชันที่สั้นกว่าของ:
1414

1515
```js
1616
let func = function(arg1, arg2, ..., argN) {
@@ -23,7 +23,7 @@ let func = function(arg1, arg2, ..., argN) {
2323
```js run
2424
let sum = (a, b) => a + b;
2525

26-
/* Arrow function นี้เป็นรูปที่เขียนสั้นกว่าของ:
26+
/* ฟังก์ชันลูกศรนี้เป็นรูปแบบสั้นกว่าของ:
2727
2828
let sum = function(a, b) {
2929
return a + b;
@@ -33,83 +33,79 @@ let sum = function(a, b) {
3333
alert( 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
6464
let age = prompt("What is your age?", 18);
6565
6666
let welcome = (age < 18) ?
67-
() => alert('Hello') :
67+
() => alert('Hello!') :
6868
() => alert("Greetings!");
6969
7070
welcome();
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
9793
alert( 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

Comments
 (0)