class - 定义类的要点

标签 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,
      ],
    ),
  )
);

我的意思是,它显然更短(即使我什至使用那些可笑的下划线将变量设为私有(private),这是我认为毫无意义的另一件事),而且我看不到定义任何的好处一个简单地定义一些变量的类。零。为什么要把事情搞得不必要的复杂?

这真的纯粹是“编码哲学”(无论其确切含义是什么)或个人对“编码风格”的品味的问题吗?因为这就是我的看法。

最佳答案

这甚至是 Flutter 对 Colors 类所做的事情。

它:

  • 为变量提供上下文。例如,“蓝色”在 Android 和 iOS 上不是一回事。它在您的自定义应用程序中可能会有所不同。

  • 提高可发现性。对于类,我们可以键入 Palette.,IDE 将列出所有可能性。

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

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

例子:

export 'colors.dart' show Palette;

这比:

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

关于class - 定义类的要点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54972487/

相关文章:

amazon-web-services - 通过 Flutter App 中的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏

ios - Firebase 云消息传递仅在发布时才起作用

flutter - 从 TabBarView Child 导航到另一个 Route(全屏)

java - BlazeRS:将 ActionScript 类型类(对于嵌入图像)转换为 Java

flutter - 用户不互动时采取行动

angular - 如何在Angular Dart项目中将Material-icon颜色更改为angular_components的白色?

firebase - Flutter Firebase 身份验证

php - 如何在 PHP 中完成 __constructor 后自动调用方法?

objective-c - 实现 Objective-C 的根类需要什么?

php - 如果 post_meta_value 匹配,则将新类添加到 css