Dart const 作为预处理器指令

mag*_*n94 3 dart flutter

我正在寻找类似于 Dart 中的预处理器指令的东西。

这个想法是为了避免有条件地将代码的某些部分编译为某些标志。

现在,喜欢阅读的东西这样我才觉得当飞镖编译器执行的树摇晃它会扔掉未使用部分的代码,从编译的代码中排除。

假设我做对了,会是这样的:

static const needExecute = false;

if (needExecute){
  //instructions
}
Run Code Online (Sandbox Code Playgroud)

或者像这样:

static const needValue = false;

var myList = [
        "value1", 
        if(needValue) 
          "value2", 
        if(needValue) 
          "value3",
        ]
Run Code Online (Sandbox Code Playgroud)

编译器应该在编译时知道该代码永远不会被执行,并且它会成为树抖动的“受害者”,根本不会被编译。

此外,条件导入也是一种可以接受的做事方式吗?

我的意思是,我可以使用两个不同的导入来公开一个方法,该方法将为空或包含指令(第一种情况)或两种列表(第二种情况)。

假设我没有反编译应用程序的技能,有什么办法可以确定地知道这一点吗?

非常感谢!

Rém*_*let 7

你的假设是对的。如果if可以在编译时对 an 的求值进行求值,则它将相应地进行 tree-shaking。

因此,写作:

const condition = true;

if (condition) {
  print('42');
} else {
  print('24');
}
Run Code Online (Sandbox Code Playgroud)

将编译为:

print('42');
Run Code Online (Sandbox Code Playgroud)

if被删除,因为它是在编译评估了。无需在运行时重新评估它