ในแอปพลิเคชัน Dart ของฉันฉันเพิ่งสังเกตว่าฉันสามารถละเว้นnewคำหลักได้และทุกอย่างทำงานได้ดี
แทนfinal widget = new Widget();ฉันยังสามารถใช้final widget = Widget();.
สิ่งนี้มีผลในรหัสหรือไม่?
ในแอปพลิเคชัน Dart ของฉันฉันเพิ่งสังเกตว่าฉันสามารถละเว้นnewคำหลักได้และทุกอย่างทำงานได้ดี
แทนfinal widget = new Widget();ฉันยังสามารถใช้final widget = Widget();.
สิ่งนี้มีผลในรหัสหรือไม่?
คำตอบ:
ไม่มันไม่ได้ กับโผ 2 (คลิกเพื่อประกาศมีข้อมูลเพิ่มเติม)newและconstคำหลักที่ถูกสร้างขึ้นมาเป็นตัวเลือก
ซึ่งหมายความว่าnew Widget()จะเหมือนกับWidget()ของมันเอง
อย่างไรก็ตามconstคำหลักสามารถเปลี่ยนค่าที่จะไม่เป็นค่าconstโดยปริยายเป็น a const.
ดังนั้นคุณจะต้องระบุอย่างชัดเจนconstเมื่อจำเป็น
newจำเป็น หากคุณละเว้นnewจากโปรแกรมที่ถูกต้องโปรแกรมจะยังคงทำงานในลักษณะเดียวกัน หากคุณลบออกconstจากโปรแกรมที่ใช้งานได้ในกรณีส่วนใหญ่ที่คุณจะต้องเขียนconstเพื่อให้โปรแกรมนั้นถูกต้องโปรแกรมจะยังคงใช้ได้ เมื่อใดก็ตามที่มีconstนิพจน์ล้อมรอบอยู่แล้วคุณสามารถละเว้น const ที่ซ้อนกันได้
ในโผที่ 2 หากคุณเรียก constructor เช่นฟังก์ชั่นโดยไม่ต้องnewหรือในด้านหน้าแล้วมันจะเทียบเท่ากับการใช้const newหากคุณต้องการการร้องขอ const คุณควรวางไว้constด้านหน้า
ภายในนิพจน์ const คุณไม่จำเป็นต้องเขียนconstอีกครั้งและในบางบริบทที่ต้องใช้นิพจน์ const (เช่นสลับนิพจน์ case และ initializers ของตัวแปร const) คุณไม่จำเป็นต้องใช้ const ภายนอกด้วยซ้ำ
newดังนั้นคุณจึงไม่จำเป็นต้องเขียน
ทีมภาษา Dart ต้องการอนุญาตให้นิพจน์ที่คุณสามารถแทรกอย่างใดอย่างหนึ่ง(แผนนั้นไม่ได้เลื่อนออกไปดังนั้นคุณสามารถเพิกเฉยต่อสิ่งนี้ได้)newหรือconstและยังคงมีการเรียกใช้ที่ถูกต้อง (นั่นคือตัวสร้าง const ที่มีอาร์กิวเมนต์คงที่) เป็นค่าเริ่มต้นในการแทรกconstแทนnewหวังว่าในการอัปเดต Dart 2 ในช่วงต้นด้วยเหตุผลดังกล่าว ฉันขอแนะนำให้เขียนnewไว้ข้างหน้าObject()หรือตัวสร้างconstอื่น ๆที่คุณต้องการให้วัตถุเป็นอินสแตนซ์ใหม่ นั่นเป็นกรณีที่หายากมากโดยปกติคุณจะไม่สนใจเกี่ยวกับตัวตนของวัตถุที่ไม่เปลี่ยนรูปของคุณ (ซึ่งเป็นเหตุผลว่าทำไมการแทรกconstจึงถือเป็นความคิดที่ดี)
newและconstคำหลักที่แตกต่างกัน มีผลแตกต่างกันในการใช้หน่วยความจำในการคอมไพล์และรันไทม์
ตามที่คำตอบอื่น ๆ ระบุไว้ใน Dart 2 การใช้newเป็นทางเลือก นอกจากใช้new เป็นกำลังใจโดยแนวทางที่มีประสิทธิภาพโผ
newคำหลักที่ถูกสร้างขึ้นมาเป็นตัวเลือกในโผ 2. ณ ตอนนี้เรียกชั้นเรียนมักจะกลับตัวอย่างใหม่ของชั้นที่ ตามคำแนะนำของฉันคุณสามารถใช้ ( ไม่ใช่ MANDATORY ) นอกนิยามของ Layout แต่ละเว้นใน Layouts
อีกประเด็นหนึ่งที่ฉันอยากจะแบ่งปันกับพวกคุณคือถ้าคุณใช้newหรือconstคีย์เวิร์ดในขณะที่ประกาศวิดเจ็ตคุณจะเห็นไอคอน +ซึ่งคุณสามารถใช้เพื่อยุบและขยายโค้ดเนื้อหาของวิดเจ็ตได้ สิ่งนี้มีประโยชน์เมื่อคุณต้องการยุบ / ซ่อนโค้ดวิดเจ็ตที่เหลือในไฟล์โผในขณะที่ทำงานกับโค้ดวิดเจ็ตอื่นในไฟล์เดียวกัน
newไม่สนับสนุน: การใช้ดูเหมือนว่าจะสร้างอินสแตนซ์ใหม่โดยไม่มีเงื่อนไขเมื่อมันอาจไม่
newหรือconstจะต้องยังคง (ผมจำไม่ได้ตัวอย่างหรือกฎ) พวกเขาอาจลองอีกครั้งหลังจาก Dart 2 เพื่อให้เป็นทางเลือกทุกที่