Какой из них наиболее эффективен? «get» или «final»?

#flutter #dart

#flutter #dart

Вопрос:

У меня есть несколько файлов локализации, в которых более 200 строк используются внутри приложения flutter.Это число растет экспоненциально. Поэтому, чтобы решить проблему потребления памяти, я создаю локализации динамически, поэтому в любое время создается только одна локализация.

Теперь. Я объявляю строки как

 class ExampleLocalizations{
final String myFirstString = "myString";
final String mySecondString = "myString";
final String myThirdString = "myString";
//200 more
}
  

Но я обеспокоен тем, что со временем будет проблемой иметь все эти строки одновременно. Поэтому я задаюсь вопросом, изменив его на

 class ExampleLocalizations{
  String get myFirstString => "myString";
  String get mySecondString => "myString";
  String get myThirsString => "myString";
}
  

Будет ли это рекомендуемым решением? Я думаю, что dart построит строки, и когда я удалю экран из навигации, мне интересно, соберет ли сборка мусора эту неиспользуемую строку.

Это может быть применено к любому типу, вопрос в том, является ли он более производительным.

Комментарии:

1. в кратком ответе он будет более производительным, я рекомендую использовать pub.dev/packages/intl_utils ситуация здесь такова, что вам нужно создать файлы как конечную строку myFirstString = «myString»; и он будет сгенерирован как строка get myFirstString { return Intl.message( ‘myString’,name: ‘myFirstString ‘, desc: «, args: [], ); } таким образом, это гарантирует, что он будет сгенерирован только при вызове строки как функции, а не при получении всех строк в качестве значения класса или чего-либо еще

2. Это const не вариант?

3. О, спасибо. К сожалению, у меня есть пользовательская реализация локализации с поддержкой тематизации и стиля, чтобы избежать генерации кода и добавления дополнительных зависимостей. Итак, обратная связь действительно приятная, поскольку я ожидал такого поведения. И нет, const не является зельем, поскольку оно предназначено только для статических переменных и загружает все сразу. Это большое нет, нет

4. @ValdaXD во-первых, вы можете применить любую тему, которую вы определяете, к любому элементу flutter, не влияя на реальный дизайн строковой переменной, так что вы будете делать, когда у вас есть несколько языков? я гарантирую вам, что если вы использовали этот пакет, он получит строки как глобальные функции приложения и загрузит только необходимые строки, генерация кода здесь лучше, чем создание строк, и поддерживает больше функциональности, если вы хотите передавать аргументы строкам, если вам нужен полный пример, я могу опубликовать вам полныйпример в качестве ответа

5. Я бы не ожидал никакой разницы. final члены неявно объявляют get ters. В общем, если один способ строго лучше другого, и если преобразование между ними тривиально, вы обычно должны быть в состоянии предположить, что компилятор выполнит оптимизацию за вас.