Dart基础学习02--变量及内置类型

Dart中的变量

首先看一个变量的定义和赋值

var name = 'Bob';

在Dart中变量名都是引用,这里的name就是一个指向值为Bob的字符串的引用。

默认值

在Dart中没有初始化的变量都有一个默认值null,哪怕是int型的变量它的初始值也是null,因为在Dart中int也是一个对象。

int lineCount;
assert(lineCount == null);
注意:这里引入一个Dart的重点知识,在Dart中任何可以放入变量中的都属于`对象`,而对象又都是`类`的一个实例。即使是数字,方法,null也都是对象,并且所有的对象都继承自`Object`这个类。

可选类型

在Dart中,可以选择使用静态类型来定义变量,如下:

String name = 'Bob';

这样做的好处有以下几点:

1.变量可以更好的表达你的意图。

2.编辑器或编译器可以通过变量的静态类型来检测代码中未知饿的错误。

final 和 const

如果一个变量不允许改变的话可以使用finalconst关键字来代替var或者其他静态类型。其中final类型的变量只能被赋值一次,而const类型的为编译时常量自然也无法改变其值。

一个用final定义的顶级变量或类成员变量只有在它第一次被使用的时候才会初始化。

final name = 'Bob'; // 也可以写作: final String name = 'Bob';
// name = 'Alice'; // 这一步会报错
注意:final的这种懒惰型初始化方法可以有效的提升程序运行速度。

如果你想要让你的变量是编译时常量的话就可以使用const关键字,但需要注意的是如果这个变量是一个类的成员变量的话就必须要使用static const。原因是如果没有声明一个类的对象事例的话,类的成员变量是不存在的,既然不存在自然就无法将其作为编译时常量了。更近一步说,只有在程序运行且声明了类的对象实例的情况下,其成员变量才是存在的。使用static修饰成员变量的话此变量就与对象实例无关了而可以直接通过类来获得。

const bar = 1000000;       // 压力单位 (dynes/cm2)
const atm = 1.01325 * bar; // 标准大气压

Dart的内置类型

Dart支持的内置数据类型有:数字,字符串,布尔,数组,集合等。

数字类型

Dart提供两种数字类型:

int

整型,范围在 -2^53 to 2^53.

double

64位双精度浮点类型,采用 IEEE 754标准。

int和double都是num的子类,num类型之间的基本操作有+,-,*,/和位操作<<,>>。另外num对象有abs(),ceil(),floor和一些其他的运算方法。如果以上这些方法还满足不了你的话,你可以使用Math库。

下面是一些整形变量的定义:

var x = 1;
var hex = 0xDEADBEEF;
var bigInt = 34653465834652437659238476592374958739845729;

下面是一下双精度型变量的定义:

var y = 1.1;
var exponents = 1.42e5;

你也可以使用下面这些方法将字符串转换为数字类型:

// String -> int
var one = int.parse('1');
assert(one == 1); // String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1); // int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1'); // double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

int类型支持按位操作如<<,>>,&,|,看一下下面几个例子:

assert((3 << 1) == 6);  // 0011 << 1 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((3 | 4) == 7); // 0011 | 0100 == 0111

字符串类型

在Dart中字符串采用utf-16的编码格式。可以使用单引号'或双引号"来创建变量。

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

在Dart中可以使用${expression}作为作为字符串的插值,若expression 只是一个变量标识符的话可以省略{}。

var s = 'string interpolation';

assert('Dart has $s, which is very handy.' ==
'Dart has string interpolation, ' +
'which is very handy.');
assert('That deserves all caps. ' +
'${s.toUpperCase()} is very handy!' ==
'That deserves all caps. ' +
'STRING INTERPOLATION is very handy!');
注意:在Dart中用`==`来判断两个对象是都等效。两个字符串等效的条件是他们包含相同的字符串。

在Dart中可以将几个字符串靠在一起或使用+来连接它们:

var s1 = 'String ' 'concatenation'
" works even over line breaks.";
assert(s1 == 'String concatenation works even over '
'line breaks.'); var s2 = 'The + operator '
+ 'works, as well.';
assert(s2 == 'The + operator works, as well.');

另外还可以使用三个"来定义多行的字符串:

var s1 = '''
You can create
multi-line strings like this one.
'''; var s2 = """This is also a
multi-line string.""";

可以使用r来定义一些原生字符串(转义字符无效):

var s = r"In a raw string, even \n isn't special.";

布尔类型

在Dart中使用bool标识布尔类型。bool类型的只只有truefalse。值得注意的是在Dart中只有true会被当作是正确,而false或者其他数字,null等都会被当作false。

下面这段代码,在Dart中if条件是不成立的。应为name是一个对象。

var name = 'Bob';
if (name) {
// Prints in JavaScript, not in Dart.
print('You have a name!');
}

下面这段代码中的Dart会进入else段,而JavaScript则会进入if段:

if (1) {
print('JS prints this line.');
} else {
print('Dart in production mode prints this line.');
}

数组

