问题描述
说我有这句话:
final output = MyEnum.values[myPreferences.getIndex('some_key') ?? getDefaultIndex('some_key')];
我可以将这两个表达式的值存储在本地变量中,例如:
final savedindex = myPreferences.getIndex('some_key');
final defaultIndex = getDefaultIndex('some_key');
final output = MyEnum.values[savedindex ?? defaultIndex];
如果我在1000个output
类型变量中执行相同的重构(创建两个额外的局部变量以使代码看起来更具可读性),这会导致性能/内存问题吗?
PS:请不要对如何更好地从SharedPreferences
获取默认值以及如何减少上述声明提出建议。我只是使用示例进行说明。
解决方法
很有可能不是。我不用担心。
在某些情况下,Dart可能难以优化,但是局部变量是编译器非常擅长处理的一件事。 除非您的代码分配了一个庞大的对象,将其放入局部变量中,一次使用它,再也不需要它,然后继续进行很长的计算,否则我不会担心局部变量会使该值保持活动状态。即使在那种情况下,编译器几乎肯定会在不再需要该值后仍然保持其活动状态(即使这样做,即使您不使用变量作为中间值也可能会执行该操作),而我d仅在我实际遇到问题时才开始调查。
别担心,请相信编译器。