ข้อกำหนดฉบับร่าง ECMAScript 6 สร้างความพึงพอใจให้กับนักพัฒนาซอฟต์แวร์ JavaScript รุ่นใหม่ได้เป็นจำนวนมาก เราได้พูดถึงคลาสคอลเล็กชันใหม่บางส่วนและลูปการทำซ้ำ for..of
รายการในโพสต์ก่อนหน้า ในโพสต์นี้ เราจะกล่าวถึงสิ่งที่มีความเกี่ยวข้องกับลูป for..of
: ฟังก์ชันเครื่องมือสร้าง
เรามีโฮสต์ของเนื้อหาที่ยอดเยี่ยมซึ่งครอบคลุมเหตุผลและวิธีใช้เครื่องมือสร้างโปรแกรมอยู่แล้ว สรุปแล้ว เครื่องมือสร้างคือฟังก์ชันพิเศษที่สร้าง Iterator และ Iterator เป็นออบเจ็กต์ที่มีเมธอด next()
ซึ่งอาจเรียกใช้เพื่อรับค่า ภายในฟังก์ชันของโปรแกรมสร้าง คีย์เวิร์ด yield
ระบุค่าสำหรับ next()
การใช้ yield
ระงับการดำเนินการของฟังก์ชันของโปรแกรมสร้าง รักษาสถานะจนกระทั่งมีการเรียก next()
อีกครั้ง ซึ่งในจุดนี้โค้ดจะเริ่มต้นสำรองและดำเนินต่อไป จนกว่าฟังก์ชัน yield
จะอีกค่าหนึ่ง (หรือจนกว่าฟังก์ชันของโปรแกรมสร้างจะหยุด) กรณีการใช้งานตามรูปแบบบัญญัติสำหรับฟังก์ชันโปรแกรมสร้างนั้นมีอยู่หลายกรณี เช่น การใช้ฟังก์ชันดังกล่าวซ้ำๆ เพื่อทำซ้ำตัวเลขในลำดับ Fibonacci
หลังจากที่เริ่มต้นมาอย่างคร่าวๆ แล้ว เรามาเจาะลึกตัวอย่าง JavaScript ที่ครอบคลุม Gotcha บางอย่าง หรือ "นิดหน่อย" จากการทำงานกับเครื่องมือสร้างกัน มีความคิดเห็นจำนวนมากตลอดทั้งเรื่อง และคุณสามารถลองอ่านโค้ดเวอร์ชันที่ใช้จริงก่อนที่จะอ่านจบได้
แล้วสรุปประเด็นสำคัญจากโค้ดนี้คืออะไร
ก่อนอื่น การสร้างตัวสร้างจะส่งผลให้เกิดตัววนซ้ำที่ไม่ซ้ำกันโดยมีสถานะเฉพาะ และคุณสามารถส่งผ่านในพารามิเตอร์ไปยังตัวสร้างที่ควบคุมลักษณะการทำงานได้
วิธีที่ 2 คุณสามารถส่งพารามิเตอร์เมื่อเรียกใช้เมธอด next()
ของอิเทอเรเตอร์ และค่านั้นจะได้รับการกำหนดให้กับสิ่งที่อยู่ทางด้านซ้ายของคำสั่ง yield
จากการเรียกใช้ตัววนซ้ำก่อนหน้า นี่เป็นวิธีที่ยอดเยี่ยมในการเปลี่ยนผลลัพธ์ของตัวทำซ้ำ ซึ่งในส่วนนี้เราใช้เพื่อควบคุมว่าจะให้คำที่ใช้เป็นตัวพิมพ์ใหญ่หรือไม่ หากคุณต้องการให้ส่งผลต่อค่าแรกสุดที่ได้รับ ให้ทำผ่านพารามิเตอร์ไปยังตัวสร้างของโปรแกรมสร้าง
สุดท้าย เครื่องมือสร้างสามารถสร้างตัวซ้ำได้ทั้งแบบกำหนดได้และแบบไม่รู้จบ หากทำงานกับตัววนซ้ำแบบไม่รู้จบ ให้ตรวจสอบว่าเงื่อนไขปลายทางบางประเภทเป็นไปตามค่า yield
ed เนื่องจากการเขียนวนซ้ำแบบไม่รู้จบโดยไม่ตั้งใจได้ง่ายมาก โดยเฉพาะเมื่อใช้ for..of
สำหรับการทำซ้ำ หากคุณทำงานกับตัววนซ้ำที่จำกัดผ่านการเรียกไปยัง next()
พร็อพเพอร์ตี้ .done
ของออบเจ็กต์ที่ส่งกลับมาจะส่งสัญญาณไม่ว่าการทำซ้ำจะสมบูรณ์หรือไม่
เราหวังว่าตัวอย่างนี้ ตลอดจนแหล่งข้อมูลอื่นๆ ที่มีอยู่บนเว็บจะทำให้เกิดความตื่นเต้น และช่วยให้คุณได้คิดถึงวิธีการใช้โปรแกรมสร้างในโค้ดของคุณเอง Firefox เวอร์ชันตั้งแต่ 31 เป็นต้นไป และ Chrome เริ่มต้นด้วยโปรแกรมสร้างการสนับสนุนในตัว 39 โปรแกรม โปรเจ็กต์ Regenerator สนับสนุนเครื่องมือสร้างสำหรับเบราว์เซอร์อื่นๆ และการใช้ Traceur ก็เป็นอีกตัวเลือกหนึ่งเช่นกัน
ขอขอบคุณ Erik Arvidsson ที่ช่วยในการอ่านบทความนี้