首页 > 其他分享 >dart effective-设计

dart effective-设计

时间:2022-12-08 15:37:09浏览次数:37  
标签:... effective List list dart 参数 var 设计 class

1.命名

对同一个事物使用相同的名称表示

 

除非缩写比未缩写的术语更加普遍,否则不要用缩写

 

优先把描述性强的词语方法最后

pageCount
buildRectangles
IOStream
HttpRequest

考虑把代码读取来像句子一样流畅

// "If errors is empty..."
if (errors.isEmpty) ...

// "Hey, subscription, cancel!"
subscription.cancel();

// "Get the monsters where the monster has claws."
monsters.where((monster) => monster.hasClaws);

在非布尔或者变量上,优先使用名词

list.length
context.lineWidth

在布尔值等变量上,优先使用动词

if (window.closeable) ...  // Adjective.
if (window.canClose) ... // Verb.

布尔值的命名参数,不使用动词更加易读

Isolate.spawn(entryPoint, message, paused: false);
var copy = List.from(elements, growable: true);
var regExp = RegExp(pattern, caseSensitive: false);

为布尔值命名一个正的逻辑,双重否等不容易理解

//好
if (socket.isConnected && database.hasData) {
socket.write(database.read());
}
//坏
if (!socket.isDisconnected && !database.isEmpty) {
socket.write(database.read());
}

 主要目的是动作时,用动词

list.add("element");
queue.removeFirst();
window.refresh();

主要目的是结果时,用名词

var element = list.elementAt(3);
var first = list.firstWhere(test);
var char = string.codeUnitAt(4);

 如果您想引起对函数或方法的注意,请给该成员一个描述该工作的动词短语名称

var table = database.downloadData();
var packageVersions = packageGraph.solveConstraints();

 复制到新对象 使用to__()

list.toSet();
stackTrace.toString();
dateTime.toLocal();

复制到新对象使用as__()

var map = table.asMap();
var list = bytes.asFloat32List();
var future = subscription.asFuture();

避免函数中描述参数

//好
list.add(element);
map.remove(key);
//坏
list.addElement(element)
map.removeKey(key)

类型要遵守助记符约定

//E对于集合中的元素类型:
class IterableBase<E> {}
class List<E> {}
class HashSet<E> {}
class RedBlackTree<E> {}
//K以及关联集合中V的键和值类型:
class Map<K, V> {}
class Multimap<K, V> {}
class MapEntry<K, V> {}
//R用于用作函数或类的方法的返回类型的类型,不常见,但有时会出现在typedef中以及实现访问者模式的类中:
abstract class ExpressionVisitor<R> {
R visitBinary(BinaryExpression node);
R visitLiteral(LiteralExpression node);
R visitUnary(UnaryExpression node);
}
//请对具有单个类型参数且泛型类型使其含义显而易见的泛型使用T,S和U。这里有多个字母,以允许嵌套而不遮盖周围的名称。例如:
class Future<T> {
Future<S> then<S>(FutureOr<S> onValue(T value)) => ...
}
//如果以上情况都不适合,则可以使用另一个单字母助记符名称或描述性名称:
class Graph<N, E> {
final List<N> nodes = [];
final List<E> edges = [];
}
class Graph<Node, Edge> {
final List<Node> nodes = [];
final List<Edge> edges = [];
}

 

2.库

优先将生命设置为私有

考虑在同一个库中声明多个类

 

3.类和混合

 

4.构造函数

 

5.成员

 

6.类型

 

7.参数

  函数参数是bool时,使用命名参数可以易读

Task.oneShot();
Task.repeating();
ListBox(scroll: true, showScrollbars: true);
Button(ButtonState.enabled);

如果用户可能想省略较早的参数,请避免使用可选的位置参数。

String.fromCharCodes(Iterable<int> charCodes, [int start = 0, int end]);

避免接受强制性参数,该参数接受特殊的“无参数”值

var rest = string.substring(start);//好
var rest = string.substring(start, null);//坏

不要使用包含开始和包含结束参数来接受范围

使用起始和长度

[0, 1, 2, 3].sublist(1, 3) // [1, 2]
'abcd'.substring(1, 3) // 'bc'

 

8.相等

 



标签:...,effective,List,list,dart,参数,var,设计,class
From: https://blog.51cto.com/u_13854953/5922264

相关文章

  • dart 库
    导入库导入内置库import'dart:html';  拆分成多个库 a.dartpartof"./sum.dart";classA{staticinta=10;}b.dartpartof"./sum.dart";classB{staticintb......
  • dart Metadata-元数据
    相当于java里的注解,C#里的特性, Metadatelibrarytodo;classTodo{finalStringwho;finalStringwhat;constTodo(this.who,this.what);} @Todo('seth','maket......
  • dart Typedefs
    目前Typedefs只能赋值函数,未来可能有其他类型//定义一个别名typedefFu=intFunction(inta,intb);classA{//生命一个别名类型Fuf;A(this.f);}main(List<Strin......
  • 如何为管理者设计 360 评估调查题目?
    宣布360评估通常会使管理人员不稳定。同事、下属、管理层甚至客户和供应商通过预先制定的问卷来反馈。360评估可以采用多种形式:从50到300多个问题,例如使用开放式或......
  • 元宇宙的设计面临着什么样的问题和挑战?
     元宇宙中涉及到的商机确实是巨大的。娱乐业、游戏业、出版业,甚至快餐和奢侈品牌行业都在尝试从预估的8000亿美元的市场中分一杯羹。但其实,目前我们才刚刚开始接触Web3领域......
  • 性能测试混合业务场景按比例设计
    已知从生产环境中统计出的接口比例如下所示:接口接口比例接口140%接口220%接口330%接口410%场景一:以上接口无上下依赖关系,设计出容量场景接口1......
  • PSD丨2023兔年新年祝福书法字标设计素材合集
    2023元旦越来越近了,即将迎来的崭新的兔年,素材君整理了264款兔年字体设计素材合集,包含260+数字体、兔年形象字体、兔年书法祝福字体,提供PSD格式,非矢量路径免抠素材。源文件......
  • [附源码]Python计算机毕业设计Django疫情防控管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • [附源码]Python计算机毕业设计Django新冠疫苗接种预约系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • [附源码]Python计算机毕业设计Django心理健康系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......