‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะเรียนรู้วิธีที่เราสามารถลบหมุดการดำเนินการออกจากฟังก์ชันของเราเอง
‫และอย่างไรและเมื่อใดที่ควรทำเช่นนี้
‫มาดำดิ่งกัน
‫ดังนั้นจึงเป็นเรื่องแปลกเล็กน้อยที่ฟังก์ชันกระสุนของเรามีพินการดำเนินการเมื่อก่อนหน้านี้เราไม่ต้องการสิ่งนั้นและนั่นทำให้โค้ดของเราแย่ลงเล็กน้อย
‫แล้วนั่นคืออะไร?
‫เหตุใดจึงเกิดขึ้นและเหตุใดโหนดฟังก์ชันบางโหนดจึงต้องการพินการดำเนินการและโหนดอื่นไม่ต้องการ
‫มันขึ้นอยู่กับสิ่งที่เรียกว่าผลข้างเคียง
‫แล้วผลข้างเคียงคืออะไร?
‫โดยพื้นฐานแล้ว ผลข้างเคียงคือเมื่อฟังก์ชันมีผลที่สังเกตได้หลังจากที่เรียกใช้แล้ว
‫นี่ฉันหมายความว่ายังไงเนี่ย?
‫มาดูตัวอย่างฟังก์ชันที่มีผลข้างเคียงกันบ้าง เพื่อให้คุณเข้าใจงานพิมพ์
‫การพิมพ์ สตริง
‫หลังจากที่คุณได้เรียกใช้สตริงการพิมพ์
‫ค่อนข้างชัดเจนว่ามีบางอย่างเกิดขึ้นเพราะตอนนี้มีสตริงบนหน้าจอของคุณ
‫คุณจะเห็นว่ามีสตริงเพิ่มแรงกระตุ้นที่เห็นได้ชัดว่ามีผลที่สังเกตได้ เพราะจู่ๆ
‫สิ่งที่คุณเพิ่มแรงกระตุ้นก็บินออกไปในระยะไกล
‫ชุดกระสุนมีผลที่สังเกตได้เพราะหลังจากที่คุณตั้งค่ากระสุนแล้ว ค่าในตัวแปรนั้นเปลี่ยนไป
‫ณ จุดนี้ คุณอาจสงสัยว่า ทุกฟังก์ชันมีผลที่สังเกตได้
‫มิฉะนั้นประเด็นของมันคืออะไร?
‫ก็ไม่เชิง
‫มีสิ่งต่าง ๆ เช่นหน้าที่บริสุทธิ์
‫ฟังก์ชั่นบริสุทธิ์คืออะไร?
‫โดยพื้นฐานแล้วมันเป็นฟังก์ชันที่ไม่มีผลข้างเคียง
‫อย่างไรก็ตามมันมีค่าส่งคืน
‫จึงมีค่าออกมาจากฟังก์ชันนั้น
‫และนั่นคือจุดประสงค์ทั้งหมดของฟังก์ชันคือการคำนวณและให้ค่าเหล่านั้นแก่เรา
‫ลองมาดูตัวอย่างกันอีกครั้งเพราะจะทำให้ชัดเจนยิ่งขึ้น
‫รับกระสุน.
‫นั่นคือหน้าที่บริสุทธิ์
‫มันไม่มีผลข้างเคียงเพราะคุณสามารถรับกระสุนได้มากเท่าที่คุณต้องการ
‫และถ้าคุณไม่ทำอะไรบางอย่างด้วยคุณค่าที่คุณได้รับ โปรแกรมของคุณ เกมของคุณจะไม่แตกต่างกัน
‫คุณสามารถเก็บกระสุนไว้ได้ตลอดเวลา ตลอดทั้งเกม และไม่มีอะไรที่จะสังเกตเห็นได้แตกต่างไปจากเกมของคุณ
‫รับเวกเตอร์ไปข้างหน้าที่ใช้งานอยู่
‫นั่นเป็นอีกที่หนึ่งที่คุณจะได้รับมันหลายครั้งเท่าที่คุณต้องการ
‫มันจะไม่เปลี่ยนแปลงอะไรจนกว่าคุณจะทำบางสิ่งกับค่าที่ส่งคืนและฟังก์ชันทางคณิตศาสตร์ทั้งหมดเหล่านี้
‫เช่น คูณ ลบ มากกว่า
‫โหนดทั้งหมดเหล่านี้ไม่มีผลกับโปรเจ็กต์ของคุณ จนกว่าจะมีการใช้ผลลัพธ์เพื่อจุดประสงค์ที่มากขึ้น
‫ดังนั้นสิ่งเหล่านี้จึงเรียกว่าฟังก์ชันบริสุทธิ์ และคุณอาจเห็นได้ว่าโหนดเหล่านี้เป็นโหนดที่ไม่มีพินการดำเนินการใดๆ
‫เนื่องจากไม่ต้องการ
‫ไม่สำคัญว่าเมื่อไหร่ที่ฉันจะเรียกใช้กระสุนหรือว่าฉันจะเรียกใช้มัน 50 ครั้งหรือครั้งเดียว มันจะไม่สำคัญเพราะมันไม่มีผลข้างเคียงที่สังเกตได้
‫แล้วเราจะระบุให้พิมพ์เขียวว่าฟังก์ชันบริสุทธิ์ได้อย่างไร?
‫มาดูฟังก์ชันการทดสอบของฉันกันที่นี่
‫ฉันจะเลือกมันในกราฟเหตุการณ์หรือในบานหน้าต่างพิมพ์เขียวของฉัน
‫และคุณจะเห็นว่าในบานหน้าต่างรายละเอียดมีช่องทำเครื่องหมายที่ระบุว่าบริสุทธิ์
‫ดังนั้น หากคุณเลือกช่องทำเครื่องหมายนั้น ให้สังเกตว่าหมุดการดำเนินการหายไป
‫และทั้งหมดที่เรามีตอนนี้คืออินพุตและเอาต์พุตของฟังก์ชันนี้
‫ตอนนี้ฟังก์ชันนี้จะเริ่มทำงานเมื่อใดก็ตามที่เราต้องการเอาต์พุต
‫ดังนั้นหากฉันเสียบเอาต์พุตนี้เข้ากับสตริงการพิมพ์ มันจะเรียกใช้ฟังก์ชันนี้ก่อนสตริงการพิมพ์
‫เพื่อให้มีผลในการดำเนินการสตริงการพิมพ์ทันเวลา
‫เราสามารถทำเช่นเดียวกันกับฟังก์ชันใดๆ ก็ได้ที่ไม่มีผลข้างเคียง โดยที่ไม่มีผลกระทบที่สังเกตได้
‫เช่น ฟังก์ชันมีกระสุนของเรา
‫ดังนั้นฉันจึงขอท้าให้คุณสร้างกระสุนให้เป็นฟังก์ชันที่บริสุทธิ์
‫เพื่อเลือกและตั้งค่าช่องทำเครื่องหมายนั้นเพื่อทำให้บริสุทธิ์
‫และเกิดอะไรขึ้นกับโฟลว์การดำเนินการในตอนนี้
‫สิ่งที่ปัจจุบันมันถูกเชื่อมต่อผ่านฟังก์ชั่น
‫มันไปที่ไหน?
‫หยุดวิดีโอชั่วคราวและไปกันเลย
‫ตกลง.
‫ยินดีต้อนรับกลับ.
‫เลยเลือกมีกระสุน
‫เราจะตรวจสอบช่องกาเครื่องหมายล้วนแล้วคุณจะเห็นว่าหมุดการดำเนินการหายไปและขั้นตอนการดำเนินการที่ไหลผ่านก่อนหน้านี้มีกระสุนอยู่ในขณะนี้ไปยังคำสั่งสาขาของเราโดยตรงซึ่งเป็นสิ่งที่เราต้องการตอนนี้มีกระสุนกำลังจะไป
‫รันทันทีที่รันคำสั่ง branch เพื่อรับค่าส่งคืน
‫คำเตือน โปรดใช้ช่องทำเครื่องหมายนี้เฉพาะเมื่อคุณแน่ใจว่าฟังก์ชันไม่มีผลข้างเคียง
‫กรณีทั่วไปและกรณีการใช้งานสำหรับสิ่งนี้คือเมื่อฟังก์ชันของคุณเพียงแค่พยายามคำนวณค่า เช่น
‫มีกระสุน
‫และนั่นคือสาเหตุที่ฟังก์ชันนี้ไม่เป็นไปตามแบบแผนของการตั้งชื่อกริยาเนื่องจากไม่ได้ทำบางอย่าง
‫ได้รับบางสิ่งบางอย่าง หรือกำลังตอบคำถาม
‫ในกรณีนี้ คำถามคือมีกระสุน
‫และในความเป็นจริง เราสามารถใส่เครื่องหมายคำถามเล็กๆ น้อยๆ ในฟังก์ชันของเราได้ โดยตั้งชื่อสิ่งที่คุณสามารถทำได้ใน
‫Blueprint ที่คุณไม่สามารถทำได้ใน C++ ซึ่งช่วยให้เราเห็นว่า ใช่ ฟังก์ชันนี้กำลังตอบคำถามอยู่
‫มันไม่ได้พยายามที่จะทำอะไร
‫บ่อยครั้งที่ความแตกต่างระหว่างฟังก์ชัน pure กับ non pure มักใช้กับกริยาหรือเหมาะกับคำถาม
‫ในการทบทวน มาดูอภิธานศัพท์ของเรากัน
‫ผลข้างเคียงเป็นผลที่สังเกตได้ของฟังก์ชันที่เราเคยเห็น และเราได้ดูตัวอย่างของฟังก์ชันเหล่านั้นแล้ว
‫และฟังก์ชันบริสุทธิ์ก็คือฟังก์ชันที่ไม่มีผลข้างเคียง เช่น ฟังก์ชันรับฟังก์ชันหรือฟังก์ชันตอบคำถาม
‫สำหรับการบรรยายครั้งนี้
‫เจอกันใหม่ตอนหน้าค่ะ