Dart语言基础之基本数据类型

原文:https://www.dartlang.org/guides/language/language-tour

Dart基本数据类型

  • num
  • string
  • boolean
  • list(array)
  • set
  • map
  • run
  • symbol

你可以用文字初始化这些对象。例如:'this is a string'是一个string文字,true是一个布尔文字。

在Dart中每个变量都指向一个对象(一个类的实例),你通常可以用构造函数来初始化变量。一些内置类型有它们自己的构造函数。例如:你可以用Map()来创建一个map。
Dart 数字有两种类型:
int:
整型值不大于64bit,这取决于平台。再Dart VM上,int的范围时-263 to 263 - 1,Dart 编译成JavaScript int的范围是 -253 to 253 - 1

double:
双精度浮点数字,由IEEE 754定义。

intdouble都是num的子类型,num包括基本运算符如:+ - / *,abs(),ceil(),floor()和其他方法。位运算符例如>>被定义在int类中。
下面是定义一个整型变量:

var x=1;
var hex=0xDEADBEFF;

如果一个数字包含小数点,它就是一个double类型,下面是定义一个double变量:

var y=1.1;
var exponents=1.42e5;

Dart 2.1中,整型变量会自动转换成double:

double z=1;//在Dart2.1之前这样定义会发生错误

下面是怎么将string变成一个数字,反之亦然:

//string->int
var one=int.parse('1');
var onPointOne=double.parse('1.1');

//int->string
String oneAsString=1.toString();

//double->string
String piAsString=3.14159.toStringAsFixed(2);
assert(piAsString=='3.14');

整型变量位运算举例:

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

文字数字是编译时常量。许多算术表达式也是编译时常量,只要它们的操作数是编译时常量。

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

字符串

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

你可以用${表达式}把一个值的表达式放在一个字符串中。如果这个表达式是一个标识符,一可以省略{},可以用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.""";

你可以用一个r前缀来创建一个“raw”字符串:

var s = r'In a raw string, not even \n gets special treatment.';

文字字符串是编译时常量,只要他们的内插值表达式是编译时常量:

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

布尔

为了表示boolean值,Dart有个叫bool的类型。只有truefalse是bool类型,它们都是编译时常量。

Dart的类型安全是指,你不能用if (nonbooleanValue)或者assert (nonbooleanValue),取而代之的是,明确的检查值:

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

列表

可能每个编程语言最共同的集合就是array,或者对象的有序组。在Dart中数组是List。

var list = [1, 2, 3];

创建一个编译时常量的list,在它的list文字前面加上const

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

集合

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.

添加:

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);

To create a set that’s a compile-time constant, add const before the set literal:

final constantSet = const {
  'fluorine',
  'chlorine',
  'bromine',
  'iodine',
  'astatine',
};
// constantSet.add('helium'); // Uncommenting this causes an error.

Maps

var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};

var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

用构造函数创建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';

Dart2 可以在创建对象时省略new
To create a map that’s a compile-time constant, add const before the map literal:

final constantMap = const {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

// constantMap[2] = 'Helium'; // Uncommenting this causes an error.

Runes

在Dart中runes是UTF-32字符串。

符号(Symbols)

一个Symbol对象代表一个操作符或者一个Dart程序中声明的标识符. 你可能永远都不会使用符号, 但它们对于通过名称引用标识符的API非常有用,because minification changes identifier names but not identifier symbols.

为了获得一个符号或标识符,使用符号文字,仅需在 # 后边跟标识符:

#radix
#bar

符号文字是编译时常量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容