dart规范

2024-06-29  本文已影响0人  koreadragon

1. Flutter,dart介绍。

1.dartpad介绍。

2.命名规范

1.大驼峰:类, 枚举, 类型定义, 以及泛型,都需要使用大写开头的驼峰命名法

class HttpRequest { ... }

typedef Predicate<T> = bool Function(T value);

2.变量名、方法、参数名都应该是小写开头的驼峰命名法
HttpRequest httpRequest;

void align(bool clearItems) {}

const defaultTimeout = 1000;

final urlScheme = RegExp('^([a-z]+):');

3.命名库、包、目录、dart文件都应该是小写加上下划线
library peg_parser/source_scanner;
import 'file_system.dart';
将引用使用as转换的名字也应该是小写下划线

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

import 'dart:math' as Math;
import 'package:angular_components/angular_components'
as angularComponents;
import 'package:js/js.dart' as JS;
4/内部类、方法、参数使用_开头
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;

void _incrementCounter() {
setState(() {
_counter++;
});
}
}

不推荐如下写法:,可能由于某些历史原因,但是现在最新的不推荐了
const PI = 3.14;
const DefaultTimeout = 1000;
final URL_SCHEME = RegExp('^([a-z]+):');

class Dice {
static final NUMBER_GENERATOR = Random();
}

3.所有流控制结构,请使用大括号,这样做可以避免悬浮的else问题

例外::
一个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;

4.运算符及一些语法糖

条件表达式??
exp1 ?? exp2
如果exp1不为空,则使用exp1,否则使用exp2
在dart中 ?? 操作符表示当一个值为空时会给它赋值 ?? 后面的数据
if (optionalThing?.isEnabled) {
print(“Have enabled thing.”);
}
当 optionalThing 为空的时候,上面就会有空指针异常了。
这里说明一下。 ?. 操作符相当于做了一次判空操作,只有当 optionalThing 不为空的时候才会调用 isEnabled 参数,当 optionalThing 为空的话默认返回null,用在if判断句中自然就不行了
// 如果为空的时候你想返回false的话:
optionalThing?.isEnabled ?? false;

// 如果为空的时候你想返回ture的话:
optionalThing?.isEnabled ?? true;

对象操作符 ?.
如果对象为空,则不调用方法,反之则调用,用于避免空指针

对象操作符is 和 is!

级联操作符…
类似builder模式,意思是给当前对象的属性赋值,然后返回当前对象,可以多次使用该操作符来实现属性赋值和方法调用
Person()
..name = "Tom"
..age = 20
..work();
数组中的值拆分,使用...

5..初始化相关

使用 = 给参数设置默认值
void insert(Object item, {int at = 0}) { … }
//早起写法,不推荐
void insert(Object item, {int at: 0}) { … }
DON’T: 不要写没必要的getter 和 setter
class Box {
var contents;
//默认自带settter,getter
}
class Box {
var _contents;
get contents => _contents;
set contents(value) {
除非想要notif()之类的
_contents = value;
}
}
构造函数,尽可能使用简单的初始化形式
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);
}

上一篇 下一篇

猜你喜欢

热点阅读