美文网首页
Flutter 命名规范

Flutter 命名规范

作者: 嘎嘣脆糖 | 来源:发表于2020-07-01 13:41 被阅读0次

    命名规范:

    文件名: 小写+下划线

    ym_home.dart
    

    类名:大写开头驼峰

    class LoginPage extends StatefulWidget{}
    

    变量名

    //成员变量 小写驼峰式
    String loginType; 
    //如果变量被作用域内私有,需在变量前加下划线标识
    String _loginType;
    //若是常量 使用大写加下划线进行标识
    const LOGIN_TYPE;
    

    注意:

    • 不要使用变量名前加前缀m或者s来标识变量
    • 使用缩写时,应确认对应单词有缩写,尽量避免使用首字符命名如LoginUserName->LUN
    • 尽量避免命名变量或类或包名单词数量超过4个,尽量选用通俗易懂的单词用来命名

    代码规范

    流程控制花括号:

    正确:

    if(isTure){
     getToken();
    }else{
      error();
    }
    

    避免

    if(isTrue) 
    getToken();
    或者
    if(isTrue) getToken();
    
    

    私有变量请使用下划线进行标识:

    String _pageType;
    

    私有方法请使用下划线进行标识:

    String _getPageType(){}
    

    重复使用到的组件应抽取成公共组件放在component包下

    注释:

    成员变量和方法注释使用Doc注释(///),dart doc 会对应生成说明文档

    /// The number of characters in this chunk when unsplit.
        int get length => ...
        
    /// Deletes the file at [path] from the file system.
        void delete(String path) {
          ...
        }
    

    字符串

    优先使用模板字符串

    'Hello, $name! You are ${year - birth} years old.';
    

    集合

    尽可能使用集合字面量

    如果要创建一个不可增长的列表,或者其他一些自定义集合类型,那么无论如何,都要使用构造函数。

    //正确
      var points = [];
      var addresses = {};
      var lines = <Lines>[];
    //不推荐如下写法
      var points = List();
    

    var addresses = Map();

    不要使用.length查看集合是否为空

    //正确
    if (lunchBox.isEmpty) return 'so hungry...';
    if (words.isNotEmpty) return words.join(' ');
    //不推荐如下写法:
    if (lunchBox.length == 0) return 'so hungry...';
    if (!words.isEmpty) return words.join(' ');
    

    避免使用带有函数字面量的Iterable.forEach()

    在Dart中,如果你想遍历一个序列,惯用的方法是使用循环。

    for (var person in people) {
    ...
    }
    不推荐如下写法:
    people.forEach((person) {
    ...
    

    });

    不要使用List.from(),除非打算更改结果的类型

    //给定一个迭代,有两种明显的方法可以生成包含相同元素的新列表
    var copy1 = iterable.toList();
    var copy2 = List.from(iterable);
    //明显的区别是第一个比较短。重要的区别是第一个保留了原始对象的类型参数
    // Creates a List<int>:
    var iterable = [1, 2, 3];
    // Prints "List<int>":
    print(iterable.toList().runtimeType);
    // Creates a List<int>:
    var iterable = [1, 2, 3];
    // Prints "List<dynamic>":
    print(List.from(iterable).runtimeType);
    

    参数的使用
    使用=将命名参数与其默认值分割开

    //为了与可选的位置参数保持一致,使用“=”。
    void insert(Object item, {int at = 0}) { ... }
    //不推荐如下写法:
    void insert(Object item, {int at: 0}) { ... }
    //如果参数是可选的,但没有给它一个默认值,则语言隐式地使用null作为默认值,因此不需要编写它
    void error([String message]) {
    stderr.write(message ?? '\n');
    }
    //不推荐如下写法:
    void error([String message = null]) {
    stderr.write(message ?? '\n');
    }
    

    变量
    不要显式地将变量初始化为空

    //在Dart中,未显式初始化的变量或字段自动被初始化为null。不要多余赋值null
    int _nextId;
    class LazyId {
    int _id;
    int get id {
    if (_nextId == null) _nextId = 0;
    if (_id == null) _id = _nextId++;
    return _id;
    }
    }
    //不推荐如下写法:
    int _nextId = null;
    class LazyId {
    int _id = null;
    int get id {
    if (_nextId == null) _nextId = 0;
    if (_id == null) _id = _nextId++;
    return _id;
    }
    }
    

    避免储存你能计算的东西

    //在设计类时,您通常希望将多个视图公开到相同的底层状态。通常你会看到在构造函数中计算所有视图的代码,然后存储它们:
    class Circle {
    num radius;
    num area;
    num circumference;
    Circle(num radius)
    : radius = radius,
    area = pi * radius * radius,
    circumference = pi * 2.0 * radius;
    }
    
    //如上代码问题:浪费内存 缓存的问题是无效——如何知道何时缓存过期需要重新计算?
    //推荐的写法如下:
    class Circle {
    num radius;
    Circle(this.radius);
    num get area => pi * radius * radius;
    num get circumference => pi * 2.0 * radius;
    }
    

    类成员
    优先使用final字段来创建只读属性

    尤其对于 StatelessWidget

    构造函数

    尽可能使用初始化的形式

    不推荐如下写法:
    class Point {
    num x, y;
    Point(num x, num y) {
    this.x = x;
    this.y = y;
    }
    }
    推荐如下写法:
    class Point {
    num x, y;
    Point(this.x, this.y);
    }
    

    不要使用new

    //Dart使new 关键字可选
    //推荐写法:
    Widget build(BuildContext context) {
        return Row(
            children: [
                RaisedButton(
                    child: Text('Increment'),
                ),
                Text('Click!'),
                ],
            );
        }
    //不推荐如下写法:
    Widget build(BuildContext context) {
    return new Row(
        children: [
            new RaisedButton(
                child: new Text('Increment'),
                            ),
            new Text('Click!'),
                ],
            );
        }
    

    相关文章

      网友评论

          本文标题:Flutter 命名规范

          本文链接:https://www.haomeiwen.com/subject/grscqktx.html