dart编程规范


一、命名规范

1、类名,枚举,类型定义,类型参数采用首字母大写的驼峰式命名方式

class SliderMenu { ... }
class HttpRequest { ... }
typedef Predicate<T> = bool Function(T value);

2、扩展函数(extension-method)同样采用首字母大写的驼峰式命名

extension MyFancyList<T> on List<T> { ... }
extension SmartIterable<T> on Iterable<T> { ... }

3、库名(libraries)、包名(packages)、文件夹(directories)、资源文件(source)、文件名(file)采用小写字母命名,当字母数量大于一个的时候使用下划线分割

library peg_parser.source_scanner;
import 'file_system.dart';
import 'slider_menu.dart';

4、在使用import as,引用名采用下小写+下划线

import 'dart:math' as math;
import 'package:angular_components/angular_components'  as angular_components;
import 'package:js/js.dart' as js;

5、变量定义采用首字母小写的驼峰式命名

var item;
HttpRequest httpRequest;
void align(bool clearItems) {
// ...
}

6、常量定义采用首字母小写的驼峰式命名

const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');
class Dice {
static final numberGenerator = Random();
}

7、相关具有特殊意义的命名

good:
    HttpConnectionInfo
    uiHandler
    IOStream
    HttpRequest
    Id
    DB
bad:
    HTTPConnection
    UiHandler
    IoStream
    HTTPRequest
    ID
    Db

8、定义变量名不要使用字母作为前缀

good:
    defaultTimeout
bad:
    kDefaultTimeout

二、头文件引入的顺序(import)

1、dart相关的放在最上面

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

2、外部引入的包放在最前面

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

import 'package:my_package/util.dart';

3、import和export采用空行分割

import 'src/error.dart';
import 'src/foo_bar.dart';

export 'src/error.dart';

4、引入按字母排序

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

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

三、编码规范

1、字符串操作规范

good:
    //字符串拼接使用换行符
    print(
    'ERROR: Parts of the spaceship are on fire. Other '
    'parts are overrun by martians. Unclear which are which.');

    //字符串拼接时取值使用$
    'Hello, $name! You are ${year - birth} years old.';

bad:
    print(
    'ERROR: Parts of the spaceship are on fire. Other '+
    'parts are overrun by martians. Unclear which are which.');

    'Hello, ' + name + '! You are ' + (year - birth).toString() + ' y...';

2、集合操作规范(List,Map)

good:
    //一般集合定义
    var points = [];
    var addresses = {};

    //指定类型集合的定义
    var points = <Point>[];
    var addresses = <String, Address>{};

    //集合判空(不要通过.legnth来判断集合是否为空)
    if (lunchBox.isEmpty) return 'so hungry...';
    if (words.isNotEmpty) return words.join(' ');

    //避免使用cast来转换集合的类型
    List<int> singletonList(int value) {
      var list = <int>[];
      list.add(value);
      return list;
    }

bad:
    //一般集合定义
    var points = List();
    var addresses = Map();

    //指定类型集合的定义
    var points = List<Point>();
    var addresses = Map<String, Address>();

    //集合判空
    if (lunchBox.length == 0) return 'so hungry...';
    if (!words.isEmpty) return words.join(' ');

     //避免使用cast来转换集合的类型
    List<int> singletonList(int value) {
      var list = []; // List<dynamic>.
      list.add(value);
      return list.cast<int>();
    }

3、类成员变量的定义规范

good:
    //不写多余的get,set函数
    class Box {
    var contents;
    }

bad:
    class Box {
        var _contents;
        get contents => _contents;
        set contents(value) {
        _contents = value;
        }
    }

4、构造函数

good:
    class Point {
        num x, y;
    Point(this.x, this.y);
    }

bad:
    class Point {
        num x, y;
    Point(num x, num y) {
        this.x = x;
        this.y = y;
        }
    }

5、一般函数(function)

//代码逻辑简单,推荐使用=>
double get area => (right - left) * (bottom - top);
bool isReady(num time) => minTime == null || minTime <= time;
String capitalize(String name) =>
    '${name[0].toUpperCase()}${name.substring(1)}';

6、异常处理

good:
    //使用 rethrow 重新抛出异常
    try {
      somethingRisky();
    } catch (e) {
      if (!canHandle(e)) rethrow;
      handle(e);
    }

bad:
    try {
      somethingRisky();
    } catch (e) {
      if (!canHandle(e)) throw e;
      handle(e);
    }

文章作者: bigshot
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 bigshot !
 上一篇
Dart-Aqueduct开发后端 Dart-Aqueduct开发后端
连接数据库(postgresSql)//初始化迁移文件 aqueduct db generate //将版本迁移文件同步到你的数据库 aqueduct db upgrade --connect postgres://用户名:密码@loc
2020-04-16 bigshot
下一篇 
Flutter RaiseButton 使用介绍 Flutter RaiseButton 使用介绍
一、常用属性color:按钮可点击时的颜色 disabledColor: 按钮不可点击时的颜色 disabledColorTextColor:按钮不可点击时文字的颜色 textColor:按钮可点击时文字的颜色 shape:按钮的样式
2020-04-08 bigshot
  目录