Built-in types-基本数据类型(Dart中文文档)

Easter27 等级 284 0 0
  • 初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组。如有错误望指正。
    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 
 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个字符,需要用大括号分割,比如 (😆) is u{1f600}。

Symbols (看不太懂)

A Symbol object represents an operator or identifier declared in a Dart program. You might never need to use symbols, but they’re invaluable for APIs that refer to identifiers by name, because minification changes identifier names but not identifier symbols.

To get the symbol for an identifier, use a symbol literal, which is just # followed by the identifier:

#radix
#bar 

Symbol literals are compile-time constants.

收藏
评论区

相关推荐

Dart 基础
Dart 基础 1.类型 dart String int 整数值,其取值通常位于 253 和 253 之间 double 64bit (双精度) 浮点数,符合 IEEE 754 标准。 DateTime Map 是一个键值相关的对象。 Function 可以赋值给变量,也可以当作其他方法的参数。可使用胖箭头。可选位置参
[Dart]Dart语言之旅<一>:简介
我们假定你已经知道如何用另一种语言编程,《Dart语言之旅》将向你展示了如何使用每个主要的Dart特性——从变量和运算符到类和库。 一个基本的Dart程序 下面的代码使用了许多Dart最基本的功能: // Define a function. printNumber(num aNumber) { print('The number is $a
Dart官方文档翻译(一)(Dart之旅)
这篇文章将会向你展示如何使用Dart的每一个知识点,包括变量,操作符,类,类库,但这是在你已经有一个其他语言的编码经验的前提下。 为了学习Dart更多关于Dart的核心类库,请查看A Tour of the Dart Libraries,当你想知道更多语言特征,挺查阅Dart language specification 你可以通过DartPad 来尝试
<Dart基础>Dart简介
Dart基础系列: Dart简介(https://www.jianshu.com/p/c749f40828a5) Dart语法(上)(https://www.jianshu.com/p/6b5689342e24) <基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679) 一、简
Dart基础&gt;Dart语法(上)
Dart基础系列: Dart简介(https://www.jianshu.com/p/c749f40828a5) Dart语法(上)(https://www.jianshu.com/p/6b5689342e24) <基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679) 说明:
Dart基础语法简介
Dart基础系列: Dart简介(https://www.jianshu.com/p/c749f40828a5) Dart语法(上)(https://www.jianshu.com/p/6b5689342e24) <基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679) 一、简
flutter -- dart基础之dart简介和安装
Dart介绍: Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。 Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。 要学Flutter的话我们必须首先得会Dart。 da
Dart教程(一):dart安装
一、安装dart sdk brew tap dartlang/dart brew install dart 二、安装VSCode 去官网下载即可 三、安装dart插件 (https://imghelloworld.osscnbeijing.aliyuncs.com/af7d1de25caf6599a4839b56f4f0d
Flutter/Dart - Dart中一个类实现多个接口 以及Dart中的Mixins
Dart中implements实现多个接口 abstract class A { String name; printA(); } abstract class B { printB(); } class C implements A,B{ @override String name;
【Flutter 实战】Dart语言简介
1.4 Dart语言简介在之前我们已经介绍过Dart语言的相关特性,读者可以翻看一下,如果读者已经熟悉Dart语法,可以跳过本节,如果你还不了解Dart,也不用担心,按照笔者经验,如果你有过其他编程语言经验(尤其是Java和JavaScript)的话会非常容易上手Dart。当然,如果你是iOS开发者,也不用担心,Dart中也有一些与Swift比较相似的特
Dart中的抽象类、多态、以及接口
一、Dart中的抽象类 Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。   1、抽象类通过abstract 关键字来定义   2、Dart中的抽象方法不能用abstract声明
Dart中一个类实现多个接口以及Dart中的 Mixins
一、Dart中一个类实现多个接口 abstract class A{ String name; printA(); } abstract class B{ printB(); } class C implements A,B{
Built-in types-基本数据类型(Dart中文文档)
初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组。如有错误望指正。 Dart语言内置如下数据类型: numbers strings booleans lists (所谓的数组) maps
Flutter - 深入理解Dart虚拟机启动
基于Flutter 1.5,从源码视角来深入剖析引擎启动中的Dart虚拟机启动流程,相关源码目录见文末附录一、概述 1.1 Dart虚拟机概述Dart虚拟机拥有自己的Isolate,完全由虚拟机自己管理的,Flutter引擎也无法直接访问。Dart的UI相关操作,是由Root Isolate通过Dart的C调用,或者是发送消息通知的方式
Dart虚拟机运行原理
一、Dart虚拟机 1.1 引言Dart VM是一种虚拟机,为高级编程语言Dart提供执行环境,但这并意味着Dart在D虚拟机上执行时,总是采用解释执行或者JIT编译。 例如还可以使用Dart虚拟机的AOT管道将Dart代码编译为机器代码,然后运行在Dart虚拟机的精简版环境,称之为预编译运行时(precompiled runtime)环境,该环境不包含任何

热门文章

最新文章