【问题标题】:Function and usage variable names in dartdart 中的函数和用法变量名
【发布时间】:2019-02-12 05:47:43
【问题描述】:

首先,抱歉标题名称。我不知道还能怎么问这个。

在swift中,我们可以运行以下代码:

func setColor(to newColor: UIcolor) {
    self.color = newColor
}
setColor(to: .blue)

在 dart 中,我知道执行该代码的唯一方法是:

setColor(Color newColor){
    this.color = newColor;
}
setColor(Colors.blue);

或者

setColorTo({Color newColor}){
    this.color = newColor;
}
setColorTo(newColor: Colors.blue);

对我来说,swift 代码更简洁。当代码解释正在发生的事情时,我个人喜欢它。例如setColor(to: color)

我喜欢你可以为代码选择一个名称,为使用选择另一个名称。

如果你要打电话给setColor(color),你知道它在做什么,但离普通英语更远。您也可以使用setColorTo(newColor: color),但函数中不应包含“to”一词。也称它为newColor 使其更加冗长,因为它适合代码和调用函数时。

有没有办法在 dart 中使用类似 swift 的语法?

【问题讨论】:

    标签: dart naming-conventions naming syntactic-sugar


    【解决方案1】:

    在 Dart 中,您通常会直接设置变量,而不是使用以 set 开头的一元函数。那就是:

    this.color = Colors.blue;
    

    public non-final 变量完全没问题,你可以直接设置它们。 如果您想在设置时做更多事情,您可以使用带有私有变量的 getter 和 setter:

    Color get color => _color;
    set color(Color newColor) {   
      logColorChange(_color, newColor); 
      _color = newColor; 
    }
    // and then still write:
    this.color = Color.blue;
    

    如果这不是真正的 setter 问题,而只是一般参数命名问题,那么 Dart 不允许您为同一个命名参数提供不同的外部和内部名称。如果你想要一个不同的名字,你必须在方法中声明它:

    void setColor({Color to}) {
      Color newColor = to;
      this.color = newColor;
    }
    

    我不知道以前对此类功能的任何请求,可能是因为 Dart 中的命名参数始终是可选的,因此它们的使用不如开始时所需的位置参数那么多,并且使用 setFoo(to: something) 感觉像是开销只需setFoo(something)setFooTo(something)

    “坚定的真正程序员可以用任何语言编写 FORTRAN 程序。”

    Dart 不是 Swift,它在许多明显和微妙的方面都不同。如果你尝试用 Dart 编写 Swift,你失望。我建议尝试编写惯用的 Dart 代码,过一段时间看看感觉如何。

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 2021-12-25
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多