Dart语言基础语法概览

发表时间: 2024-04-29 19:14

前言:

为了方便自己回顾,写下笔记,共分三篇:基础篇,面向对象篇和进阶用法篇。

如果你学过JavaScript,那么这也许能方便你快速掌握Dart的基础语法。

简单类型

```dartvar name = "小明"; // 自动推断类型为StringString name = "小明"; // 声明变量时指定类型为String,这里没有"var"String? name = null; //空安全,加"?",name值可以为null。//final,const声明的变量不可变。final title = "todoList";const title = "todoList";// 数字:int a = 1;double b = 2.2;// 字符串/文本类型: //单引号或双引号都行String hello = "world";String hello = 'world';// 布尔类型bool isViper = true;bool isViper = false;

集合类型

list列表

有序的数据集合,元素类型相同。
List表示列表中的元素只能是int类型,List表示列表中的元素只能是String类型,依此类推.List表示元素不限制类型

List<String> names = ['小明','小张', '小王','小白', '小黑'];var list = List<int>.filled(5,0); //创建长度为5的列表,元素都是0List<int> nums = [1,2,3,4,5]; // 或var nums = [1,2,3,4,5];list[0] = 100;  //修改元素print(list[0]);//访问并打印列表元素// **常用的list方法**list.add(1);            //列表末尾加元素"1"list.insert(0,100);     //在索引为0 的位置插入100.list.remove(0);         // 删除值为0的元素, 调用一次删一个.list.removeAt(0);       //删除索引为0 的元素print(list.indexOf(3)); //元素值为3 的索引,没 有就返回-1.list.contains(8);       //是否包含元素 8,返回true/false.list.sort();            //排序,可传入函数自定义排序.

map

无序的键值对集合。

Map<String, String> i18n = {'male':'男性','female':'女性',}// 或// var i18n = {// 'male':'男性',// 'female':'女性',// }print(i18n['male']);                  //访问i18n['male'] = '男生';                 // 修改print(i18n.containsKey('male'));      //是否有此键print(i18n.containsValue('男性'));     //是否有此值i18n.remove('male');                  //移除键值对i18n.addAll({'male':'男性'});          // 把其他Map的键值对添加进i18n.i18n.clear();                         //清除全部键值对.

Set

无序集合,元素不重复,重复添加同一个值是没效果的。

var s = <String>{};             //前面有'<String>',没有就是创建Map了.var s = {'a', 'b', 'c'};        //这样不需要`<String>`.s.add('d');                     // 添加s.remove('d');                  // 删除s.contains('c');                // true/falsevar unionSet = s.union(s2);     //返回新Set,包含s和s2中共有的元素 .var diffSet = s.difference(s2); //返回新Set,包含s中的元素,不包含s2也有的元素.

运算符

算术运算符

int a = 7;          //或 var a = 7;int b = 2;          //或 var b = 2;print(a + b);       // 9print(a - b);       // 5print(a * b);       // 14print(a / b);       //  3.5print(a % b);       // 1 ,得到余数print(a ~/ b);      // 3,得到商

关系运算符,用于比较大小

print(a==b);    //falseprint(a!=b);    // trueprint(a>b);     // trueprint(a>=b);    // trueprint(a<b);     // falseprint(a<=b);    // false

逻辑运算符

 与,或,非

bool a = true;      // var a = true;bool b = false;     // var b = false;print(a &&b );      //falseprint(a || b);      // trueprint(!a);          //false

赋值运算符

=, +=, -=, *=, /=, %=, ~/=

条件运算符

?:(三目运算)和??(空值检测)

var a = 1;var b = null;print(a>0 ? '大于0' : '不大于0');print(b ?? '默认值');       // 如果b为null,返回后面的'默认值'var num = a ??= 0;         //如果a为null,则num值为0.这里a是1,所以num值为1.

类型运算符

print(a is int);    // a是intprint(a is! int);   //a不是int

位运算符

对整数进行二进制位运算

&与
|或
^异或
~非
>> 右移
<<左移

其他运算符

print(name as String);      //把name转成String类型,失败则抛出异常// 级联操作:'..'person..name='小明'..age=30;// person的name属性和age属性分别改成了'小明'和30.

流程控制

if, else if, else

var n = 10;if (n > 5) {  print('大于5');} else if(n == 5) {  print('等于5');} else {  print('小于5');}

for 循环

for (var i = 0; i < 5; i++) {print('num: $i'); // 注意,用'$i'引用变量,放在''里面.}

#### while循环

while(n > 0) {  print('数字是: $n');  n--;}

do while循环

do {print('数字是:$n');n--;} while (n > 0);

break,continue

break彻底终止循环,continue终止本次循环,接着下一个循环.

switch,case

var level = 'A';switch (level) {  case 'A':    print('优秀');    break;  case 'B':    print('良好');    break;  case 'C':    print('及格');    break;  case 'D':    print('不及格');    break;  default:    print('意外情况');}

函数

Dart中的main函数是程序的入口.
Dart程序要运行起来,必须要有main函数.

//  fun.dartvoid main() {  print('hello');}// 直接运行:dart fun.dart,打印出结果.
void hello(String name) {  print('hello, $name');} // 箭头函数式写法:// void hello(String name) => print('hello, $name');void main() {  hello('小明');}

高阶函数:函数可以作为参数传给另一个函数.

int add(int a, int b) => a + b;//Function cb表明cb是一个函数.void  cal(int a, int b, Function cb) {  print(cb(a,b));}

函数闭包

//Function表明返回一个函数.Function calculator(int b) {  return (int a) => b + a;}void main() {  var add = calculator(2);  print(add(3)); //5}