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);
}
网友评论