构建良好的 Dart 编码风格:导入导出次序和基本编码规范

前言

我们之前介绍了 Dart 的命名规范,本篇来介绍 Dart 的代码次序和格式化规范。开篇还是重复那句话:代码是写给人看的。

import 导入次序

导入次序本身并不会影响代码的执行,但是整齐的导入会让你的代码看起来更加舒适,也会让人感觉你的代码更有条理。官方对于导入的顺序建议如下图所示。

导入次序.png

而对于同级别的,建议是按字母次序排序(这个有点难😂)。下面是示例:

// 正确示例
import 'dart:async';
import 'dart:html';

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import '../components/buttons.dart';
import '../utils/http.dart';

// 错误示例 (未按字母排序)
import 'package:foo/foo.dart';
import 'package:bar/bar.dart';

import 'foo/foo.dart';
import 'foo.dart';

export 应当排在所有 import 之后,并在二者之间空一行

这个好理解,导出应当放在导入之后,而且为了区别,在之间空一行,下面是示例:

// 正确示例
import 'src/error.dart';
import 'src/foo_bar.dart';

export 'src/error.dart';

// 错误示例
import 'src/error.dart';
export 'src/error.dart';
import 'src/foo_bar.dart';

使用 dart format 工具格式化代码

Dart 提供了 dart format 工具来格式化代码。简单的命令如下,详细可以查看官方文档:dart-format。

# 格式化当前文件夹文件
dart format .
# 使用空格分隔格式化多个目录或文件
dart format lib bin/updater.dart 

当然,对于 VSCode 而言,推荐使用 Prettier - Code Formatter 这个插件,保存后会自动格式化。

单行代码不要超过80个字符

这个是大多数编程语言的要求,屏幕大的可能没太大感知,但是屏幕小的时候代码阅读体验及其糟糕。对于 Flutter,使用了 Prettier 插件后,一个好的习惯是在属性后面加一个逗号,这样会自动换行。比如下面是没有逗号和逗号的区别,显然加了逗号的阅读体验更好。

// 每个属性后加逗号
PrimaryButton(
  onPressed: () {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (BuildContext context) =>
            const WindmillIndicatorDemo(),
      ),
    );
  },
  title: '大风车动画',
),

// 不加逗号的情况
PrimaryButton(
  onPressed: () {
    Navigator.of(context).push(MaterialPageRoute(
      builder: (BuildContext context) =>
          const WindmillIndicatorDemo(),
    ));
  },
  title: '大风车动画'),

使用 Prettier 也可以设置超出字符后自动换行。关于 Prettier 的设置可以查看 GitHub 的说明文档:prettier-vscode。

分支代码

对于存在多个分支的控制代码,统一使用大括号将各个分支包裹起来。

// 正确示例
if (isWeekDay) {
  print('Bike to work!');
} else {
  print('Go dancing or read a book!');
}

// 错误示例
if (isWeekDay) {
  print('Bike to work!');
} else print('Go dancing or read a book!');

对于只有一条分支语句,且一行可以写完的(80个字符以内)可以不适用大括号。

if (arg == null) return defaultValue;

而对于一行写不完的,那么还是需要使用大括号包裹起来:

// 正确示例
if (overflowChars != other.overflowChars) {
  return overflowChars < other.overflowChars;
}

// 错误示例
if (overflowChars != other.overflowChars)
  return overflowChars < other.overflowChars;

操作符

对于赋值,运算符、条件判断、箭头函数等,在操作符前后各空一格,以增强阅读体验。下面的示例对比,哪个阅读体验更好,一目了然!

// 正确示例
double r = 3.0;
double area = pi * r * r;
_elevation = _elevation == 0 ? 10.0 : 0.0;
if (area <= 2.0) {
  print('Less than 2.0. ');
}

MaterialPageRoute(
  builder: (BuildContext context) => const AnimatedWidgetDemo(),
),

// 错误示例
double r=3.0;
double area=pi*r*r;
_elevation=_elevation==0?10.0:0.0;
if (area<=2.0) {
  print('Less than 2.0. ');
}

MaterialPageRoute(
  builder: (BuildContext context)=>const AnimatedWidgetDemo(),
),

总结

本篇介绍了 Dart 语言的导入导出次序,以及编码的最基本的规则。这样的规则也适用于其他语言,只要记住那句话:代码是写给人看的!注重代码命名风格和编码风格,然后,善用一些代码格式化工具,就能够让你的编码看起来井井有条!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录 1 简介 2 变量、长量、命名规则 3 常用数据类型 4 字符串拼接 5 数据类型判断 6 循环语句,bre...
    林ze宏阅读 698评论 0赞 2
  • 文章首发地址: https://www.jianshu.com/p/047eb78dce53 前言 最近看qq群里...
    做人要简单阅读 17,461评论 0赞 23
  • 说明 版本:1.0.0 上次修改时间:2020 年 4 月 29 日 写在前面 本文档适用于原生前端代码的风格样式...
    alanwhy阅读 1,006评论 0赞 4
  • 注释 要像句子一样格式化 除非是区分大小写的标识符,否则第一个单词要大写。以句号结尾(或“!”或“?”)。对于所有...
    nero_i阅读 507评论 0赞 3
  • 前言 工欲善其事必先利其器,用 IntelliJ IDEA 开发几年了,它带来工作效率上的提升是很显著的。本文分享...
    anyesu阅读 11,841评论 0赞 23

友情链接更多精彩内容