Dart入门(一)变量、函数、运算符、分支与循环
支持顶级方法(即不与类绑定的方法,如上的 main
方法),以及绑定类和实例的方法(分别对应静态方法和实例方法),而且还支持方法嵌套(同 Python 和 JS)。
支持顶级变量,以及在类中定义的变量(如静态变量和实例变量)。
变量
// 类型推断,使用var定义的变量不能改变数据类型 var name = 'Bob'; // 显示指定类型 String name = 'Bob'; //dynamic
或Object
可改变数据类型 dynamic name = 'Bob';
Dart 中声明时如果未初始化,会被自动初始化为null
:
final 与 const
// 此时不能在对列表a进行更新操作 var a = const [1, 2]; // a[0] = [4]; 会报错 // foo 与baz不能修改 var foo = const []; const baz = []; foo = [1, 2, 3]; baz = [42]; //报错 Error: Constant variables can't be assigned a value.
字符串
"+"操作符拼接字符串
插值表达式"${}"
数组
用...或者...?避免空异常
var list = []; var list2 = [0, ...list]; print(list2);
通过 if
或者 for
条件运算符来插入元素:
var nav = [ 'Home', 'Furniture', 'Plants', if (promoActive) 'Outlet' ]; var listOfInts = [1, 2, 3]; var listOfStrings = [ '#0', for (var i in listOfInts) '#$i' ];
Map
var gifts = Map(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'; gifts['fifth'] = 'golden rings'; // 或者通过以下方式 var gifts = { // Key: Value 'first': 'partridge', 'second': 'turtledoves', 'fifth': 'golden rings' };
Set是无序的唯一项的集合
var names = <String>{}; Set<String> names = {}; // This works, too. // var names = {}; // Creates a map, not a set.
函数
void say() { print('123'); } // 该写法与以上有同样效果 void say2() => print('123');
函数同样支持类型推断
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null; // 与下面的效果一样 isNoble(atomicNumber) => _nobleGases[atomicNumber] != null;
可选参数
命名可选参数:用 { } 来指定,@required标注不想被忽略
位置可选参数:用 [ ] 来指定
命名可选参数
与位置可选参数
的区别,前者中的参数与顺序无关,无需按顺序传参,且传参数时需使用冒号;后者与顺序相关,传参必须依照顺序
命名可选参数
void main() { hello(name: 'Tom'); } void hello({@required String name='Jack', int age=18}) { print('Hello, my name is $name, i\'m $age years old.'); }
位置可选参数
void main() { sayHello('Tom', 19); } void sayHello(String name, int age, [String hobby = null]) { var result = 'Hello, my name is $name, i\'m $age years old'; if (hobby != null) { result += ', my bobby is $hobby.'; } print(result); }
匿名函数
add(num x, num y){ return x + y; } print(add(18,12)); // 30
箭头函数与匿名函数相结合
var loge = (msg) => Logger.print(Logger.Error, msg); void main() { loge("there has some errors"); }
Dart 中 list 就提供了匿名函数 —— forEach
,如:
var list = ['apples', 'bananas', 'oranges']; list.forEach((item) { print('${list.indexOf(item)}: $item'); });
运算符
+
、-
、*
、/
、%、 三目运算 condition ? expr1 : expr2
~/ 整除
is 是对象指定类型
is! 不是对象指定类型
as类型转换
(p as Person).name = 'Bruce';
非空条件判断符??
expr1 ?? expr2 如果expr1的值不等于
null
,则返回其值; 否则执行表达式expr2并返回其结果。
级联运算符:假如类Person有三个方法,setName
、setAge
、save
,则可如下调用
new Person()..setName("Bob")..setAge(20)..save();
条件成员访问符?.
它和.
类似,但是运算符左边的对象不能为null
,否则返回null
,若对象不为null
,则返回对象本身。
// list1默认值为null List list1; print(list1?.length); // null List list2 = []; print(list2?.length); // 0
分支与循环
if
条件分支
if(i < 0){ print('i < 0'); }else if(i == 0){ print('i = 0'); } else { print('i > 0'); }
switch
条件分支
String command = 'OPEN'; switch (command) { case 'CLOSED': break; case 'OPEN': break; default: print('Default'); }
基本循环
// for循环 for(int i = 0; i < 9; i++) { print(i); } // while循环 while(true){ //do something } // do-while循环 do{ //do something } while(true);
特有循环
var myList = ['Java','JavaScript','Dart']; // for...in...循环,类似Java中的增强for for (var it in myList ){ print(it); } // forEach循环。其参数为一个Function对象,这里传入一个匿名函数 myList.forEach((var it){ print(it); }); // 可以使用匿名箭头函数简写 myList.forEach((it) => print(it));
使用循环遍历Map
var myMap = { 'zhangsan':'201901', 'lisi':'201902', 'wangwu':'201902' }; // forEach遍历Map myMap.forEach((k, v) => print("$k : $v")); // 根据键获取值来遍历。通过keys返回Map中所有键的集合 for(var k in myMap.keys){ print("$k : ${myMap[k]}"); }
原文地址:https://www.cnblogs.com/liyonghua/p/11907005.html
- 数据挖掘工程师:如何通过百度地图API抓取建筑物周边位置、房价信息
- crontab导致CPU异常的问题分析及处理(r3笔记第100天)
- 短信接口被恶意调用(二)肉搏战-阻止恶意请求
- 关于首屏时间采集自动化的解决方案
- javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites
- 一次数据库无法登陆的问题及排查 (r3笔记第99天)
- 用深度学习keras的cnn做图像识别分类,准确率达97%
- 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本
- job处理缓慢的性能问题排查与分析(r4笔记第18天)
- 京东商品评论情感分析:数据采集与词向量构造方法
- springboot开启access_log日志输出
- 完美的执行计划导致的性能问题(r4笔记第17天)
- 解决Docker容器时区及时间不同步的问题
- 移动端测试方案--sptt
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 轻松掌握Git开发(五)远程库的基本操作
- GitHub竟然还有这些骚操作,赶紧学起来
- leetcode之单词规律
- 内存溢出及解决方案
- 3分钟短文:Laravel控制器用法光速入门
- Linux查看ip的实例方法
- Ubuntu18.04通过源码安装Odoo14的教程
- Linux系统中SSH服务基于key认证实践的过程
- linux防墙iptables详细介绍、配置方法与案例
- Linux unlink函数和删除文件的操作方法
- Linux seq命令的使用详解
- Linux运维工具Supervisor的安装使用(进程管理工具)
- Linux whatis命令的使用方法
- Linux tr命令的使用方法
- Linux man命令的具体使用