เครื่องกำเนิดไฟฟ้า - เศษเล็กๆ

เจฟฟ์ พอสนิก
เจฟฟ์ พอสนิก

ข้อกำหนดฉบับร่าง ECMAScript 6 สร้างความพึงพอใจให้กับนักพัฒนาซอฟต์แวร์ JavaScript รุ่นใหม่ได้เป็นจำนวนมาก เราได้พูดถึงคลาสคอลเล็กชันใหม่บางส่วนและลูปการทำซ้ำ for..of รายการในโพสต์ก่อนหน้า ในโพสต์นี้ เราจะกล่าวถึงสิ่งที่มีความเกี่ยวข้องกับลูป for..of: ฟังก์ชันเครื่องมือสร้าง

เรามีโฮสต์ของเนื้อหาที่ยอดเยี่ยมซึ่งครอบคลุมเหตุผลและวิธีใช้เครื่องมือสร้างโปรแกรมอยู่แล้ว สรุปแล้ว เครื่องมือสร้างคือฟังก์ชันพิเศษที่สร้าง Iterator และ Iterator เป็นออบเจ็กต์ที่มีเมธอด next() ซึ่งอาจเรียกใช้เพื่อรับค่า ภายในฟังก์ชันของโปรแกรมสร้าง คีย์เวิร์ด yield ระบุค่าสำหรับ next() การใช้ yield ระงับการดำเนินการของฟังก์ชันของโปรแกรมสร้าง รักษาสถานะจนกระทั่งมีการเรียก next() อีกครั้ง ซึ่งในจุดนี้โค้ดจะเริ่มต้นสำรองและดำเนินต่อไป จนกว่าฟังก์ชัน yield จะอีกค่าหนึ่ง (หรือจนกว่าฟังก์ชันของโปรแกรมสร้างจะหยุด) กรณีการใช้งานตามรูปแบบบัญญัติสำหรับฟังก์ชันโปรแกรมสร้างนั้นมีอยู่หลายกรณี เช่น การใช้ฟังก์ชันดังกล่าวซ้ำๆ เพื่อทำซ้ำตัวเลขในลำดับ Fibonacci

หลังจากที่เริ่มต้นมาอย่างคร่าวๆ แล้ว เรามาเจาะลึกตัวอย่าง JavaScript ที่ครอบคลุม Gotcha บางอย่าง หรือ "นิดหน่อย" จากการทำงานกับเครื่องมือสร้างกัน มีความคิดเห็นจำนวนมากตลอดทั้งเรื่อง และคุณสามารถลองอ่านโค้ดเวอร์ชันที่ใช้จริงก่อนที่จะอ่านจบได้

แล้วสรุปประเด็นสำคัญจากโค้ดนี้คืออะไร

ก่อนอื่น การสร้างตัวสร้างจะส่งผลให้เกิดตัววนซ้ำที่ไม่ซ้ำกันโดยมีสถานะเฉพาะ และคุณสามารถส่งผ่านในพารามิเตอร์ไปยังตัวสร้างที่ควบคุมลักษณะการทำงานได้

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

สุดท้าย เครื่องมือสร้างสามารถสร้างตัวซ้ำได้ทั้งแบบกำหนดได้และแบบไม่รู้จบ หากทำงานกับตัววนซ้ำแบบไม่รู้จบ ให้ตรวจสอบว่าเงื่อนไขปลายทางบางประเภทเป็นไปตามค่า yielded เนื่องจากการเขียนวนซ้ำแบบไม่รู้จบโดยไม่ตั้งใจได้ง่ายมาก โดยเฉพาะเมื่อใช้ for..of สำหรับการทำซ้ำ หากคุณทำงานกับตัววนซ้ำที่จำกัดผ่านการเรียกไปยัง next() พร็อพเพอร์ตี้ .done ของออบเจ็กต์ที่ส่งกลับมาจะส่งสัญญาณไม่ว่าการทำซ้ำจะสมบูรณ์หรือไม่

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

ขอขอบคุณ Erik Arvidsson ที่ช่วยในการอ่านบทความนี้