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表示列表中的元素只能是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<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(); //清除全部键值对.
无序集合,元素不重复,重复添加同一个值是没效果的。
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.
var n = 10;if (n > 5) { print('大于5');} else if(n == 5) { print('等于5');} else { print('小于5');}
for (var i = 0; i < 5; i++) {print('num: $i'); // 注意,用'$i'引用变量,放在''里面.}
#### while循环
while(n > 0) { print('数字是: $n'); n--;}
do {print('数字是:$n');n--;} while (n > 0);
break彻底终止循环,continue终止本次循环,接着下一个循环.
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}