Dart基础知识

2019-03-31  本文已影响0人  JeromeWang

Dart重要的概念

变量和基本数据类型

    var name = '张三' ;
    //如果对象不限于单一类型(没有明确的类型),请使用Object或dynamic关键字
    Object name = '张三';
    dynamic name = '李四';
  1. 被final或者const修饰的变量,变量类型可以省略。
//可以省略String这个类型声明
final name1 = "张三";
//final String name1  = "张三"; 
  1. 被 final 或 const 修饰的变量无法再去修改其值。
  final name1 = "张三";
    // 这样写,编译器提示:a final variable, can only be set once
    // 一个final变量,只能被设置一次。
    //name1 = "zhangsan";
  1. 注意:flnal 或者 const 不能和 var 同时使用
  2. 常量如果是类级别的,请使用 static const
基本数据类型

Dart语言常用的基本数据类型包括:Number、String、Boolean、List、Map。

(1)Number类型

Number是数字类型的父类,包含如下两个类。

(2)String字符串类型
 // 直接把相邻字符串写在一起,就可以连接字符串了。
  String connectionStr1 =  '字符串''连接''字符串。';
  print(connectionStr1);// 字符串连接字符串。
 // 用+把相邻字符串连接起来。
  String connectionStr2 =  '字符串'+ '连接'+ '字符串。';
  print(connectionStr2);// 字符串连接字符串。
String multiLineStr = ''' 
  这是用单引号创建的
  多行字符串。
  ''' ;
(3)Boolean类型

Dart是强bool类型检查,只有bool类型的值是true才被认为是true。有的语言里0是false,大于0是true。

//下面的代码编译错误,因为name是个字符串
    var name = '张三' ;
    if(name){
     print("你的姓名是:"+name);
    }
(4)List类型

在Dart语言中,具有一系列相同类型的数据称为List对象。可以直接打印list的元素,list也是一个对象。list里面的元素必须保持类型一致,不一致就会报错。list的角标从0开始。

List list = [1, 3, 5];
print(list);// 输出结果  [1, 3, 5]
(5)Map类型

Dart中的map是将键和值相关联的对象。键和值都可以是任何类型的对象。key必须是唯一的。

Map week = {'Monday': '星期一', 'Tuseday': '星期二', 'Wednesday': '星期三',
'Thursday': '星期四', 'Friday': '星期五', 'Saturday': '星期六', 'Sunday': '星期日'};
print(week);
  Map week = new Map();
  week['Monday'] = '星期一';
  week['Tuseday'] = '星期二';
  week['Wednesday'] = '星期三';
  week['Thursday'] = '星期四';
  week['Friday'] = '星期五';
  week['Saturday'] = '星期六';
  week['Sunday'] = '星期日';
  print(week);
final fruitConstantMap = const {2: 'apple',10: 'orange',18: 'banana'};
// 打印结果{second: 腾讯, fifth: 百度, 5: 华为}

函数

1.可选参数

将参数使用中括号[]括起来,用来表明是可选位置参数。

2.参数默认值

如果参数指定了默认值,当不传入值时,函授里会使用这个默认值。通常参数的默认值是null。

3.函授返回值特点

运算符

1.算术运算符

/ 除法,结果为浮点型
~/ 除法,返回一个整数值的除法。
% 取余,除法剩下的余数。

  var result = 7/2;
  print(result); // 结果是:3.5
  var result1 = 15~/7;
  print(result1); // 结果是:2
  var result2 = 15%7;
  print(result2); // 结果是:1

Dart还支持前缀和后缀递增和递减运算符

操作符 含义
++var var = var+1 表达式的值为var+1
var++ var = var+1 表达式的值为var
--var var = var-1 表达式的值为var-1
var-- var = var-1 表达式的值为var
var a , b;
a = 0;
b = ++a; //在b获得其值之前自增a
assert(a == b); // 1==1

a = 0;
b = a++; //在b获得其值之后自增a
assert(a != b); // 1!=0

