Dart 2 (二) 数据类型

数据类型

Dart中支持以下数据类型:

  • Numbers
  • Strings
  • Booleans
  • List(数组)
  • Maps(字典)

Number 类型

int 类型 (范围:-2^63 - 2^63 - 1 ; 打包成JavaScript的范围 -2^53 to 2^53 - 1)

int x = 1;
int hex = 0xDEADBEEF;

double 类型

double y = 1.1;
double exponents = 1.42e5;

以上两种类型都是number的子类,可以参与+ - * /等运算
int 类型的位运算符和传统惯例一致:

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

Strings类型

Dart字符串是UTF-16编码单元的序列。可以使用单引号或双引号创建一个字符串

//字符串赋值的时候,可以使用单引号,也可以使用双引号
 var str1 = "Ok?";

 String str2 = "It's ok!";//类型声明

  //如果使用的是双引号,可以内嵌单引号
  //当然,如果使用的是单引号,可以内嵌双引号,否则需要“\”转义
  //String str2 = ‘It\’s ok!’;
  String str2 = "It's ok!";
  
  //使用三个单引号或者双引号可以多行字符串赋值
  var str3 = """Dart Lang
  Hello,World!""";
  
  //在Dart中,相邻的字符串在编译的时候会自动连接
  //这里发现一个问题,如果多个字符串相邻,中间的字符串不能为空,否则报错
  //但是如果单引号和双引号相邻,即使是空值也不会报错,但相信没有人这么做
  //var name = 'Wang''''Jianfei'; 报错
  var name = 'Wang'' ''Jianfei';
  
  //assert 是语言内置的断言函数,仅在检查模式下有效
  //如果断言失败则程序立刻终止
  assert(name == "Wang Jianfei");
  
/*********连接字符串 插值**********/  
  //还可以使用“$”插入变量的值  
  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.');

  
  //声明原始字符串,直接在字符串前加字符“r”
  //可以避免“\”的转义作用,在正则表达式里特别有用
  print(r"换行符:\n");
  var s = r'In a raw string, not even \n gets special treatment.';
        
  // 以下是常量运行
  const aConstNum = 0;
  const aConstBool = true;
  const aConstString = 'a constant string';

  //上面提到的字符串插值,还可以插入表达式:${}
  print("整型转换为16进制:$hex —> 0x${hex.toRadixString(16).toUpperCase()}");

Number与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');

Booleans类型

为了表示布尔值,Dart使用了一种名为bool的类型。只有两个对象具有bool类型:布尔字面值true和false,它们都是编译时常量。

Dart的类型安全意味着您不能使用if (nonbooleanValue)或assert (nonbooleanValue)之类的代码。相反,应该显式地检查值,如下所示:

// 判断字符串是否为空字符串.
var fullName = '';
assert(fullName.isEmpty);

// 检查是否为0.
var hitPoints = 0;
assert(hitPoints <= 0);

// 检查是否为 null.
var unicorn;
assert(unicorn == null);

// 分母是否为0
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

List 类型

在几乎所有编程语言中,最常见的集合可能是数组或有序对象组。在Dart中,数组是列表对象,所以大多数人只是称它们为列表。例子

var list = [1, 2, 3];

*注意:分析器推断List的类型List<int>。如果您试图向这个List添加非整数对象,分析器或运行时将引发错误。
Lists使用从0开始的索引,其中0是第一个元素和List的索引。list.length - 1是最后一个元素的指数。你可以得到一个List的长度,并引用List元素,就像你在JavaScript:

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

list[1] = 1;
assert(list[1] == 1);

要创建一个编译时常量的List,在[]前面添加const:

var constantList = const [1, 2, 3];
// constantList[1] = 1; // 这样赋值将报错

Map类型(映射)

通常,映射是关联键和值的对象。键和值可以是任何类型的对象。每个键只出现一次,但是您可以多次使用相同的值。Dart提供支持由maps文字和map类型。
这里有几个简单的Map,创建使用map文字:

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

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

*分析器推断gift有type Map<String, String>和nobleGases有type Map<int, String>。如果您试图向map或runtime中添加错误的值类型,分析器或运行时将引发错误。

您还可以使用以下方式创建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';

您可能会用到new Map(),而不仅仅是Map()。在Dart 2中,new是可选的。

向现有的Map添加一个新的键值对

ar gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // 增加一个键值对

从Map中检索值的方法

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

如果您查找的键不在Map中,则返回null:

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

使用.length获得映射中键值对的数量:

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

要创建一个编译时常量的Map,在{}前添加const:

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

更多map的用法:https://www.dartlang.org/guides/libraries/library-tour#maps

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

推荐阅读更多精彩内容

  • 一个基本的Dart程序 下面的代码中使用了很多Dart最基本的特性: 重要概念 所有你能够赋值给一个变量的都是一个...
    YZune阅读 14,504评论 2 14
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/3d927...
    AWeiLoveAndroid阅读 94,014评论 29 307
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 目录 参考资料 语言特性 关键字 变量与常量 数据类型 运算符 operators 控制流程语句 异常 Excep...
    GuoDongW阅读 185,036评论 22 341
  • 时光如逝,流水匆匆,又到了一年大盘点时刻,这一年在某酒店做会计。工作起来驾轻就熟,也算个熟练工了。每天都是...
    提笔忘字2016阅读 202评论 0 0