У моїй програмі на базі Dart я щойно помітив, що можу пропустити new
ключове слово, і все працює чудово.
Замість final widget = new Widget();
я також можу використовувати final widget = Widget();
.
Чи це впливає на код?
У моїй програмі на базі Dart я щойно помітив, що можу пропустити new
ключове слово, і все працює чудово.
Замість final widget = new Widget();
я також можу використовувати final widget = Widget();
.
Чи це впливає на код?
Відповіді:
Ні, це не є. З Dart 2 (натисніть для оголошення з додатковою інформацією)new
, а також const
ключовими словами були зроблені по бажанню .
Це означає, що new Widget()
робить те саме, що і Widget()
самостійно.
Однак const
ключове слово може змінити значення, яке не буде const
явно ім'ям const
.
Тож вам доведеться чітко вказати, const
коли це потрібно.
new
це потрібно. Якщо ви опустите new
правильну програму, вона завжди буде працювати однаково. Якщо ви видалите const
з робочої програми, то в більшості випадків, коли вам потрібно було б написати, const
щоб програма була дійсною, вона все одно буде дійсною. Щоразу, коли const
вираз вже оточує вираз, ви можете пропустити вкладений const.
У Dart 2, якщо ви викликаєте конструктор як функцію, без a new
або const
спереду, це еквівалентно використанню new
. Якщо ви хочете викликати const, тоді слід поставити const
попереду.
Усередині виразу const вам не потрібно писати const
знову, а в деяких контекстах, які вимагають виразів const (наприклад, вирази регістру перемикачів та ініціалізатори змінних const), вам навіть не потрібен зовнішній const.
Тому вам ніколи не потрібно писати new
.
Команда мов Dart хоче дозволити вирази, куди ви можете вставити будь-який new
або, const
і все ще мати правильний виклик (тобто конструктор const з постійними аргументами), за замовчуванням вставляти const
замість new
, сподіваємось, у ранньому оновленні Dart 2. З цієї причини , Я рекомендую писати new
його перед Object()
або будь-яким іншим конструктором const, де вам потрібно, щоб об'єкт був новим екземпляром. Це дуже рідкісний випадок, як правило, вас не хвилює ідентичність вашого незмінного об’єкта (саме тому вставлення const
вважається гарною ідеєю).
Як зазначено в усіх інших відповідях, у Dart 2 використання не new
є обов’язковим. Крім того, використання new
не рекомендується вказівками Ефективний дартс .
new
Ключове слово було зроблено необов'язковим в Dart 2. В даний час, викликаючи клас завжди повертає новий екземпляр цього класу. Відповідно до моєї рекомендації, ви можете використовувати його ( НЕ ОБОВ’ЯЗКОВО ) поза визначенням макета, але опустити всередині макетів.
Ще одним пунктом, яким я хотів би поділитися з вами, є те, що якщо ви використовуєте new
або const
ключове слово під час оголошення віджетів , ви також можете побачити значок +, який ви можете використовувати для згортання та розширення коду віджета. Це корисно, коли ви хочете згорнути / приховати решту коду віджета у файлі дартса під час роботи над іншим кодом віджета в тому ж файлі.
new
це не рекомендується: використання схоже на те, що воно беззастережно створює новий екземпляр, коли він може цього не робити.
new
абоconst
все ще потрібно (я не пам’ятаю прикладів чи правил). Вони можуть зробити ще одну спробу після Dart 2 зробити його необов’язковим скрізь.