Dart语言基础(一)


Dart语言特性

  • 一切皆为对象,在Dart语言中所有变量类型都是对象,null也是对象,函数也是对象,所有对象都继承自Object。
  • Dart是强类型语言,但是变量类型声明是可选的,Dart可以推断出变量的类型。
  • Dart支持泛型类型,类似java的泛型。
  • 函数支持嵌套。
  • 不支持public,protected和private关键字,在Dart语言中,可以通过下划线(_)开头命名来表示私有的,反之就是公开的。

一、变量

变量定义

通过var定义并初始化变量

var name = 'ABC';

Dart语言是强类型语言,虽然这里没有指定变量类型,但Dart编译器可以通过首次初始化推断变量的类型。

String name = 'ABC'; //我们也可以直接定义String类型并初始化

变量默认值

因为在Dart语言中一切皆为对象,所以在定义变量时,未初始化的值都是null

int sum;  //这里的sum的默认值是null

二、常量

在Dart中的const 和 final 都可以用来定义一个不可变的常量

final name = 'Jack'; 
final String secondName = 'Rose'; //同样的可以指定或不指定数据类型
const age = 18;

final和const的区别就是在编译的时候const的值就已经确定了,而final不一定,可能需要运行的时候才能确定值。

final x =new DataTime.now(); //将x变量的值,初始化为当前时间,x的值只有在运行的时候才能确定

三、数据类型

Dart 支持以下数据类型:

  • 数字(number)
  • 字符串(string)
  • 布尔值(boolean)
  • 列表(list)
  • 集合(set)
  • 映射(map)
  • 符文(rune)
  • 符号(Symbol)

数字类型

Dart中数字类型有2种类型:

  • 整数:整数表示没有小数的的数值,使用int关键字表示。
  • 双精确度:Dart中表示64位浮点数,使用double关键字表示。
var x = 123;
var y = 1.199;

从Dart2.1开始,必要时整数会自动转换为双精确度:

double z = 10; //相当于double z = 10.0; 在2.1之前是报错的

字符串

Dart 中字符串是一组 UTF-16 单元序列,符文用于表示UTF-32单元序列。用String关键字表示字符串,可以使用单引号或双引号来创建字符串。

var s1 = 'abcd';
var s2 = "ABCD";
//若是使用的是双引号,能够内嵌单引号
//固然,若是使用的是单引号,能够内嵌双引号,不然须要“\”转义
//var s3 = ‘It\’s ok!’;
var s3 = "It's ok!";

Dart允许你使用+号进行字符串的拼接。

String str = 'hello ' + 'world!';

可以使用${expression}将表达式的值放在字符串中。

String str = 'null';
String newStr = '这是${str}';
print('This is $str');

以下是字符串和数字之间相互转换的方式。

// String转int
var a = int.parse('1');
print(a == 1);
 
// String转double
var b = double.parse('1.1');
print(b == 1.1);


// int转String
var c = 1.toString();
print(c == '1');

// double转String
var d = 3.14159.toStringAsFixed(2);
print(d == '3.14');

Dart允许使用带有单引号或双引号的三引号创建多行字符串(保留缩进格式)。

var s1 = '''
    这是多行字
    字符串s1。
''';
print(s1);

var s2 = """
    这是多行字
    字符串s2。
""";
print(s2);

布尔值

Dart中可以使用bool关键字来表示布尔类型

var isTrue = true;
bool isFalse = false;

列表

在Dart中,使用List对象来表示数组。

// 初始就赋值了,限定了类型
// var list1 = <int>[1,2,3];
var list1 = [1,2,3]; 
List<int> list2 = [4,5,6];
print(list1.length); // 3
print(list1[1] == 2);
list1[1] = 1;
print(list1[1] == 1);

Dart2.3引入了扩展运算符(…)和空值感知运算符(…?),他提供了一种将多个元素插入集合的简洁方法。
例如,使用扩展运算符将列表的所有元素插入另一个列表:

var list1 = [1,2,3];
var list2 = [0,...list1];
print(list2); // [0,1,2,3]

如果扩展运算符右侧的表达式可能为null,则可以通过使用支持null的扩展运算符来避免异常:

var list1;
var list2 = [0,...?list1];
assert(list2.length == 1);

Dart2.3还引入了if和collection的集合,使用它在if条件和for循环构建集合。
下面是一个使用集合的示例,如果要创建一个包含三个或四个项目的列表:

// nav的长度可能是三个或者四个
var nav = [
    'Aa',
    'Bb',
    'Cc',
    if(isTrueOrFalse) 'Dd'
    ];

这是一个使用集合来操作列表项目,然后将他们添加到另一个列表中的示例:

var listOfInts = [1,2,3];
var listOfStrings = [
    '#0',
    for(var i in listOfInts) '#$i'
    ];
print(listOfStrings); // [#0,#!,#2,#3]

集合

Dart中的Set是无序的且唯一想的集合。

var set = {11,22,33,44};

创建一个空集合,需要赋上类型参数,否则就不是创建Set而是Map了。

// 两种方式都可以创建空集合
var set = <String>{};
Set<String> set2 = {};
//  var set = {};  这不是创建空Set,而是创建一个Map

部分使用方式:

var set = <String>{};
var set2 = {'Aa','Bb','Cc'};
//添加元素
set.add('Dd');
set.addAll(set2);
print(set.length);

映射

通常Map是关联键和值的对象,键和值都可以是任意类型的对象,每个键只出现一次,但可以多次使用相同的值。

var map = {
   1:'Aa',
   2:'Bb',
   3:'Cc'
};

var map2 = Map();
map2[1] = 'Aa';
map2[2] = 'Bb';
map2[3] = 'Cc';
print(map2.length); // 3

符文

在Dart中,Runes用来表示字符串中的UTF-32的编码字符。
Unicode 定义了一个全球的书写系统编码, 系统中使用的所有字母,数字和符号都对应唯一的数值编码。 由于 Dart 字符串是一系列 UTF-16 编码单元, 因此要在字符串中表示32位 Unicode 值需要特殊语法支持。

表示 Unicode 编码的常用方法是, \uXXXX, 这里 XXXX 是一个4位的16进制数。 例如,心形符号 (♥) 是 \u2665。 对于特殊的非 4 个数值的情况, 把编码值放到大括号中即可。 例如,emoji 的笑脸 (�) 是 \u{1f600}。

var clapping = '\u{lf44f}';

Runes input = new Runes(
      '\u2665 \u{lf605} \u{lf60e} \u{lf596} \u{lf44d}'
);
print(new String.fromCharCodes(input));

运算符

在Dart中,加减乘运算基本相同,但唯独除法时要单独注意下。

print(5 / 2); // 结果为2.5
print(5 ~/ 2); //结果为2

级联运算符

级联运算符(…)可用于通过对象发出一系列调用。

class Student{
   void study() {
      print('study');
   }
   void play() {
      print('play');
   }
}

void main() {
   new Student()
   ..study()
   ..play();
}

类型判定符

  • as:将对象强制转换为特定类型
  • is:类型判定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值