如何写好Flutter代码?(1)

  • 变量/函数状态坚持最小化表达 【annotate_overrides,prefer_const_declarations,prefer_final_fields】

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

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

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

  • 提升代码性能

增加的final const关键字能让编译器做更多优化,提升代码的整体性能。

  风格一致

多人开发的团队中,每个人都有自己的喜好。代码管理应该避免出现“破窗效应”。一个人把代码写烂了,后面的同学照着写都烂了。正所谓,无规矩不成方圆。基础代码的表达,不追求绝对的对与错,追求的是在风格上的尽可能统一。这里有太多典型例子:

  1. 命名规范大体遵循驼峰的方式【camel_case_types,non_constant_identifier_names,constant_identifier_names 】

  2. 控制流中尽量使用大括号【curly_braces_in_flow_control_structures】

  3. import顺序按照先dart引用,再package引用,再相对引用方式分模块,模块内引用按字母表排序【directives_ordering】

  4. required 关键字标识的变量请排到前面 【always_put_required_named_parameters_first】

  5. flutter布局中优先使用SizedBox而不是Container【sized_box_for_whitespace】

  6. flutter颜色定义使用8位16进制整数标识颜色值【use_full_hex_values_for_flutter_colors】

  7. flutter widget在构造函数中加入key参数【use_key_in_widget_constructors】

这里的每一条都不具有非这样不可的理由。但是在闲鱼写代码就必须遵循这个规范。不为别的就为了风格的统一,为了提升团队同学业务轮转的效率。

  代码质量

Linter检查的另一个重要的目标是发现潜在的代码缺陷。这对代码管理来说就更为重要了,因为这直接关系到稳定性的大局。稳定性是开发人员的底线,再怎么小心也不为过。同样举几个典型的例子:

1.避免给void赋值 【void_checks】

2.变量比较之前先判断类型 【unrelated_type_equality_checks】

3.避免catch 空实现【empty_catches】

4.避免使用隐形类型传递 【avoid_shadowing_type_parameters】

5.避免await 非future对象 【await_only_futures】

6.集合的remove需要传递符合集合的类型的参数【list_remove_unrelated_type】

如果这些问题代码带到生产环境,轻者出现exception,重则功能不可用。防患于未然,在代码最开始编写阶段,就及时处理这些问题,代码才能更健壮。

  维护成本

效率对一个团队固然很重要,但是追求一时的效率,而不顾及代码生命周期内整体的效率是非常短视的行为。我们今天越发关注代码在后期的维护成本。基于此,文档&注释的重要性正越发凸显出来。一个好的注释,能省下很多的答疑,很多的试错,很多的猜疑。不断引导大家写并维护文档及注释,是闲鱼代码规范明确的目标。举几个明确的例子:

1.Deprecated函数需要给出明确的注释[provide_deprecation_message]

2.注释中的变量引用,符合引用的约束[comment_references]

  规则权威

闲鱼团队Liner规则的制定,不是一家之言。邀请了团队所有同学参与到规则的制定过程。一个规则的权威性来源于所有执行者发自内心的认同。举一个典型例子:

在讨论标准格式化的时候,团队同学集中讨论了一个规则:

【- lines_longer_than_80_chars # 争议规则,每行长度不超过80字符】

大家认同统一格式化代码风格的重要性。大家争议的焦点是:80字符在很多高分辨率显示器上太短了。这会导致很多不必要的换行,降低代码阅读体验。我们听取了开发同学反馈,把该条规范去掉了。改为统一android studio配置来执行。最终标准是12号字,一行最多160字符。

写在最后

当然仅仅做到上面的部分,仅仅是万里长征的第一步。基础代码规范这件事,我们并不追求规则的多,而是更在意规则实际的效率收益。规则制定的过程中,我们听取了开发同学真实的反馈,删除了很多并不必要的规则。简单,高效,并不为了规范而规范是我们核心的目标。当然最终确定的规则,要尽最大努力保证执行。目前我们正在积极建设更完善的CI体系,将规范规则化。通过持续快速检测,实时给使用者反馈,降低规范落地的成本。代码是研发团队的核心资产,需要我们共同守护。

附录

上面介绍的规则细节,如果有不清楚的,可以在下面的链接中找到更详细的解释。

linter-rules[7]

  闲鱼核心Liner规则

附上闲鱼的核心Liner规则,给大家一点参考。

命名

ee969a01b9ed9c7a508a08d405d97b85.png

排序

eba32ab18334cb9e2ed4b6b47933bbce.png

格式化

1aa24dfc1feef182dc28e168ae7e4b9a.png

评论

3bd60d3a19b3b0cb54d9ba4ff9bcf92d.png

库使用

22f4ee3d5ce12cba6482fa70079c5949.png

NULL

9162b0092cdb69aff6ae26868a4b0030.png

字符串

5c56522735fbd43e4f27c07eaf46add6.png

集合

6443b0318a252e87b3a517b58bf81e9f.png

函数

18c681410d44f78d061c0c815c131c21.png

成员变量

7a14cb68f86eab25cd18164baa8b0b0f.png

构造函数

cb1afdf43744eb5039c08d60333ff0c0.png

异常处理

d70c1b3293ee2f13ba448b2ffbcd23f9.png

Mixin

b343d73c1455c8d74d8905600d937298.png

类型

aa3d1fd118d73c0ef3ecd39cf579b6ef.png

参数

361fbb5d5e13ac8f325993c5924f849c.png

质量

6c40e4da8b329aafb041e41538b8d5db.png

Core集合融合部分

b3e8b9db7b4e3b6db56f0f000c3c25ae.png

Recommended 集合融合部分

f2d4246e0dc6bcc2907bbc31600534ae.png

Flutter 集合融合部分

b5b7bab5234778a5dece9c88bb3ec839.png

其他规则融合部分

b930b21837365de118c1cc145795abd0.png

Reference

[1] effective_dart: https://pub.dev/packages/effective_dart

[2] effective_dart: https://pub.dev/packages/effective_dart

[3] pedantic: https://pub.dev/packages/pedantic

[4] flutter_lints: https://pub.dev/packages/flutter_lints

[5] pub.dev: https://pub.dev/

[6] lints: https://pub.dev/packages/lints

[7] linter-rules: https://dart.dev/tools/linter-rules#lints

✿  拓展阅读

1b3ae88f3bedaccd4b69e0930d8662eb.png

8b1ef63eb11b9dbda89a9f811658bc54.png

作者|****意境

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

[外链图片转存中…(img-4k39g3Ju-1712393134415)]

七大模块学习资料:如NDK模块开发、Android框架体系架构…

[外链图片转存中…(img-86Y6KCxB-1712393134415)]

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值