• 初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组。如有错误望指正。

    Dart语言内置如下数据类型:
  • numbers
  • strings
  • booleans
  • lists (所谓的数组)
  • maps
  • runes (for expressing Unicode characters in a string)
  • symbols

你可以通过直接赋值指定变量为如上几个基本数据类型,比如,‘this is a string’就是String类型的值,true就是boolean类型的值。

Numbers

Dart numbers类型由两种:

int

整型,值最大不超过64bits,占用内存大小根据各平台VM的实现来定。在DartVM中,值区间为-2的63次方到2的63次-1,在javaScript中,数值区间为-2的53次方到2的53-1次方

double

64位双精度浮点型数据,是按照IEEE 754 标准定义。

int和double都是num型的子类,num型可以支持+, -, /, 和*,还有abs(),ceil(),floor的数学类操作。其中int类型可以支持 >>类似的移位操作。如果num型数据不符合你的要求,可以在dart:math 库中需要其它数值类型。

变量赋值没有小数点时,VM自动类型判断其为int

var x = 1;
var hex = 0xDEADBEEF;

如果变量包含小数点,VM自动类型判断其为double

var y = 1.1;
var exponents = 1.42e5;

从Dart2.1开始,int型在特定条件下自动转为double型,比如下方的写法,但是在Dart2.1之前,如下写法将报错

double z = 1; // Equivalent to double z = 1.0

如下是num和string互相转换的示例:

// 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

数值常量支持二次计算赋值(我感觉要表述的是这个意思

Literal numbers are compile-time constants. Many arithmetic expressions are also compile-time constants, as long as their operands are compile-time constants that evaluate to numbers.)

const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;

Strings

A Dart string is a sequence of UTF-16 code units. You can use either single or double quotes to create a string:

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.";

你可以在字符串中使用${expression}表达式作为动态内容,如果expression可以明确推断,可以去除{}.使用表达式时,表达式关联的对象将调用toString()方法

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!');

注意:两个字符串是否相同,取决是字符串的文本是否相同,并非要求其指向相同的内存地址

