Dart入门(一)变量、函数、运算符、分支与循环

时间:2019-11-22
本文章向大家介绍Dart入门(一)变量、函数、运算符、分支与循环,主要包括Dart入门(一)变量、函数、运算符、分支与循环使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

 Dart语言——45分钟快速入门(上)

支持顶级方法(即不与类绑定的方法,如上的 main 方法),以及绑定类和实例的方法(分别对应静态方法和实例方法),而且还支持方法嵌套(同 Python 和 JS)。

支持顶级变量,以及在类中定义的变量(如静态变量和实例变量)。

变量

// 类型推断,使用var定义的变量不能改变数据类型
var name = 'Bob';
// 显示指定类型
String name = 'Bob';
//dynamicObject 可改变数据类型
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有三个方法,setNamesetAgesave,则可如下调用

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