ในบทความนี้ เราจะมาสำรวจว่าฟังก์ชันบริสุทธิ์/ไม่บริสุทธิ์คืออะไร และความแตกต่างใน JavaScript มาดำดิ่งกัน..

ฟังก์ชั่นคืออะไร?

ในมหาสมุทรแห่ง JavaScript ฟังก์ชันต่างๆ เป็นส่วนสำคัญในการสร้างแอปที่ซับซ้อนและโต้ตอบได้

การใช้ฟังก์ชันที่พบบ่อยที่สุดประการหนึ่งคือการแมป โดยที่ฟังก์ชันจะรับค่าอินพุตและสร้างค่าเอาต์พุตที่สอดคล้องกัน สิ่งนี้ทำให้เกิดการเปลี่ยนแปลงและการจัดการข้อมูล ซึ่งเป็นสิ่งสำคัญในการสร้างประสบการณ์ผู้ใช้แบบไดนามิก

ฟังก์ชั่นบริสุทธิ์คืออะไร?

ฟังก์ชันแท้คือฟังก์ชันที่ค่าส่งคืนถูกกำหนดโดยอาร์กิวเมนต์เท่านั้นโดยไม่มีผลข้างเคียง สมมติว่า หากคุณเรียกใช้ฟังก์ชันที่มีอาร์กิวเมนต์เดียวกัน n จำนวนครั้งและ n จำนวนตำแหน่งในแอปพลิเคชัน ฟังก์ชันจะส่งกลับค่าเดียวกันเสมอ ฟังก์ชัน Pure จะไม่แก้ไขสถานะภายนอกใดๆ เช่น ตัวแปรหรืออ็อบเจ็กต์ที่อยู่ภายนอกฟังก์ชัน พวกเขาใช้เฉพาะอาร์กิวเมนต์อินพุตเพื่อทำการคำนวณและส่งกลับผลลัพธ์

เพื่อแสดงให้คุณเห็นว่าฉันหมายถึงอะไร ..

ฟังก์ชันด้านล่างใช้ตัวเลขสองตัว a และ b เป็นอาร์กิวเมนต์อินพุตและส่งกลับผลรวม ฟังก์ชันนี้เป็นฟังก์ชันล้วนๆ เนื่องจากจะสร้างเอาต์พุตเดียวกันสำหรับอินพุตเดียวกันเสมอ และไม่มีผลข้างเคียงใดๆ

function add(a, b) {
  return a + b;
}

ฟังก์ชั่นไม่บริสุทธิ์คืออะไร?

ฟังก์ชันที่ไม่บริสุทธิ์เป็นฟังก์ชันประเภทหนึ่งซึ่งมีอินพุตเดียวกัน และอาจให้เอาต์พุตต่างกันในเวลาที่ต่างกัน เนื่องจากฟังก์ชันที่ไม่บริสุทธิ์อาจขึ้นอยู่กับปัจจัยภายนอก เช่น การเปลี่ยนแปลงของตัวแปรร่วมหรือฟังก์ชันอื่นๆ ที่ส่งผลต่อพฤติกรรมและเอาต์พุตของฟังก์ชันเหล่านั้น

ฟังก์ชันด้านล่างจะปรับเปลี่ยนตัวนับตัวแปรภายนอกโดยเพิ่มค่าของมันทีละตัวทุกครั้งที่มีการเรียก ซึ่งหมายความว่ามีผลข้างเคียงและไม่ใช่ฟังก์ชันที่บริสุทธิ์

let counter = 0;

function increment() {
  counter++;
  return counter;
}

เหตุใดฟังก์ชันเพียวจึงมีประโยชน์

ฟังก์ชัน Pure มีข้อดีมากกว่าฟังก์ชันที่ไม่บริสุทธิ์หลายประการ:

1) ความสามารถในการคาดการณ์
เนื่องจากฟังก์ชันล้วนๆ จะสร้างเอาต์พุตเดียวกันเสมอสำหรับอินพุตที่กำหนด จึงสามารถคาดเดาได้และง่ายต่อการให้เหตุผล ง่ายต่อการทดสอบและแก้ไขข้อบกพร่องและลดโอกาสที่จะเกิดพฤติกรรมที่ไม่คาดคิดในโค้ดของคุณ