你可以通过+号拼接字符串。如果是需要换行形式的字符串,可以用三个单引号或者双引号来定义字符串

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.""";

你可以创建一个raw格式的字符串,正常字符串采用UTF-16字符编码,raw格式采用UTF-32字符编码。(这是本人理解,不知道对不对)

var s = r'In a raw string, not even \n gets special treatment.';
See Runes for details on how to express Unicode characters in a string.

如果字符串是const常量,其中的表达式也应该是字符串常量。

// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string'; // These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3]; const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';

Booleans

boolean类型的值只有两种,分别是true和false,它们是内置常量。

Dart是类型安全的。这样意味者if (nonbooleanValue) ,assert (nonbooleanValue)中的值必须是boolean类型,不能是其它类型,否则编译不通过

// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty); // Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0); // Check for null.
var unicorn;
assert(unicorn == null); // Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

Lists

Dart的List创建写法JavaScript的数组,下面是一个简单例子:

var list = [1, 2, 3];

注意:如果数组定义是,限定了类型,比如限定为int,其添加元素都必须为int,否则会报错

数组的计数采用从0开始,那么数组第一个元素定位就写为list[0],数组最后一个元素定位就协议list[list.length-1]。具体的写法和JavaScript相似。

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

如果数组赋值采用const修饰,数组元素不可修改。

var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.

Maps

map类型由key和value组成,它们可以是任意类型对象,key值是不可重复的,value值可以重复。Dart支持定义一组key/value来创建map对象,类型json的写法。

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

注意:代码分析器会根据key/value值,判断map对象的类型,比如,gifts判定为Map<String,String>,nobleGases判定了Map<int,String>,如果添加其它类型的key/value可能导致编译出错或者运行出错。

你可以通过Map构造器创建Map对象,如下图所示:

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

对已创建的map对象添加数据写法类似JavaScript的写法,具体如下:

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

如果key值在map中不存在,返回null对象

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

你可以使用.length获取map对象的key数量。

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

如果map对象是一个编译常量,不可以对map进行修改。

final constantMap = const {
2: 'helium',
10: 'neon',
18: 'argon',
};
// constantMap[2] = 'Helium'; // Uncommenting this causes an error.

Runes

In Dart, runes are the UTF-32 code points of a string.

在Dart中,runes是UTF-32编码的字符。Unicode对每个字符,数字,标记都定义了一个唯一编码。因为Dart的字符串是UTF-16编码,如果希望表示32位的字符编码,需要特殊写法。一般的unicode编码写法是\uxxxx,xxxx是4个16进制字符。例如, (♥) is \u2665.如果编码是多于或者少于4个字符,需要用大括号分割,比如 (

2.Built-in types-基本数据类型(Dart中文文档)的更多相关文章

  1. 8.Generics 泛型(Dart中文文档)

    这篇翻译的不好 如果你看API文档中的数组篇,你会发现类型一般写成List.<...>的写法表示通用类型的数组(未明确指定数组中的数据类型).通常情况泛型类型用E,T,S,K,V表示. W ...

  2. 1.Variables-变量(Dart中文文档)

    初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组.如有错误望指正. 如下是变量定义和赋值的示例 var name = 'Bob'; 变量存储的是一个引用地址.如上的变量name指向了一个值 ...

  3. 7.Classes-类(Dart中文文档)

    Dart是一个面向对象的语言,同时增加了混入(mixin)继承的特性.对象都是由类初始化生成的,所有的类都由Object对象继承.混入继承意味着尽管所有类(除了Object类)只有一个父类,但是类的代 ...

  4. 6.Exceptions-异常(Dart中文文档)

    异常是用于标识程序发生未知异常.如果异常没有被捕获,If the exception isn't caught, the isolate that raised the exception is su ...

  5. 5.Control flow statements-流程控制(Dart中文文档)

    你可以使用如下流程控制符: if and else for loops while and do-while loops break and continue switch and case asse ...

  6. 4.Operators-操作符(Dart中文文档)

    Dart有如下操作符: Description Operator unary postfix expr++ expr-- () [] . ?. unary prefix -expr !expr ~ex ...

  7. 3.Functions-函数(Dart中文文档)

    初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组.如有错误望指正. Dart是完全的面向对象的语言,甚至函数也是一个Function类型的对象.这意味着函数可以赋值给变量或者作为函数的参数 ...

  8. Flutter 中文文档网站 flutter.cn 正式发布!

    在通常的对 Flutter 介绍中,最耳熟能详的是下面四个特点: 精美 (Beautiful):充分的赋予和发挥设计师的创造力和想象力,让你真正掌控屏幕上的每一个像素. ** 极速 (Fast)**: ...

  9. Apache Spark 2.2.0 中文文档

    Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...

随机推荐

  1. leetCode题解之First Missing Positive

    1.问题描述 2.题解思路 本题的思路是对于数组中每个正的元素,应该将其放到数组中对应的位置,比如元素1 ,应该放在数组的第一个位置.以此类推,最后检查数组中元素值和下标不匹配的情况. 3.代码 in ...

  2. Mac .DS_Store 隐藏文件和清理.DS_Store的方法

    1.清理.DS_Store的方法 输入命令: sudo find / -name ".DS_Store" -depth -exec rm {} \; 2.设置不产生.DS_Stor ...

  3. 【Redis】Linux下Redis安装与redis-desktop-manager使用(无法连接Redis服务器解决方法)

    新手小白开始学习nosql数据库Redis,首先从安装入手. 全文分两部分:Linux下安装redis,可视化工具redis desktop manager的简单使用. 一.安装 下载,解压缩和编译R ...

  4. RHEL7: How to configure a rc-local service

    问题: linux7 /etc/rc.local 不生效: [root@bogon mysql3306]# uname -aLinux bogon 3.10.0-862.el7.x86_64 #1 S ...

  5. AFNetworking2.0简易GET,POST请求封装以及使用

    AFNetworking2.0简易GET,POST请求封装以及使用 AFNetworking不用我赘述其强大性,本人仅仅做了非常简易的封装,解决了有时候请求出错的问题,提供源码给大家. 封装源码库下载 ...

  6. 可以简易设置文字内边距的EdgeInsetsLabel

    可以简易设置文字内边距的EdgeInsetsLabel 最终效果: 源码: EdgeInsetsLabel.h 与 EdgeInsetsLabel.m // // EdgeInsetsLabel.h ...

  7. golang 防知乎 中文验证码 源码

    原创,转载请注明出处! 最开始用图形来模仿文字进行各种角度的倒立和排列,后来切换为文字后,有很多问题.总结如下: 1.程序在画图形和画文字方面不一样,图形的是从原点开始(0,0),而文字则从文字的基线 ...

  8. CVE-2013-2551漏洞成因与利用分析(ISCC2014 PWN6)

    CVE-2013-2551漏洞成因与利用分析 1. 简介 VUPEN在Pwn2Own2013上利用此漏洞攻破了Win8+IE10,5月22日VUPEN在其博客上公布了漏洞的细节.它是一个ORG数组整数 ...

  9. QT里使用Gsoap调用WebService

    错误了很多天,今天终于搞定,并得到了服务器的结果.这里把错误的原因记录下来. 首先是这里,之前一直没有加载进来,所以一直报错 SOURCES += main.cpp\ gsoap/soapClient ...

  10. MyEclipse10.6 myeclipse2013下添加jadClipse反编译插件 .

    jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,下面像大家介绍下如何将jadclipse加入到MyEclipse10.X,9.X,8.X,6.X等各版 ...