首页 > 其他 > 详细

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

时间:2019-11-22 15:53:07      阅读:103      评论:0      收藏:0      [点我收藏+]

 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 cant 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]}");
}

 

 

 

 

 

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

原文:https://www.cnblogs.com/liyonghua/p/11907005.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!