【问题标题】:What is the different between these two void methods in Dart?Dart 中这两种 void 方法有什么不同?
【发布时间】:2021-10-12 02:52:39
【问题描述】:

代码:

void main() {  runApp(MyApp());}

代码:

Void main() => runApp(MyApp());

【问题讨论】:

标签: dart


【解决方案1】:

我将提供详细的解释,它可能会帮助您深入了解。

Dart 中的函数的行为很像 JavaScript 中的函数。它们可以定义为类似于我们的 void 函数的方法,并且它们的行为类似于一等对象,这意味着它们可以存储在变量中、作为参数传递或像函数的正常返回值一样返回。



从上面的例子可以看出,创建函数的方法有很多种。未定义返回类型(如使用 var 语法)的函数具有动态返回类型。如果函数定义中的参数没有类型,则它们隐式具有动态类型。

粗箭头表达式 胖箭头表达式或 Lambda 函数表达式是在单行 using => syntaxAKA 胖箭头上编写函数的语法。这类似于 JavaScript 的 ES6 Fat Arrow 函数语法。这是用单个语句编写函数的一种更简洁的方法。

【讨论】:

    【解决方案2】:

    差别很小。

    SomeType name(args) => expression; 形式的函数几乎完全等同于SomeType name(args) { return expression; }

    Dart 的void 类型与其他类似语言对void 的使用略有不同。该类型不是 empty 类型,而是等效于 Object?,因为它可以包含任何值,它只是静态地阻止您使用该值。 这种设计最初是在 Dart 1 中选择的,因为它允许返回有用值的方法覆盖返回 void 的方法。

    Dart 通常不允许在void 返回函数中使用return value; 语句,因为这可能是一个错误,除非value 的类型本身就是void(或dynamicNull)。

    所以

    void main() => runApp(MyApp());
    

    等价于

    void main() {
      return runApp(MyApp());
    }
    

    但是由于main 的返回类型为void并且 因为它是主要方法),所以没有人会查看返回的价值。

    因此,简而言之,您可以使用=> voidExpression; 作为 { voidExpression;} 的简写,因为没有人会注意到返回的值。

    【讨论】:

      【解决方案3】:

      逻辑上没有区别。

      我们使用:

          void main() => runApp(MyApp());
      

      当函数只使用一行时。但是,我们使用尖括号“{}”来表示不同行的复杂性。

      例如:

           void main() { 
               runApp(MyApp());
           }
      

      注意使用多于一行。

      通常在你的情况下,你不会使用第二种方法,我建议你坚持第一种。

      希望对您有所帮助! :)

      【讨论】:

        猜你喜欢
        • 2010-12-28
        • 2013-09-08
        • 2019-03-31
        • 2011-12-29
        • 2016-07-01
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多