在Dart中使用List来表示数组,这个是比较让我们不能接受的一个设计。不多说看具体怎么用吧:

var list = [1, 2, 3];
//List list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

在List中的单位也是从0开始的。

键值集合

在Dart中使用Map来表示键值类集合。其中的键值可以是任何对象且键不能重复。

下面看一下Map的具体用法:

var gifts = {
// Keys Values
'first' : 'partridge',
'second': 'turtledoves',
'fifth' : 'golden rings'
}; var nobleGases = {
// Keys Values
2 : 'helium',
10: 'neon',
18: 'argon',
};

同样可以使用构造方法来定义Map:

var gifts = new Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings'; var nobleGases = new Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

往Map中添加新键值:

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair

Map中检索键所对应的值:

var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
assert(gifts['second'] == null);

获得Map中键值对的个数:

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

从Map中移除键值对:

var nobleGases = {54: 'xenon'};

assert(nobleGases[54] == 'xenon');

// containsKey方法可以用于判断是否包含某个Key
assert(nobleGases.containsKey(54)); nobleGases.remove(54);
assert(!nobleGases.containsKey(54));

Map的更多用法可以参考Maps

所有Dart学习内容和相关源码都会在github上的DartNovel开源项目进行同步,欢迎关注。

Dart基础学习02--变量及内置类型的更多相关文章

  1. Dart基础学习03--方法的使用

    1.本文主要讲一下Dart中的方法是怎么定义的,下面先看一个简单的例子: void printNumber(num number) { print('The number is $number.'); ...

  2. Dart基础学习01--走近Dart

    什么是Dart 在Dart的官网上是这样介绍Dart的: Dart is an open-source, scalable programming language, with robust libr ...

  3. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

  4. T-SQL 基础学习 02

    数据库设计 定义 数据库设计就是将数据库中的数据实体以及这些数据实体之间关系,进行规划和结构化的过程 在需求分析阶段,设计数据库的一般步骤 A. 收集相信 B. 标识实体 C. 标记每个实体需要存储的 ...

  5. Swift开发学习-02 变量和常量

    本教程是笔者在自学IOS/Swift知识的总结,适用于通过对Objictive C编程的运用,并需要了解基于iOS程序的iPhone和iPad的程序员.做一个有bigger的’攻城狮‘,有尊严的工作, ...

  6. python基础学习笔记第二天 内建方法(s t r)

    python的字符串内建函数 str.casefold()将字符串转换成小写,Unicode编码中凡是有对应的小写形式的,都会转换str.center()返回一个原字符串居中,并使用空格填充至长度 w ...

  7. c语言基础学习02

    =============================================================================涉及到的知识点有:include有两种用法.{ ...

  8. Python基础学习之变量赋值

    1.赋值操作符 Python语言中,等号(=)是主要的赋值操作符: >>> aInt=-100 >>> aString='this is a string' > ...

  9. ES6 - 基础学习(3): 变量的解构赋值

    解构赋值概述 1.解构赋值是对赋值运算符的扩展. 2.它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值. 3.代码书写上显得简洁且易读,语义更加清晰明了:而且还方便获取复杂对象中的数据字 ...

随机推荐

  1. Android:实现手势滑动的事件处理方法

            首先得Activity必须实现OnGestureListener接口,该接口提供了关于手势操作的一些方法, onDown方法:onDown是,一旦触摸屏按下,就马上产生onDown事件 ...

  2. LAMP架构二

    安装PHP7 1.查看php配置文件信息(phpinfo),php有两个配置文件开发环境和生产环境 [root@localhost php-5.6.30]# /usr/local/php/bin/ph ...

  3. python-循环while

    while 只要…条件成立,就一直做…. for 循环会在可迭代的序列被穷尽的时候停止,while 则是在条件不成立的时候停止,因此 while 的作用概括成一句话就是:只要…条件成立,就一直做…. ...

  4. CentOS7 安装lua环境(我是在mysql读写分离用的)

    下载地址:http://www.lua.org/download.html 安装方法: 依次执行以下命令: curl -R -O http://www.lua.org/ftp/lua-5.3.1.ta ...

  5. Vivado使用技巧:封装自己设计的IP核

    概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx ...

  6. MooseFS基础和安装

    一.MooseFS简介 1.介绍 MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器单独磁盘或分区上,确保一份数据有多个备份副本.对于访问的客户端或者用户来说, ...

  7. 李洪强iOS开发之iOS工具收集

    李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...

  8. hMailServer之发送附件大小限制

    hMailServer发送附件大小限制有以下几个地方: 1.php配置 参考 .post_max_size = 10M 表单提交最大数据为10M.此项不是限制上传单个文件的大小,而是针对整个表单的提交 ...

  9. 消除^M

    在Linux和windows之间移动文件时,总是会出现在windows下编辑的文件在Linux打开时每一行都显示一个^M,虽然不影响使用,但是却影响美观,于是就想自己实现个小程序来进行转换. 要实现转 ...

  10. 在Linux下搭建git服务器

    http://www.cnblogs.com/dee0912/p/5815267.html 步骤很详细,很受用