TypeScript - ฟังก์ชั่น
ฟังก์ชันเป็นส่วนประกอบของรหัสที่อ่านได้บำรุงรักษาและใช้ซ้ำได้ ฟังก์ชันคือชุดของคำสั่งเพื่อดำเนินงานเฉพาะ ฟังก์ชั่นจัดระเบียบโปรแกรมเป็นบล็อกตรรกะของโค้ด เมื่อกำหนดแล้วฟังก์ชันอาจถูกเรียกใช้เพื่อเข้าถึงรหัส สิ่งนี้ทำให้โค้ดสามารถใช้ซ้ำได้ ยิ่งไปกว่านั้นฟังก์ชั่นช่วยให้อ่านและบำรุงรักษาโค้ดของโปรแกรมได้ง่าย
การประกาศฟังก์ชันจะบอกคอมไพลเลอร์เกี่ยวกับชื่อของฟังก์ชันประเภทการส่งคืนและพารามิเตอร์ นิยามของฟังก์ชันระบุเนื้อความที่แท้จริงของฟังก์ชัน
ซีเนียร์ No | Funtions & Description |
---|---|
1. | การกำหนดฟังก์ชัน นิยามฟังก์ชันระบุสิ่งที่จะทำและวิธีการทำงาน |
2. | เรียกใช้ฟังก์ชัน ต้องมีการเรียกใช้ฟังก์ชันเพื่อดำเนินการ |
3. | กลับฟังก์ชั่น ฟังก์ชั่นอาจส่งคืนค่าพร้อมกับการควบคุมกลับไปยังผู้เรียก |
4. | ฟังก์ชันพารามิเตอร์ พารามิเตอร์เป็นกลไกในการส่งผ่านค่าไปยังฟังก์ชัน |
พารามิเตอร์เสริม
สามารถใช้พารามิเตอร์เสริมเมื่ออาร์กิวเมนต์ไม่จำเป็นต้องถูกส่งผ่านไปอย่างบังคับสำหรับการเรียกใช้ฟังก์ชัน สามารถทำเครื่องหมายพารามิเตอร์เป็นตัวเลือกได้โดยการต่อท้ายเครื่องหมายคำถามเข้ากับชื่อ ควรตั้งค่าพารามิเตอร์ทางเลือกเป็นอาร์กิวเมนต์สุดท้ายในฟังก์ชัน ไวยากรณ์ในการประกาศฟังก์ชันพร้อมพารามิเตอร์เสริมมีดังต่อไปนี้ -
function function_name (param1[:type], param2[:type], param3[:type])
ตัวอย่าง: พารามิเตอร์เสริม
function disp_details(id:number,name:string,mail_id?:string) {
console.log("ID:", id);
console.log("Name",name);
if(mail_id!=undefined)
console.log("Email Id",mail_id);
}
disp_details(123,"John");
disp_details(111,"mary","[email protected]");
ตัวอย่างข้างต้นประกาศฟังก์ชันที่กำหนดพารามิเตอร์ ที่นี่พารามิเตอร์ที่สามคือ mail_id เป็นพารามิเตอร์ทางเลือก
หากพารามิเตอร์ทางเลือกไม่ได้ถูกส่งผ่านค่าระหว่างการเรียกใช้ฟังก์ชันค่าของพารามิเตอร์จะถูกตั้งค่าเป็นไม่ได้กำหนด
ฟังก์ชันจะพิมพ์ค่า mail_id ก็ต่อเมื่ออาร์กิวเมนต์ถูกส่งผ่านค่า
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
function disp_details(id, name, mail_id) {
console.log("ID:", id);
console.log("Name", name);
if (mail_id != undefined)
console.log("Email Id", mail_id);
}
disp_details(123, "John");
disp_details(111, "mary", "[email protected]");
โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
ID:123
Name John
ID: 111
Name mary
Email Id [email protected]
พารามิเตอร์ที่เหลือ
พารามิเตอร์ Rest จะคล้ายกับอาร์กิวเมนต์ตัวแปรใน Java พารามิเตอร์ส่วนที่เหลือไม่ได้ จำกัด จำนวนค่าที่คุณสามารถส่งผ่านไปยังฟังก์ชันได้ อย่างไรก็ตามค่าที่ส่งผ่านต้องเป็นประเภทเดียวกันทั้งหมด กล่าวอีกนัยหนึ่งพารามิเตอร์ rest ทำหน้าที่เป็นตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์ประเภทเดียวกันหลายตัว
ในการประกาศพารามิเตอร์ที่เหลือชื่อพารามิเตอร์จะขึ้นต้นด้วยจุดสามจุด พารามิเตอร์ nonrest ใด ๆ ควรมาก่อนพารามิเตอร์ที่เหลือ
ตัวอย่าง: Rest Parameters
function addNumbers(...nums:number[]) {
var i;
var sum:number = 0;
for(i = 0;i<nums.length;i++) {
sum = sum + nums[i];
}
console.log("sum of the numbers",sum)
}
addNumbers(1,2,3)
addNumbers(10,10,10,10,10)
addNumbers ฟังก์ชั่น () ประกาศรับพารามิเตอร์ที่เหลือnums ต้องตั้งค่าชนิดข้อมูลของพารามิเตอร์ที่เหลือเป็นอาร์เรย์ ยิ่งไปกว่านั้นฟังก์ชันสามารถมีพารามิเตอร์ rest ได้สูงสุดหนึ่งพารามิเตอร์
ฟังก์ชันนี้ถูกเรียกใช้สองครั้งโดยส่งผ่านค่าสามและหกค่าตามลำดับ
สำหรับลูปวนซ้ำผ่านรายการอาร์กิวเมนต์ส่งผ่านไปยังฟังก์ชันและคำนวณผลรวม
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
function addNumbers() {
var nums = [];
for (var _i = 0; _i < arguments.length; _i++) {
nums[_i - 0] = arguments[_i];
}
var i;
var sum = 0;
for (i = 0; i < nums.length; i++) {
sum = sum + nums[i];
}
console.log("sum of the numbers", sum);
}
addNumbers(1, 2, 3);
addNumbers(10, 10, 10, 10, 10);
ผลลัพธ์ของรหัสด้านบนมีดังนี้ -
sum of numbers 6
sum of numbers 50
พารามิเตอร์เริ่มต้น
พารามิเตอร์ฟังก์ชันสามารถกำหนดค่าตามค่าเริ่มต้นได้ อย่างไรก็ตามพารามิเตอร์ดังกล่าวสามารถส่งผ่านค่าได้อย่างชัดเจน
ไวยากรณ์
function function_name(param1[:type],param2[:type] = default_value) {
}
Note - ไม่สามารถประกาศพารามิเตอร์เป็นทางเลือกและค่าเริ่มต้นในเวลาเดียวกันได้
ตัวอย่าง: พารามิเตอร์เริ่มต้น
function calculate_discount(price:number,rate:number = 0.50) {
var discount = price * rate;
console.log("Discount Amount: ",discount);
}
calculate_discount(1000)
calculate_discount(1000,0.30)
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
function calculate_discount(price, rate) {
if (rate === void 0) { rate = 0.50; }
var discount = price * rate;
console.log("Discount Amount: ", discount);
}
calculate_discount(1000);
calculate_discount(1000, 0.30);
ผลลัพธ์มีดังนี้ -
Discount amount : 500
Discount amount : 300
ตัวอย่างประกาศฟังก์ชันcalculate_discount ฟังก์ชั่นมีสองพารามิเตอร์ - ราคาและอัตรา
ค่าของอัตราพารามิเตอร์ถูกตั้งค่าเป็น0.50โดยค่าเริ่มต้น
โปรแกรมเรียกใช้ฟังก์ชันโดยส่งผ่านไปยังค่าของราคาพารามิเตอร์เท่านั้น ที่นี่ค่าของอัตราคือ0.50 (ค่าเริ่มต้น)
มีการเรียกใช้ฟังก์ชันเดียวกัน แต่มีสองอาร์กิวเมนต์ ค่าเริ่มต้นของอัตราจะถูกเขียนทับและตั้งค่าเป็นค่าที่ส่งผ่านอย่างชัดเจน
ฟังก์ชันนิรนาม
ฟังก์ชันที่ไม่ผูกมัดกับตัวระบุ (ชื่อฟังก์ชัน) เรียกว่าเป็น anonymous functions. ฟังก์ชันเหล่านี้ประกาศแบบไดนามิกที่รันไทม์ ฟังก์ชันที่ไม่ระบุชื่อสามารถรับอินพุตและเอาต์พุตส่งคืนได้เช่นเดียวกับฟังก์ชันมาตรฐาน โดยปกติแล้วฟังก์ชันที่ไม่ระบุชื่อจะไม่สามารถเข้าถึงได้หลังจากการสร้างครั้งแรก
ตัวแปรสามารถกำหนดฟังก์ชันแบบไม่ระบุตัวตนได้ นิพจน์ดังกล่าวเรียกว่านิพจน์ฟังก์ชัน
ไวยากรณ์
var res = function( [arguments] ) { ... }
ตัวอย่าง─ฟังก์ชัน Anonymous อย่างง่าย
var msg = function() {
return "hello world";
}
console.log(msg())
ในการคอมไพล์จะสร้างโค้ดเดียวกันใน JavaScript
มันจะให้ผลลัพธ์ดังต่อไปนี้ -
hello world
ตัวอย่าง─ฟังก์ชันไม่ระบุตัวตนพร้อมพารามิเตอร์
var res = function(a:number,b:number) {
return a*b;
};
console.log(res(12,2))
ฟังก์ชันที่ไม่ระบุชื่อจะส่งคืนผลคูณของค่าที่ส่งผ่านไป
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
var res = function (a, b) {
return a * b;
};
console.log(res(12, 2));
ผลลัพธ์ของรหัสด้านบนมีดังนี้ -
24
Function Expression และ Function Declaration ─ตรงกันหรือไม่?
การแสดงออกของฟังก์ชันและการประกาศฟังก์ชันไม่ตรงกัน ต่างจากนิพจน์ฟังก์ชันการประกาศฟังก์ชันจะถูกผูกไว้กับชื่อฟังก์ชัน
ความแตกต่างพื้นฐานระหว่างทั้งสองคือการประกาศฟังก์ชันจะถูกแยกวิเคราะห์ก่อนการดำเนินการ ในทางกลับกันนิพจน์ฟังก์ชันจะถูกแยกวิเคราะห์เฉพาะเมื่อสคริปต์เอ็นจินพบระหว่างการดำเนินการ
เมื่อตัวแยกวิเคราะห์ JavaScript เห็นฟังก์ชันในโฟลว์โค้ดหลักจะถือว่าการประกาศฟังก์ชัน เมื่อฟังก์ชันเข้ามาเป็นส่วนหนึ่งของคำสั่งฟังก์ชันนี้จะเป็นนิพจน์ฟังก์ชัน
ตัวสร้างฟังก์ชัน
TypeScript ยังสนับสนุนการกำหนดฟังก์ชันด้วยตัวสร้าง JavaScript ในตัวที่เรียกว่า Function ()
ไวยากรณ์
var res = new Function( [arguments] ) { ... }.
ตัวอย่าง
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
console.log(x);
ฟังก์ชันใหม่ () เป็นการเรียกตัวสร้างซึ่งจะสร้างและส่งกลับการอ้างอิงฟังก์ชัน
ในการคอมไพล์จะสร้างโค้ดเดียวกันใน JavaScript
ผลลัพธ์ของโค้ดตัวอย่างข้างต้นมีดังนี้ -
12
ฟังก์ชันการเรียกซ้ำและ TypeScript
การเรียกซ้ำเป็นเทคนิคในการทำซ้ำการดำเนินการโดยเรียกใช้ฟังก์ชันไปยังตัวเองซ้ำ ๆ จนกว่าจะมาถึงผลลัพธ์ การเรียกซ้ำจะใช้ได้ดีที่สุดเมื่อคุณต้องการเรียกใช้ฟังก์ชันเดิมซ้ำ ๆ โดยมีพารามิเตอร์ต่างกันจากภายในลูป
ตัวอย่าง - การเรียกซ้ำ
function factorial(number) {
if (number <= 0) { // termination case
return 1;
} else {
return (number * factorial(number - 1)); // function invokes itself
}
};
console.log(factorial(6)); // outputs 720
ในการคอมไพล์จะสร้างโค้ดเดียวกันใน JavaScript
นี่คือผลลัพธ์ -
720
ตัวอย่าง: ฟังก์ชันเรียกซ้ำแบบไม่ระบุชื่อ
(function () {
var x = "Hello!!";
console.log(x)
})() // the function invokes itself using a pair of parentheses ()
ในการคอมไพล์จะสร้างโค้ดเดียวกันใน JavaScript
ผลลัพธ์มีดังนี้ -
Hello!!
ฟังก์ชั่น Lambda
แลมด้าหมายถึงฟังก์ชันที่ไม่ระบุชื่อในการเขียนโปรแกรม ฟังก์ชันแลมบ์ดาเป็นกลไกที่กระชับเพื่อแสดงฟังก์ชันที่ไม่ระบุตัวตน ฟังก์ชันเหล่านี้เรียกอีกอย่างว่าArrow functions.
ฟังก์ชันแลมด้า - กายวิภาคศาสตร์
ฟังก์ชัน Lambda มี 3 ส่วน -
Parameters - ฟังก์ชันอาจมีพารามิเตอร์ก็ได้
The fat arrow notation/lambda notation (=>) - เรียกอีกอย่างว่าเป็นไปที่ตัวดำเนินการ
Statements - แสดงชุดคำสั่งของฟังก์ชัน
Tip - ตามแบบแผนสนับสนุนให้ใช้พารามิเตอร์อักษรตัวเดียวเพื่อการประกาศฟังก์ชันที่กะทัดรัดและแม่นยำ
แลมบ์ดานิพจน์
เป็นนิพจน์ฟังก์ชันที่ไม่ระบุชื่อที่ชี้ไปที่โค้ดบรรทัดเดียว ไวยากรณ์มีดังนี้ -
( [param1, parma2,…param n] )=>statement;
ตัวอย่าง: Lambda Expression
var foo = (x:number)=>10 + x
console.log(foo(100)) //outputs 110
โปรแกรมประกาศฟังก์ชันแลมบ์ดานิพจน์ ฟังก์ชันจะส่งคืนผลรวมของ 10 และอาร์กิวเมนต์ส่งผ่าน
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้
//Generated by typescript 1.8.10
var foo = function (x) { return 10 + x; };
console.log(foo(100)); //outputs 110
นี่คือผลลัพธ์ของรหัสด้านบน -
110
แลมด้าแถลงการณ์
คำสั่ง Lambda เป็นการประกาศฟังก์ชันแบบไม่ระบุตัวตนที่ชี้ไปที่บล็อกของโค้ด ไวยากรณ์นี้ใช้เมื่อเนื้อหาของฟังก์ชันครอบคลุมหลายบรรทัด ไวยากรณ์มีดังนี้ -
( [param1, parma2,…param n] )=> {
//code block
}
ตัวอย่าง: คำสั่ง Lambda
var foo = (x:number)=> {
x = 10 + x
console.log(x)
}
foo(100)
การอ้างอิงของฟังก์ชันจะถูกส่งกลับและเก็บไว้ในตัวแปร foo.
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
var foo = function (x) {
x = 10 + x;
console.log(x);
};
foo(100);
ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้ -
110
รูปแบบวากยสัมพันธ์
การอนุมานประเภทพารามิเตอร์
ไม่จำเป็นต้องระบุชนิดข้อมูลของพารามิเตอร์ ในกรณีเช่นนี้ชนิดข้อมูลของพารามิเตอร์คืออะไรก็ได้ ให้เราดูข้อมูลโค้ดต่อไปนี้ -
var func = (x)=> {
if(typeof x=="number") {
console.log(x+" is numeric")
} else if(typeof x=="string") {
console.log(x+" is a string")
}
}
func(12)
func("Tom")
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
var func = function (x) {
if (typeof x == "number") {
console.log(x + " is numeric");
} else if (typeof x == "string") {
console.log(x + " is a string");
}
};
func(12);
func("Tom");
ผลลัพธ์มีดังนี้ -
12 is numeric
Tom is a string
วงเล็บเสริมสำหรับพารามิเตอร์เดียว
var display = x=> {
console.log("The function got "+x)
}
display(12)
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
var display = function (x) {
console.log("The function got " + x);
};
display(12);
ผลลัพธ์มีดังนี้ -
The function got 12
วงเล็บปีกกาเสริมสำหรับคำสั่งเดียววงเล็บว่างสำหรับไม่มีพารามิเตอร์
ตัวอย่างต่อไปนี้แสดงรูปแบบวากยสัมพันธ์ทั้งสองนี้
var disp =()=> {
console.log("Function invoked");
}
disp();
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
var disp = function () {
console.log("Function invoked");
};
disp();
ผลลัพธ์มีดังนี้ -
Function invoked
ฟังก์ชันโอเวอร์โหลด
ฟังก์ชันมีความสามารถในการทำงานที่แตกต่างกันไปตามข้อมูลที่ป้อนเข้ามา กล่าวอีกนัยหนึ่งโปรแกรมสามารถมีหลายวิธีที่มีชื่อเดียวกันโดยมีการใช้งานที่แตกต่างกัน กลไกนี้เรียกว่า Function Overloading TypeScript ให้การสนับสนุนสำหรับการทำงานมากเกินไป
ในการโอเวอร์โหลดฟังก์ชันใน TypeScript คุณต้องทำตามขั้นตอนที่ระบุด้านล่าง -
Step 1- ประกาศหลายฟังก์ชันด้วยชื่อเดียวกัน แต่ลายเซ็นฟังก์ชันต่างกัน ลายเซ็นของฟังก์ชันมีดังต่อไปนี้
The data type of the parameter
function disp(string):void;
function disp(number):void;
The number of parameters
function disp(n1:number):void;
function disp(x:number,y:number):void;
The sequence of parameters
function disp(n1:number,s1:string):void;
function disp(s:string,n:number):void;
Note - ลายเซ็นของฟังก์ชันไม่รวมประเภทการส่งคืนของฟังก์ชัน
Step 2- การประกาศจะต้องตามด้วยนิยามฟังก์ชัน ควรตั้งค่าประเภทพารามิเตอร์เป็นanyหากประเภทพารามิเตอร์แตกต่างกันระหว่างการโอเวอร์โหลด นอกจากนี้สำหรับcase b อธิบายไว้ข้างต้นคุณอาจพิจารณาทำเครื่องหมายพารามิเตอร์อย่างน้อยหนึ่งพารามิเตอร์เป็นทางเลือกในระหว่างการกำหนดฟังก์ชัน
Step 3 - สุดท้ายคุณต้องเรียกใช้ฟังก์ชันเพื่อให้ใช้งานได้
ตัวอย่าง
ตอนนี้ให้เราดูโค้ดตัวอย่างต่อไปนี้ -
function disp(s1:string):void;
function disp(n1:number,s1:string):void;
function disp(x:any,y?:any):void {
console.log(x);
console.log(y);
}
disp("abc")
disp(1,"xyz");
สองบรรทัดแรกแสดงถึงการประกาศฟังก์ชันโอเวอร์โหลด ฟังก์ชั่นมีสองโอเวอร์โหลด -
ฟังก์ชันที่ยอมรับพารามิเตอร์สตริงเดียว
ฟังก์ชันที่ยอมรับสองค่าของ type number และ string ตามลำดับ
บรรทัดที่สามกำหนดฟังก์ชัน ชนิดข้อมูลของพารามิเตอร์ถูกตั้งค่าเป็นany. ยิ่งไปกว่านั้นพารามิเตอร์ที่สองเป็นทางเลือกที่นี่
ฟังก์ชันโอเวอร์โหลดถูกเรียกใช้โดยสองคำสั่งสุดท้าย
ในการคอมไพล์จะสร้างโค้ด JavaScript ต่อไปนี้ -
//Generated by typescript 1.8.10
function disp(x, y) {
console.log(x);
console.log(y);
}
disp("abc");
disp(1, "xyz");
โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
abc
1
xyz