У моїй програмі на базі 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 зробити його необов’язковим скрізь.