Dart语法快速上手二 《Dart2之变量及基础类型》

变量

  • 变量的定义:dart中万物皆对象,包括java中认为的基础数据类型也是对象,所以我们初始化任何对象的时候,只要没赋值,默认值都是null(null也是对象)

  • 变量的分类(根据声明方式,不再细说有哪些内置类型):

    String str = "Bob"; //显示声明
    var str = "Bob"; // 隐式声明
    Object str = "Bob"; //通用对象声明
    dynamic str = 'Bob'; //动态对象声明,这里dynamic和Object是等价的,二者可 被赋值为其他类型的对象
    final str = "Bob"; //不可变对象
    int value ;
    assert(value == null); 
    

这里需要指出一个不同点,java中成员变量如果是int类型,默认情况下会赋值为0,但是dart中万物皆对象,int类型不赋值的话value的值依然跟其他对象一样是null。

注意:生产代码中将忽略assert()调用。在开发期间,assert(condition)会抛出异常,除非条件为真

常量和Final

如果您从不打算更改变量,请使用final或const,而不是var或类型。最终变量只能设置一次;const变量是编译时常量。(Const变量是隐式最终的。)最终的顶级或类变量在第一次使用时被初始化,对于要成为编译时常量的变量,请使用const。如果const变量在类级别,则将其标记为static const。在声明变量的地方可以通过关键字const将值设置为编译时常量,例如int类型、String字符串类型、const变量以及通过其他变量常量通过算术运算之后的结果也可以作为常量

注意:实例变量可以是final,但不能是const(cost只能表示常量),Final实例变量必须在构造函数体启动之前初始化最终实例变量 - 在变量声明,构造函数参数或构造函数的初始化列表中。

Final变量和Cost常量的声明

 final name = 'Bob'; // Without a type annotation
 final String nickname = 'Bobby';

 const bar = 1000000; // Unit of pressure (dynes/cm2)
 const double atm = 1.01325 * bar; // 这是其他常量算术结果赋值为新的常量

const关键字不仅用于声明常量变量。您还可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以具有常量值。

var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

部分情况下Dart是允许省略const关键字的,比如:


image.png

您可以更改非final,非const变量的值,即使它曾经有一个const值,但是你不能更改一个被声明成const的值,比如:

baz = [2,3,4]; //you can't do like this

内置类型

Dart语言特别支持以下类型:

  • number
  • string
  • boolean
  • list
  • map
  • rune (用于在字符串中表示Unicode字符)
  • symbole

您可以使用文字初始化任何这些特殊类型的对象。
例如,'this is a string'是一个字符串文字,true是一个布尔文字。

因为Dart中的每个变量都是一个对象 、 一个类的实例 -,您通常可以使用构造函数来初始化变量。一些内置类型有自己的构造函数。例如,您可以使Map()构造函数来创建Map

Number

Number类型只有两种形式:int 和 double,比java少多了。

  • int
    整数值不大于64位,具体取决于平台,在Dart VM上,值可以是-263到263 - 1.编译为JavaScript的Dart使用JavaScript编号,允许从-253到253 - 1的值。

  • double 64位(双精度)浮点数,由IEEE 754标准规定。

int和double都是num的子类型。
num类型包括基本运算符,如+, - ,/和*,也是你可以找到abs(),ceil()和floor()以及其他方法的地方。(按位运算符,如>>,在int类中定义。)如果num及其子类型没有您要查找的内容,则dart:math库可能提供你想要的

int 和double可以跟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类型指定传统的按位移位(<<,>>),AND(&)和OR(|)运算符。例如:

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

String

您可以使用$ {expression}将表达式的值放在字符串中。如果表达式是标识符,则可以跳过{}。要获取对应于对象的字符串,Dart调用对象的toString()方法。这点和Koltin很相似

var a = "一"
var b = "个"
print("我是$a个小鸭子");
print('我是${a+b}小鸭子')

你也可以跟java一样中间用+号来连接两个字符串
创建多行字符串的另一种方法:使用带有单引号或双引号的三重引号:

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, not even \n gets special treatment.';
    print(s);

输出结果是:In a raw string, not even \n gets special treatment.
这种把\n换行符直接输出的方法比java中需要一些转换符才能完整输出特定的字符的方法好不少!👍

List

var list = [1, 2, 3]; //初始化的方式
assert(list.length == 3);
assert(list[1] == 2);

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

如果要创建一个常量集合(不可变),可以这样写

var constantList = const [1, 2, 3];

可能有学过java的同学看到[]符号,下意识认为是数组,数组什么特性?长度定义好了就不可变,只能修改里面的元素值啊,但是Dart等于集合了数组和List集合的优势,可以通过一些方法来实现增删改查

     var list = [1,2,3];
    list.add(4);
    print(list.toString());
    list.removeAt(0);
    print(list.toString());
    print(list.contains(2).toString());

    /**
    上面表达式输出的结果为
    [1, 2, 3, 4]
    [2, 3, 4]
   true
  **/

Map

Dart中的map不仅仅跟常规map一样可以通过string类型来做key,他的key可以是任何一个object类型

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';
nobleGases.remove(10); //根据key来移除键值对

注意:您可能希望看到新的Map()而不仅仅是Map()。从Dart 2开始,new关键字是可选的
如果需要创建一个编译期间的常量map,这样做

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

Runes(符号文字)

就是可以通过文字转换成符号表情或者代表特定的文字,截取一段官网代码自行了解


image.png

Symbols(不常用,翻译自官网)

Symbol对象表示在Dart程序中声明的运算符或标识符。您可能永远不需要使用符号,但它们对于按名称引用标识符的API非常有用,因为缩小会更改标识符名称而不会更改标识符符号。要获取标识符的符号,请使用符号文字,它只是#后跟标识符:

# radix
#bar

好了,所有关于变量基础数据类型的知识就介绍到这里了,打字打的😫~~有对下一章节需求的可以留言,再看是否可以快速更新

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

推荐阅读更多精彩内容