一、入口方法

三种注释方式

  1. mian(){
  2. // 有返回值
  3. /// 有返回值
  4. /* 有返回值 */
  5. }
  6. void mian(){
  7. // 无返回值
  8. }

二、数据类型

  • 常量
  • 变量

    • 数值: int double
    • 字符串: String
    • 布尔值: Boolean
    • 列表: List
    • 集合: Map

      2.3.1 类型转换

  • Number & String

    NOTICE:

    • is 关键字 判断类型
    • isEmpty 方法 判断字符串是否为空
    • 报错界限:
      • int.parse(…)只支持整数,结果也是整数; double.parse(…)支持浮点数和整数,结果都是浮点数.
      • double.parse和int.parse不支持解析空串.
  1. String sNum = '123';
  2. var myNum1 = int.parse(sNum);
  3. print(myNum1 is int);
  4. var myNum2 = double.parse(sNum);
  5. print(myNum2 is int);
  6. var str = myNum1.toString();
  7. print(str is String);
  8. print(str.isEmpty);

三、变量

2.1 变量声明(常量)

强类型语言,可不预先定义变量类型,自动根据变量进行类型推导 类型推导:推断类型之后不能赋值其他类型的数据结构!!!

  1. var str1 = '类型推导方式'; // var 关键字
  2. String str2 = '类型校验方式';
  3. // 两种方式不能混用
  4. // var a int = 5; // 报错
  1. /* const & final 两大区别 */
  2. // 1. 赋值时机
  3. const a = 'const 在声明时必须赋值';
  4. const String a = '加类型'; // ???
  5. final b = 'final 可以在声明的时候不赋值,但此后仅能赋值一次';
  6. final String b = '加类型'; // ???
  7. // 2. 赋值拥有返回值的方法 (方法 === 运行时)
  8. /*
  9. final不仅有const编译时常量的特性,最重要还是运行时常量;
  10. 而且final时惰性初始化的,即在运行时第一次使用到它的时候才初始化。(程序走到他这儿才开始初始化)
  11. */
  12. const c = new DateTime.now(); // 报错
  13. 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:

  1. 取整 是dart区别于其他语言的特点之一
  2. 防空赋值 ??= : 如果等式左边为空,则把右边赋值给左边;否则不进行任何操作。
  3. 0/0=NaN 当被除数为0时返回NaN.
  4. 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 条件表达式

  1. // if else
  2. // switch case
  3. // 三目
  4. // ?? 运算符: 如果左侧是空值,则优先右边的值;反之优先左边的值。(js内也支持的)
  5. var a;
  6. var b = a ?? 10; // 10 (当a是空值)
  7. var c = 11;
  8. var d = c ?? 10; // 11 (当a不为空)

3.5 ++ & —

int a = 11; NOTICE: 自增自减与赋值运算结合分情况

  1. // 不赋值时没有区别,都是自增自减1
  2. a++; a--; ++a; --a;
  3. // 赋值时:
  4. var b = a++; // 写在后面先赋值后运算
  5. var b = a--; // ret: b=11;a=10;
  6. var b = ++a; // 写在前面先运算后赋值
  7. var b = --a; // ret: b=10;a=10;

五、控制流语句

4.1 for循环

  1. for(var i=0; i<5; i++) {}
  2. for(var i=5; i>0; i--) {}
  3. List aList = [1, 2, 3, 4, 5];
  4. for(var i=0; i<aList.length; i++) {}
  5. for(var i=aList.length; i>0; i--) {}
  6. List aLists = [[1,2,3],[4,5,6]];
  7. for(var i=0; i<aLists.length; i++) {
  8. for(var j=0; j<aLists[i].length; j++) {
  9. print(aLists[i][j])
  10. }
  11. }

4.2 while & do…while

NOTICE:

  • 循环条件中使用的变量必须经过初始化
  • 循环体中,必须有结束循环的条件,否则将造成死循环
  • do..while 的while循环条件之后必须带分号;
  1. // while是先判断循环条件,再执行循环体
  2. int i = 1;
  3. while(i<=10) {
  4. print(i, '满足小于等于10的循环条件');
  5. i++; // 循环体中结束循环的条件
  6. }
  7. // do...while 是先执行循环体,再判断循环条件 [即当循环条件不满足,也会先执行循环体一次]
  8. do {
  9. print(i, '满足小于等于10的循环条件');
  10. i++; // 循环体中结束循环的条件
  11. } while(i<=10);

4.3 break & continue

image.png