a = 0;
b = --a; //在b获得其值之前自减a
assert(a == b); // -1==-1

a = 0;
b = a--; //在b获得其值之后自减a
assert(a != b); // -1!=0
2.类型操作符

as、is与is!操作符在运行时用于检测类型。

操作符 含义
as 类型转换
is 当对象是相应的类型时返回true
is! 当对象不是相应的类型时返回true
if(user is User){
   user.name = "zhangsan";
}
//如果确认user是User的实例,可以通过as直接简化上面的代码
(user as User).name = "zhangsan";
3.赋值操作符

可以使用= 运算符赋值。要仅在变量为null时赋值,使用??==运算符。

//如果b为空,则将值赋给b,否则,b保持不变
b ??==value;
3.级联符号..

级联符号用两个点(..)表示,可以对同一个对象上进行一系列操作。 除了函数调用之外,还可以访问同一对象上的字段。其实相当于java的链式调用。

String s = (new StringBuffer()
        ..write('test1 ')
        ..write('test2 ')
        ..write('test3 ')
        ..write('test4 ')
        ..write('test5'))
      .toString();
print(s); // test1 test2 test3 test4 test5

异常处理

Dart代码可以抛出并捕获异常。与Java相比,Dart的所有异常都是未经检查的异常。方法不声明它们可能引发哪些异常,也不需要捕获任何异常。
Dart提供了Exception和Error 类型,以及许多预定义的子类型。当然,您可以定义自己的Exception。但是,Dart程序可以抛出任何非空对象。
1. throw抛出异常

throw FormatException('抛出一个FormatException异常');
//你也可以抛出任意对象
throw '格式不正确!';

2. 捕获异常try catch
要处理可能抛出多种类型异常的代码,可以指定多个catch子句。与抛出对象的类型匹配的第一个catch子句处理异常。如果catch子句未指定类型,则该子句可以处理任何类型的抛出对象。可以使用on或catch或两者兼而有之。使用on时需要指定异常类型。使用catch时,你的异常处理程序需要异常对象。

try {
     //...
} on OutOfLlamasException {
  // A specific exception
    // ...
} on Exception catch (e) {
  // Anything else that is an exception
  print('Unknown exception: $e');
} catch (e) {
  // No specified type, handles all
  print('Something really unknown: $e');
}

可以指定一个或两个参数来捕获异常。第一个是抛出的异常,第二个是堆栈跟踪(StackTrace对象)。

try {
  // ···
} on Exception catch (e) {
  print('Exception details:\n $e');
} catch (e, s) {
  print('Exception details:\n $e');
  print('Stack trace:\n $s');
}

要部分处理异常,同时允许它传递,请使用rethrow关键字。

  try {
    dynamic foo = true;
    print(foo++); // 运行时异常
  } catch (e) {
    rethrow; // 允许调用者查看exception.
  }

3.finally
无论是否抛出异常,要确保某些代码运行,请使用finally子句。如果没有catch子句匹配该异常,则在finally子句运行后传递异常。

try {
  // ···
} on Exception catch (e) {
  print('Exception details:\n $e');
} catch (e, s) {
  print('Exception details:\n $e');
  print('Stack trace:\n $s');
} finally {
  print('Do some thing:\n');
}

库的使用

1.引用库
通过import语句在一个库中引用另一个库的文件,注意以下事项:

2.指定一个库的前缀
当引用的库拥有相互冲突的名字,可以为其中一个或几个指定不一样的前缀。

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

Element element = new Element();//使用lib1中的Element
lib2.Element element2 = new lib2.Element();//使用lib2中的Element

3.引用库的一部分
如果只需要使用库的一部分内容,可以有选择的引用,使用如下关键字

//导入foo
import 'package:lib1/lib1.dart' show foo;
//处理foo导入其他所有内容
import 'package:lib2/lib2.dart' hide foo;
上一篇 下一篇

猜你喜欢

热点阅读