2) การนำกลับมาใช้ใหม่ได้
ฟังก์ชัน Pure เป็นแบบโมดูลาร์และมีอยู่ในตัวเอง ซึ่งหมายความว่าสามารถนำกลับมาใช้ใหม่ในส่วนต่างๆ ของโค้ดเบสของคุณได้ โดยไม่กระทบต่อส่วนอื่นๆ วิธีนี้จะช่วยประหยัดเวลาและลดจำนวนโค้ดที่คุณต้องเขียน

3) การทำงานแบบขนาน
เนื่องจากฟังก์ชันล้วนๆ ไม่ได้ปรับเปลี่ยนสถานะภายนอก จึงสามารถดำเนินการพร้อมกันได้โดยไม่ต้องกังวลกับสภาพการแข่งขันหรือปัญหาการซิงโครไนซ์อื่นๆ สิ่งนี้สามารถนำไปสู่โค้ดที่เร็วขึ้นและมีประสิทธิภาพยิ่งขึ้น

จะสร้างฟังก์ชั่นล้วนๆใน JavaScript ได้อย่างไร?

1) ใช้เฉพาะอาร์กิวเมนต์อินพุตเท่านั้น
ฟังก์ชัน Pure ควรใช้เฉพาะอาร์กิวเมนต์อินพุตในการคำนวณและส่งกลับผลลัพธ์ ไม่ควรแก้ไขสถานะภายนอกใดๆ หรืออาศัยตัวแปรภายนอก

2) หลีกเลี่ยงผลข้างเคียง
ฟังก์ชั่นบริสุทธิ์ไม่ควรมีผลข้างเคียงใดๆ เช่น การปรับเปลี่ยนตัวแปรภายนอกหรือวัตถุ ควรส่งคืนค่าตามอาร์กิวเมนต์อินพุตเท่านั้น

3) หลีกเลี่ยงสถานะโกลบอล
ฟังก์ชันเฉพาะควรหลีกเลี่ยงการใช้สถานะโกลบอล เช่น ตัวแปรหรืออ็อบเจ็กต์โกลบอล ซึ่งจะทำให้โค้ดของคุณคาดเดาได้น้อยลงและแก้ไขจุดบกพร่องได้ยากขึ้น

4) ส่งคืนค่า
ฟังก์ชัน Pure ควรส่งคืนค่าตามอาร์กิวเมนต์อินพุตเสมอ พวกเขาไม่ควรพึ่งพาตัวแปรภายนอกหรือวัตถุเพื่อสร้างผลลัพธ์

ฟังก์ชั่นบริสุทธิ์เทียบกับไม่บริสุทธิ์

ฟังก์ชั่นบริสุทธิ์ Inbuilt ใน JavaScript:

Math.abs(): ส่งกลับค่าสัมบูรณ์ของตัวเลข

Math.ceil(): ส่งกลับจำนวนเต็มที่น้อยที่สุดที่มากกว่าหรือเท่ากับตัวเลขที่กำหนด

Math.floor(): ส่งกลับจำนวนเต็มที่ใหญ่ที่สุดที่น้อยกว่าหรือเท่ากับตัวเลขที่กำหนด

Math.max(): ส่งกลับค่าสูงสุดจากชุดตัวเลข

Math.min(): ส่งคืนค่าต่ำสุดจากชุดตัวเลข

Math.round(): ส่งกลับจำนวนเต็มที่ใกล้เคียงที่สุดกับตัวเลขที่กำหนด

Math.sqrt(): ส่งคืนค่ารากที่สองของตัวเลขที่กำหนด

parseInt(): แปลงสตริงให้เป็นจำนวนเต็ม

parseFloat(): แปลงสตริงให้เป็นตัวเลขทศนิยม

JSON.parse(): แปลงสตริง JSON เป็นวัตถุ JavaScript

Array.prototype.concat(): ส่งกลับอาร์เรย์ใหม่ที่มีองค์ประกอบของอาร์เรย์เดิมบวกกับองค์ประกอบเพิ่มเติมใดๆ ที่ถูกส่งผ่านเป็นอาร์กิวเมนต์

Array.prototype.slice(): ส่งกลับอาร์เรย์ใหม่ที่มีส่วนหนึ่งของอาร์เรย์เดิม ที่ระบุโดยดัชนีเริ่มต้นและสิ้นสุด

