Flutter 编写规范

2021-09-23  本文已影响0人  Derrick_P

缘起

代码对研发团队的重要性不言而喻。代码规范作为一个研发团队的核心基因,怎样在团队中高效传承是一个挑战。多人开发的团队中,每个人都有自己的喜好。代码管理应该避免出现“破窗效应”。一个人把代码写烂了,后面的同学照着写都烂了。正所谓,无规矩不成方圆。基础代码的表达,不追求绝对的对与错,追求的是在风格上的尽可能统一。

代码风格

驼峰

   class SliderMenu { ... }
   class HttpRequest { ... }

   typedef Predicate = bool Function<T>(T value);
   library peg_parser.source_scanner;

   import 'file_system.dart';
   import 'slider_menu.dart';

不推荐如下写法:

 library pegparser.SourceScanner;

 import 'file-system.dart';
 import 'SliderMenu.dart';
 const pi = 3.14;
 const defaultTimeout = 1000;
 final urlScheme = RegExp('^([a-z]+):');

 class Dice {
    static final numberGenerator = Random();
  }
 defaultTimeout

不推荐如下写法:

 kDefaultTimeout
 ChangeNotifierProvider({
    Key? key,
    required Create<T> create,
    bool? lazy,
    TransitionBuilder? builder,
    Widget? child,
  }) 
BaseOptions options =  BaseOptions(
        connectTimeout: 10 * 1000,
        receiveTimeout: 10 * 1000,
        sendTimeout: 10 * 1000,
        contentType: contentType);

不推荐使用

BaseOptions options = new BaseOptions(
        connectTimeout: 10 * 1000,
        receiveTimeout: 10 * 1000,
        sendTimeout: 10 * 1000,
        contentType: contentType);

排序

import顺序按照先dart引用,再package引用,再相对引用方式分模块。每个“部分”应该用空行分隔。

     import 'dart:async';
     import 'dart:html';

     import 'package:bar/bar.dart';
     import 'package:foo/foo.dart';
 import 'package:bar/bar.dart';
 import 'package:foo/foo.dart';
  
 import 'package:my_package/util.dart';
  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';

格式化

这样做可以避免悬浮的else问题

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

一个if语句没有else子句,其中整个if语句和then主体都适合一行。在这种情况下,如果你喜欢的话,你可以去掉大括号

  if (arg == null) return defaultValue;

如果流程体超出了一行需要分划请使用大括号:

  if (overflowChars != other.overflowChars) {
    return overflowChars < other.overflowChars;
  }

不推荐如下写法:

  if (overflowChars != other.overflowChars)
    return overflowChars < other.overflowChars;

注释

除非是区分大小写的标识符,否则第一个单词要大写。以句号结尾(或“!”或“?”)。对于所有的注释都是如此:doc注释、内联内容,甚至TODOs。即使是一个句子片段。

  greet(name) {
    // Assume we have a valid name.
    print('Hi, $name!');
  }

不推荐如下写法:

  greet(name) {
    /* Assume we have a valid name. */
    print('Hi, $name!');
  }

可以使用块注释(/…/)临时注释掉一段代码,但是所有其他注释都应该使用//

减少歧义

  final bool autofocus;
  final String obscuringCharacter;
  final bool obscureText;
  final bool autocorrect;

一个变量或者方法如果重写了,请明确加上override注解。一个变量如果确定是const变量,请加上const关键字。一个变量如果没有再被赋值,请定义成final。坚持最小化表达,有如下几点收益:

  1. 最小化变量状态表达能精准刻画变量状态

2.最小化变量状态是指用最严格的属性描述变量。例如一个变量从之前的多处赋值,改为一处赋值。那么变量其实自带了final的隐形属性。最小化状态表达要求必须加上final关键字,而不是推断是final。因为一旦加上final关键字,后续在赋值就会报错。这能减少不必要的理解成本,最大限度避免变量状态的隐形改变。
提升代码性能
3.增加的final const关键字能让编译器做更多优化,提升代码的整体性能。

代码质量

上一篇下一篇

猜你喜欢

热点阅读