定义类的要点

时间:2019-03-03 18:53:29

标签: class dart flutter

这听起来可能是广泛而无知的,可能是因为它是我。

在这里:

在页面https://medium.com/coding-with-flutter/flutter-the-power-of-small-and-reusable-widgets-7649e3b0bca2上,我找到了以下示例代码,用于设置一个类来定义调色板,例如:(为简洁起见,简称为

class Palette {
  static Color blueSky = Color(0xFF068FFA);
  static Color greenLand = Color(0xFF89ED91);
  static Color blueSkyLight = Color(0x40068FFA);
  static Color greenLandLight = Color(0x4089ED91);
  static Color blueSkyLighter = Color(0x10068FFA);
}

该类随后将按以下方式使用:

Container(
  decoration: BoxDecoration(
    gradient: LinearGradient(
      begin: Alignment.topCenter,
      end: Alignment.bottomCenter,
      colors: [
        Palette.blueSky,
        Palette.greenLand,
      ],
    ),
  )
);

现在有人让我困惑:定义类的意义何在?为什么不简单地定义一堆变量,像这样:

static Color _blueSky = Color(0xFF068FFA);
static Color _greenLand = Color(0xFF89ED91);
static Color _blueSkyLight = Color(0x40068FFA);
static Color _greenLandLight = Color(0x4089ED91);
static Color _blueSkyLighter = Color(0x10068FFA);

...然后再像这样使用:

Container(
  decoration: BoxDecoration(
    gradient: LinearGradient(
      begin: Alignment.topCenter,
      end: Alignment.bottomCenter,
      colors: [
        _blueSky,
        _greenLand,
      ],
    ),
  )
);

我的意思是,它显然更短(即使我甚至使用那些荒谬的下划线将vars私有化,这也是我发现毫无意义的另一件事),而且我认为在定义时任何都没有好处简单定义一些变量的类。零。为什么使事情变得不必要地复杂?

这真的是纯粹的“编码哲学”(无论应该指的是什么)还是“编码风格”的个人品味的问题?因为那就是我的全部情况。

1 个答案:

答案 0 :(得分:2)

Flutter甚至对Colors类也做了这件事。

它:

  • 为变量提供上下文。例如,“蓝色”在Android和iOS上是不同的。理应在您的自定义应用中有所不同。

  • 提高了可发现性。对于一个类,我们可以输入Palette.,IDE会列出所有可能性。

  • 防止混淆名称阴影。我们可以命名变量blue,但仍然可以使用Palette.blue

  • 与Dart导入(显示/隐藏指令)配合良好

示例:

export 'colors.dart' show Palette;

这比以下要好得多:

export 'colors.dart' show blue, red, green, purple, ...;