Array.prototype.map(): ส่งกลับอาร์เรย์ใหม่ที่เป็นผลลัพธ์ของการเรียกใช้ฟังก์ชันที่มีให้ในแต่ละองค์ประกอบของอาร์เรย์เดิม

Array.prototype.filter(): ส่งคืนอาร์เรย์ใหม่ที่มีเฉพาะองค์ประกอบของอาร์เรย์ดั้งเดิมที่ตรงตามฟังก์ชันการทดสอบที่ให้มา

Array.prototype.reduce(): ส่งคืนค่าเดียวที่เป็นผลลัพธ์ของการใช้ฟังก์ชันที่มีให้กับแต่ละองค์ประกอบของอาร์เรย์

String.prototype.toUpperCase(): ส่งกลับสตริงใหม่ที่มีสตริงเดิมเป็นตัวพิมพ์ใหญ่ทั้งหมด

String.prototype.toLowerCase(): ส่งกลับสตริงใหม่ที่มีสตริงต้นฉบับเป็นตัวอักษรตัวพิมพ์เล็กทั้งหมด

ฟังก์ชั่นที่ไม่บริสุทธิ์ในตัวใน JavaScript:

Math.random(): ส่งกลับตัวเลขสุ่มระหว่าง 0 ถึง 1 ฟังก์ชันนี้อาศัยสถานะภายนอกซึ่งเป็นสถานะปัจจุบันของเครื่องกำเนิดตัวเลขสุ่มและเอาต์พุตจะเปลี่ยนแปลงทุกครั้งที่มีการเรียก

Date.now(): ส่งกลับการประทับเวลาปัจจุบันซึ่งเป็นจำนวนมิลลิวินาทีที่ผ่านไปนับตั้งแต่ January 1, 1970 ฟังก์ชันนี้อาศัยสถานะภายนอกซึ่งเป็นเวลาปัจจุบันและเอาต์พุตจะเปลี่ยนทุกครั้งที่มีการเรียกใช้

console.log(): เขียนข้อความไปยังคอนโซล ไม่ส่งคืนค่า แต่มีผลข้างเคียงจากการบันทึกข้อมูลไปยังคอนโซล

setTimeout(): เรียกใช้ฟังก์ชันหลังจากการหน่วงเวลาที่ระบุซึ่งระบุเป็นมิลลิวินาที ฟังก์ชันนี้มีผลข้างเคียงจากการตั้งเวลาฟังก์ชันที่จะดำเนินการในอนาคต

setInterval(): เรียกใช้ฟังก์ชันตามช่วงเวลาที่ระบุซึ่งระบุเป็นมิลลิวินาที ฟังก์ชันนี้มีผลข้างเคียงจากการตั้งเวลาฟังก์ชันให้ดำเนินการซ้ำๆ ในช่วงเวลาที่กำหนด

document.write(): เขียนเนื้อหา HTML ลงในเอกสาร ไม่ส่งคืนค่า แต่มีผลข้างเคียงจากการแก้ไขเอกสาร

Math.floor(Math.random() * (max — min + 1) + min): ส่งกลับจำนวนเต็มแบบสุ่มระหว่างช่วงที่กำหนด ฟังก์ชันนี้อาศัยสถานะภายนอกซึ่งเป็นสถานะปัจจุบันของเครื่องกำเนิดตัวเลขสุ่มและเอาต์พุตจะเปลี่ยนทุกครั้งที่มีการเรียก

Math.pow(): ส่งกลับผลลัพธ์ของการเพิ่มตัวเลขเป็นกำลังที่กำหนด แม้ว่าฟังก์ชันนี้จะบริสุทธิ์ทางคณิตศาสตร์ แต่ก็อาจส่งผลให้เกิดข้อผิดพลาดในการปัดเศษจุดทศนิยมซึ่งอาจทำให้เอาต์พุตไม่บริสุทธิ์ได้

❤ แรงจูงใจ:

🍀สนับสนุน

โปรดพิจารณาติดตามและสนับสนุนเราโดยสมัครรับข้อมูลช่องของเรา การสนับสนุนของคุณได้รับการชื่นชมอย่างมากและจะช่วยให้เราสร้างเนื้อหาเพื่อให้คุณเพลิดเพลินต่อไป ขอขอบคุณล่วงหน้าสำหรับการสนับสนุนของคุณ!

YouTube
Discord
GitHub