目录

  • Dart变量
    • final和const修饰符
  • Dart的内置类型
    • numbers
    • Strings
    • Booleans
    • Lists(列表)
    • Maps(映射集合)
    • Runes(用于在字符串中表示Unicode字符)
    • Symbols
  • 操作符和控制语句
    • 赋值操作符
    • 条件表达式
    • 取整操作符
    • 级联操作符
    • 安全操作符
    • 循环
    • Switch and Case
  • 函数
    • 函数定义
    • 函数参数
      • 可选命名参数
      • 可选位置参数
      • 默认参数值
    • 匿名函数
  • 异常

Dart变量

声明一个变量,可以用vardynamic以及Object来声明变量,通过这几种类型声明的的变量赋任何类型的值,也可以指定类型String、int来声明变量,未初始化的变量值为null

通过var、Object和dynamic三个类型声明的变量区别:
var:变量在赋值的时候,就决定了它的类型,如图
Object:与java一样Object是所有类的基类,它声明的变量可以是任意类,如图
dynamic:声明这样的变量,不是在编译时候确定类型,而是在运行时确定,dynamic声明的变量和使用与Object一样,关键在于运行时原理不同。

dynamic a;Object b;main() {a = "";b = "";printLengths();}   printLengths() {// no warningprint(a.length);// warning:// The getter 'length' is not defined for the class 'Object'print(b.length);}//变量a不会报错, 变量b编译器会报错

声明变量注意事项:
没有初始化的变量自动获取一个默认值为null(类型为数字int和double变量如果没有初始化其值也是null);
在声明变量的时候,也是可以选择加上具体类型String a = “name”;
对于局部变量,按照Dart代码风格推荐,使用var而不是具体的类型来定义局部变量。
dynamicvar一样都是关键词,声明的变量可以赋值任意对象

dynamicObject区别:
相同之处在于,他们声明的变量可以在后期改变赋值类型。
不同的是,dynamic声明的对象编译器会提供所有可能的组合, 而Object声明的对象只能使用Object的属性与方法, 否则编译器会报错。

final和const修饰符

  • 在声明的变量中,如果不打算更改一个它,可以使用final和const来修饰变量,只能在声明时初始化且不能修改
  • 从上图可以看出,final和const在使用上根本看不出区别,但是final是运行时常量,而const是编译器常量,它的值在编译期就可以确定,编译时常量能够让代码运行的更高效。
  • 在类中可以用final类型来声明变量,但是不可以用const声明,如果想用const在类中声明变量,需要定义为static const静态常量。

Dart的内置类型

dart语言内置有一下几种类型:

  • numbers
  • strings
  • booleans
  • lists (也被称之为 arrays)
  • maps
  • runes (用于在字符串中表示 Unicode 字符)
  • symbols

numbers

在Dart语言中num是数字类型的父类,包括两个子类 int(整数) 和 double(双精度)。
Dart的num(数值)类型,在编码的时候,可以将num当成java中的short 、int与long类使用,如果写的dart代码超过4个字节,那么dart会将其编译成类似java中的long,否侧编译成java中的short或者int。

Strings

  • Dart的字符串是UTF-16编码单元的序列。字符串可以使用单引号或者双引号来创建。单引号和双引号可以嵌套使用,否侧就需要使用\进行转义。在Dart语言中,字符串还可以引用变量和表达式。
  • 和java一样可以使用+操作符来把字符串拼接起来,也可以把多个字符串放到一起来实现同样的功能:
  • 使用三个单引号或者双引号可以创建多行字符串对象。
  • Dart还提供一个r前缀来创建一个“原始raw”的字符串。

Booleans

Dart 语言中有一个名字为 bool 的类型。 只有两个对象是布尔类型的:truefalse 。这一点和Java一样。

Lists(列表)

Dart语言中,数组就是用List表示,也就是列表对象,对List遍历也是和java一样。

Maps(映射集合)

Map:键值对相关的对象。 键和值可以是任何类型的对象。每个键只能出现一次, 而一个值则可以出现多次。与List一样,在 map字面量之前添加 const 关键字,可以定义一个编译时常量的map。

Runes(用于在字符串中表示Unicode字符)

Unicode为世界上所有的书写系统中使用的每个字母,数字和符号定义了唯一的数值。 Dart 字符串是 UTF-16 位代码单元字符序列, 所以在字符串中表达 32位 Unicode 值需要 新的语法。Runes就是UTF-32字符集的string 对象。
表达Unicode代码点的常用方法是\uXXXX,其中XXXX是4位十六进制值。要指定多于或少于4个十六进制数字,需要将值放在大括号中。

Symbols

操作符标识符,可以看作C中的宏。表示编译时的一个常量

操作符和控制语句

java不一样的操作符:
asis、 和 is! 操作符是在运行时判定对象 类型的操作符

操作符 解释
as 类型转换
is 如果对象是指定的类型返回 True
is! 如果对象是指定的类型返回 False

as 操作符把对象转换为特定的类型,但是如果无法完成转换则会抛出一个异常

  num j = 1;//类型转换 不支持 java: (int)强转写法int i = j as int;

is 和Java中的 instanceof 相同

Object o = 1;
if (o is int) {} //像java一样,判断int是否是Object类型
if (o is! int) {} //判断是否不是Object类型

赋值操作符

=+=\=*=这些和java一样,还有一个 ??= 操作符是用来指定值为 null 的时候,将其赋值

   a ??= value; // 如果a是null,则value赋值给 a;// 如果不是null,则a的值保持不变

条件表达式

Dart 有两个特殊的操作符可以用来替代 if-else 语句:

  • condition ? expr1 : expr2
  • 如果 condition 是 true,执行 expr1 (并返回执行的结果); 否则执行 expr2 并返回其结果。
  var a = 1 < 2 ? "1" : "2";print(a);//1<2为ture,打印:1
  • expr1 ?? expr2
  • 如果 expr1 不为null,返回其值; 否则执行 expr2 并返回其结果。
  var a;var b = a ?? "1";print(b); //a为null,打印:1

取整操作符

取整可以使用操作符(~/),如:

int a = 5;
int b = 2;
print(a~/b); //打印 2

级联操作符

级联操作符 (..)可以在同一个对象上连续访问成员变量和调用函数,使用级联操作符可以避免创建临时变量。

  Book()..title = "book_name"..desc = "book_desc"..toString();//StringBuffer write就像是Java的appendsvar sb = StringBuffer();sb..write('String')..write('Buffer');print(sb.toString()); //打印 StringBuffer

安全操作符

Dart语言提供了 ?.操作符。左边的操作对象如果为 null 则返回 null

  //在java中经常出现空指针异常,dart提供?.来进行对象判空处理String a;print(a.length); //空指针异常print(a?.length); //打印 null

循环

forwhiledo-while和java使用一样,dart还有不一样的,如果迭代的对象是容器,那么可以使用forEach或者for-in

for(int i = 0; i<10; i++) {print(i);
}var collection = [0, 1, 2];
collection.forEach((x) => print(x));//forEach的参数为Function
for(var x in collection) {print(x);
}

Switch and Case

与java有一些不同,Swith的参数可以是num,或者String

var fruits = 'APPLE';
switch (fruits) {case 'BANANA':break;case 'APPLE':break;default:print('Default');
}

注意,如果分句的内容为空,想要fall-through(落空),可以省略break,如果分句的内容不为空,那么必须加break,否则抛出异常:

var fruits = 'APPLE';
switch (fruits) {case 'BANANA':print('BANANA');break;case 'APPLE'://产生落空效果,执行下一分句case 'ORANGE':print('ORANGE');break;default:print('Default');
}// 打印 ORANGE

如果想要fall-through,case语句内容又不为空,而又不是按顺序落空,那么可以使用continue和标签:

 var fruits = 'BANANA';switch (fruits) {case 'BANANA':print('BANANA');continue nowClosed; //继续在nowClosed标签上执行.case 'APPLE':print('APPLE');break;nowClosed:case 'ORANGE':print('ORANGE');break;}//打印: BANANA  ORANGE

函数

Dart 是面向对象语言,函数(或方法)也是对象并且具有一种类型 Function。 这意味函数可以赋值给变量,也可以当做其他函数的参数。

函数定义

 int add(int i,int j) {return i + j;}//也可以选择忽略类型(不推荐)add( i, j) {return i + j;}//对于只有一个表达式的方法,可以选择使用缩写语法来定义:add(i, j) => i + j; //在箭头(=>)和分号(;)之间只能使用一个表达式

注意:
函数也是对象,没有指定void来修饰,函数都有返回值。
在没有指定返回值的时候,函数会返回 null
如果在函数指定了void来修饰,则函数真的没有返回值。

函数参数

方法可以有两种类型的参数:必需的和可选的。 必需的参数需要在参数列表前面, 后面再定义可选参数。

可选命名参数

把方法的参数放到 {} 中就变成可选 命名参数。

   String add({int i, String s}) {return "$i $s";}

调用方法的时候,可以使用这种形式 paramName: value 来指定命名参数。例如:


String add({int i, String s}) {return "$i $s";}void main(){//无必须参数print(add()) //打印  null null//选择传递参数print(add(i:1)) //打印  1 null//传入参数与位置无关print(add(i:1, s:"a")) //打印  1 aprint(add(s:"a", i:2)) //打印   1 a
}

可选位置参数

把方法的参数放到 [] 中就变成可选 位置参数,传值时按照参数位置顺序传递。


String add([int i, String s])
{return "$i $s";
}void mian(){// 1赋值给iprint(add(1));  //打印  1 null// 正确 按照顺序赋值print(add(1, "a"));  //打印  1 a//编译错误print(add("a", 1));
}

默认参数值

在定义方法的时候,可选参数可以使用 = 来定义可选参数的默认值。

 //可选命名参数 设置默认参数和调用方式String add(int i, {String s = "a", int j = 0}) {return "i: $i s: $s j: $j";}//调用方式:print(add(1, s:"b"));//打印 i:1 s:b j:0print(add(1, s:"b",j:=2));//打印 i:1  s:b  j:2//可选位置参数 设置默认参数和调用方式String add(int i, [String s = "a", int j = 0]) {return "i: $i s: $s j: $j";}print(add(1,  "b"));//打印 i:1  s:b  j:0print(add(1,  "b", 2));//打印 i:1  s:b  j:2

区别:
可选命名参数:参数与顺序无关,无需按顺序传参,且传参数时需使用冒号。
可选位置参数:参数与顺序相关,传参必须依照顺序。

匿名函数

和java一样,dart语言也是有无名字的函数,称之为匿名方法,也可以称之为 lambda 或者 closure 闭包。

 ([Type] param1, …) { codeBlock; };

如:

var list = ['A', 'B', 'C', 'D', 'E'];
list.forEach((i) {print(list[i]);
});

注意,匿名函数与普通函数基本相同,也有参数列表,函数体,只是省去了函数名而已。

异常

和 Java 不同的是,所有的 Dart 异常是非检查异常。 函数不一定声明了他们所抛出的异常, 并且不要求你捕获任何异常。
Dart 提供了 ExceptionError 类型, 以及一些子类型。你还 可以定义自己的异常类型。但是, Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者Error 的对象。

 //抛出固定类型的异常throw new Exception('This is a Exception');//抛出任意类型的异常throw '这是一个异常';throw 111;

​ 与Java不同之处在于捕获异常部分,Dart中捕获异常同样是使用catch语句,但是Dart中的catch无法指定异常类型。需要结合on来使用,如下:

try {throw 123;
} on int catch(e){//使用 on 指定捕获int类型的异常对象
} catch(e,s){//函数 catch() 可以带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 ( StackTrace 对象)rethrow; //使用 `rethrow` 关键字可以 把捕获的异常给 重新抛出
} finally{//Dart的finally用来执行那些无论异常是否发生都执行的操作,并且在所有匹配到的catch子句之后运行。}

Dart 学习笔记二( 类与构造函数 )
Dart 学习笔记三( 异步编程 )

Dart 学习笔记一(操作符、方法与异常)相关推荐

  1. Windows异常学习笔记(一)—— CPU异常记录模拟异常记录

    Windows异常学习笔记(一)-- CPU异常记录 基础知识 异常的分类 CPU异常 分析中断处理函数 _KiTrap00 分析 CommonDispatchException 总结 软件模拟异常 ...

  2. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记(一):logistic分类  深度学习笔记(二):简单神经网络,后向传播算法及实现  深度学习笔记(三):激活函数和损失函数  深度学习笔记:优化方法总结  深度学习笔记(四):循环神经 ...

  3. 2020-4-5 深度学习笔记17 - 蒙特卡罗方法 3 ( 马尔可夫链蒙特卡罗方法MCMC-先验分布/后验分布/似然估计,马尔可夫性质)

    第十七章 蒙特卡罗方法 中文 英文 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性) 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要 ...

  4. Python学习笔记Task11.魔法方法

    Python学习笔记Task11.魔法方法 魔法方法格式__init__ 1.基本 init(self[,-]) new(cls[,-]) del(self) str(self) repr(self) ...

  5. Laravel学习笔记汇总——Collection方法详解

    ## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...

  6. java学习笔记5--类的方法

    接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...

  7. kotlin学习笔记——重载操作符

    Kotlin中有很多操作符可以使用,具体可以见kotlin学习笔记--操作符_There is a Bug!!!-CSDN博客 Kotlin的一个特点就是可以重载这些操作符,为操作符赋予不同的行为. ...

  8. Python3 基础学习笔记 C09【文件和异常】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  9. Mr.J-- jQuery学习笔记(十)--trigger方法详解

    看本篇文章之前建议先看这篇:Mr.J-- jQuery学习笔记(九)--事件绑定&移除&冒泡 也可以看我的专栏:Mr.J--jQuery学习 定义和用法 trigger() 方法触发被 ...

最新文章

  1. 卡尔曼滤波器中的Q,R
  2. Makefile:160: recipe for target 'all' failed (Ubuntu 16.06 + Opencv3.2)解决办法
  3. SAP Cloud for Customer 技术概述
  4. 退役前的最后的做题记录upd:2019.04.04
  5. matlab gul介绍及串口通信实现,Matlab - GUl介绍及串口通信实现(转)
  6. app 之间发送文件 ios
  7. 目录遍历漏洞_雷神众测漏洞周报 2020.10.052020.10.114
  8. 使用Python实现简单的随机数字抽奖
  9. matlab flightgear,matlab与flightGear联合仿真
  10. 如何配置Java环境
  11. 东南卫视肌肤食品微商套路解析
  12. 使用Python下载电视剧(二):下载ts片段
  13. 【JS】点击文本复制到剪贴板实现
  14. 免费拥有个人云主机——AWS免费EC2套餐
  15. tryhackme--Overpass 2 - Hacked
  16. 怎么隐藏服务器真实IP地址?
  17. 2022年制冷与空调设备运行操作考试练习题及模拟考试
  18. getAttribute()用法
  19. 知识图谱赵军学习笔记(十)--知识问答与对话
  20. WiFi资源管理器:WiFi Explorer Pro for Mac

热门文章

  1. Windows 11安装后,中文输入法无法使用?
  2. Python自然语言处理 | 加工原料文本
  3. 部分ERP软件技术指标分析报告
  4. 铁道大学专版小蝴蝶(安朗客户端修改版)
  5. j2me在线音乐播放器技术分析
  6. 美元汇率对A股市场影响
  7. linux硬盘分区损坏,用Linux拯救损坏的硬盘分区表
  8. 软件设计师-笔记(2)什么是浮点数 ,十进制转浮点数
  9. C语言实现简单电话簿(注释版)
  10. TI2000系列JTAG仿真器XDS220U使用注意事项