一、入口方法
三种注释方式
mian(){
// 有返回值
/// 有返回值
/* 有返回值 */
}
void mian(){
// 无返回值
}
二、数据类型
- 常量
变量
Number & String
NOTICE:
- is 关键字 判断类型
- isEmpty 方法 判断字符串是否为空
- 报错界限:
- int.parse(…)只支持整数,结果也是整数; double.parse(…)支持浮点数和整数,结果都是浮点数.
- double.parse和int.parse不支持解析空串.
String sNum = '123';
var myNum1 = int.parse(sNum);
print(myNum1 is int);
var myNum2 = double.parse(sNum);
print(myNum2 is int);
var str = myNum1.toString();
print(str is String);
print(str.isEmpty);
三、变量
2.1 变量声明(常量)
强类型语言,可不预先定义变量类型,自动根据变量进行类型推导 类型推导:推断类型之后不能赋值其他类型的数据结构!!!
var str1 = '类型推导方式'; // var 关键字
String str2 = '类型校验方式';
// 两种方式不能混用
// var a int = 5; // 报错
/* const & final 两大区别 */
// 1. 赋值时机
const a = 'const 在声明时必须赋值';
const String a = '加类型'; // ???
final b = 'final 可以在声明的时候不赋值,但此后仅能赋值一次';
final String b = '加类型'; // ???
// 2. 赋值拥有返回值的方法 (方法 === 运行时)
/*
final不仅有const编译时常量的特性,最重要还是运行时常量;
而且final时惰性初始化的,即在运行时第一次使用到它的时候才初始化。(程序走到他这儿才开始初始化)
*/
const c = new DateTime.now(); // 报错
final d = new DateTime.now(); // 2021.03.28 17:48:55.966122 (当前时间为)
2.2 命名规则
- 由字母、下划线、美元、和数字组成;
- 开头不能是数字;
不能是保留字和关键字
var const final void main is String … 、if else …
区分大小写;
- 见名思意:变量使用名词、方法使用动词;
四、运算符
3.1 算术运算符 & 赋值运算符
int a = 11; int b = 5;
加 | + | (a + b) -> 16 | 分割 | 加等 | += | a+=2 -> a=a+2 = 13 | 复合 赋值 运算 符 |
---|---|---|---|---|---|---|---|
减 | - | (a - b) -> 6 | 线 | 减等 | -= | a-=2 -> a=a-2 = 9 | |
乘 | * | (a * b) -> 55 | 线 | 乘等 | *= | a=2 -> a=a2 = 22 | |
除 | / | (a / b) -> 2.2 | 线 | 除等 | /= | a/=2 -> a=a/2 = 5.5 | |
取余 | % | (a % b) -> 1 | 线 | 余等 | %= | a%=2 -> a=a%2 = 1 | |
取整 | ~/ | (a ~/ b) -> 2 | 线 | 取整再等 | ~/= | a~/=2 -> a=a~/2 = 1 | |
线 | 普通赋值 | = | int c = a+b; | 基础赋值 运算符 |
|||
线 | 防空赋值 | ??= | int c; c??=10; -> c=10 |
NOTICE:
- 取整 是dart区别于其他语言的特点之一
- 防空赋值
??=
: 如果等式左边为空,则把右边赋值给左边;否则不进行任何操作。0/0=NaN
当被除数为0时返回NaN.- isNaN 方法 判断是否为NaN.
3.2 关系运算符(返回布尔值)
int a = 11; int b = 5;
等于 | == | (a == b) -> false |
---|---|---|
不等于 | != | (a != b) -> true |
大于 | > | (a > b) -> true |
小于 | < | (a < b) -> false |
大于等于 | >= | (a >= b) -> true |
小于等于 | <= | (a <= b) -> false |
3.3 逻辑运算符
int flag = true; int ret = false;
取反 | ! | !a -> false |
---|---|---|
并且(全为true则值为true) | && | (a && b) -> false |
或者(全为false则值为false) | || | (a || b) -> true |
3.4 条件表达式
// if else
// switch case
// 三目
// ?? 运算符: 如果左侧是空值,则优先右边的值;反之优先左边的值。(js内也支持的)
var a;
var b = a ?? 10; // 10 (当a是空值)
var c = 11;
var d = c ?? 10; // 11 (当a不为空)
3.5 ++ & —
int a = 11; NOTICE: 自增自减与赋值运算结合分情况
// 不赋值时没有区别,都是自增自减1
a++; a--; ++a; --a;
// 赋值时:
var b = a++; // 写在后面先赋值后运算
var b = a--; // ret: b=11;a=10;
var b = ++a; // 写在前面先运算后赋值
var b = --a; // ret: b=10;a=10;
五、控制流语句
4.1 for循环
for(var i=0; i<5; i++) {}
for(var i=5; i>0; i--) {}
List aList = [1, 2, 3, 4, 5];
for(var i=0; i<aList.length; i++) {}
for(var i=aList.length; i>0; i--) {}
List aLists = [[1,2,3],[4,5,6]];
for(var i=0; i<aLists.length; i++) {
for(var j=0; j<aLists[i].length; j++) {
print(aLists[i][j])
}
}
4.2 while & do…while
NOTICE:
- 循环条件中使用的变量必须经过初始化
- 循环体中,必须有结束循环的条件,否则将造成死循环
- do..while 的while循环条件之后必须带分号;
// while是先判断循环条件,再执行循环体
int i = 1;
while(i<=10) {
print(i, '满足小于等于10的循环条件');
i++; // 循环体中结束循环的条件
}
// do...while 是先执行循环体,再判断循环条件 [即当循环条件不满足,也会先执行循环体一次]
do {
print(i, '满足小于等于10的循环条件');
i++; // 循环体中结束循环的条件
} while(i<=10);