ในแอปพลิเคชัน 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 เพื่อให้เป็นทางเลือกทุกที่