关于Dart的几点重要说明

  • 在Dart中所有变量都是一个对象,所有对象都是一个类的实例。每个数字,方法,甚至是Null都是对象。所有的对吸纳更都是集成自Object这个类。(这个说法其实是很像Java的)
  • Dart虽然是个强类型语言,但是它可以推测类型。像number就被推测为int.如果你想明确的说不指定类型,可以使用dynamic。(这一点其实已经和高版本的jdk很像了, dynamic 就像是Java中的范型)
  • Dart是支持范型的。比如 List<int> 和List<dynamic>
  • Dart支持高级方法,比如通过一个方法连接到一个类或是对象(static and instance),

    也可以在方法中创建方法
  • Dart支持高级变量,通过一个变量连接到一个类或是对象。(static and instance),instance 变量有时候也被看作是字段或配置参数。
  • 和Java不同的是Dart中不用public,private等权限修饰符,如果想声明为私有,可以使用下划线。
  • Dart中声明一个变量或者方法必须以小写字母或者_来表示。
  • Dart支持三维运算符
  • Dart编译工具会报两种问题: warnings和errors.警告是说你的代码可能有问题,但它不阻止你程序的运行。错误可能是编译时错误也可能时运行时错误。编译时错误根本无法运行,运行时错误会抛异常。

变量

  • 在Dart中因为所有的变量都是个对象,所以初始化的时候默认值都是null.
  • 声明变量的时候,如果使用这种:
var name = 'Bob';

Dart在编译时就会猜测类型为String类型,如果明确指定是String类型,可以这样写:

String name = 'Bob';

如果就是不想指定类型,用这种

dynamic name = 'Bob'

静态变量

final / const

在java中修饰一个变量是常量,也是用final。

被修饰为静态的变量只会被赋值一次。

const 是一种编译时状态,被const修饰的变量被当成静态变量。一个被final修饰的高级变量或者类变量只在第一次使用的时候初始化。所以也没法对final修饰的变量做赋值操作。


关于const的一点说明:

const是可以修饰值的。被const修饰的值赋值给一个非const修饰的变量,是可以对这个变量进行重新赋值的。

比如:

var foo =  const[];
foo = [1,2,3];
foo = [2,3,4];
print(foo); const baz = [1,2];
baz = [1,3,4];
print(baz);

上面这段代码,允许对foo重新赋值,但是baz那里就会报错。

Dart 内置数据类型

  • numbers
  • strings
  • booleans
  • lists(可以看做是数组)
  • sets
  • maps
  • runes(在字符串中表示Unicode字符)
  • symbols(符号)

在Dart中所有的变量都指向对象,所以可以通过构造函数初始化变量。

numbers

  • Dart中的numbers就俩:
int | double

int

Dart 中的int类型数据长度不是固定的64位i,而是和平台有关,在Dart VM中它的取值范围:-263 to 263 - 1

但是如果把它编译成js,范围成了-253 to 253 - 1

这个问题在stackoverflow上有人提问过,不是说一套代码四处运行么。。感觉这里也是个坑。

double

64位双精度浮点数字类型。


ps: int类型的值赋值给double类型的变量的时候会自动类型提升。

double z = 1;
print(z);

输出结果为: 1.0

这种用法在dart2.1前是不支持的。


我是做java的,在java中将字符串转换为数字

Integer.valueof("12");

如果在Dart中将字符串转换成数字,会显得更灵活一些,我直接copy官网demo吧:

var one =  int.parse('1');
print(one == 1); var onePointOne = double.parse('1.1');
print(onePointOne == 1.1); String oneAsStr = 1.toString();
print(oneAsStr == '1');

打印结果都是true

Strings

Dart中字符串是utf-16编码的字符单元。

Dart中字符串有个特点需要记一下:

${expression}
String s =  "abcdefg";
print('dart has $s');

控制台输出的话就是:dart has abcdefg。

可以看到它可以动态拼接字符串,这个是在运行时调用字符串对象的toString()方法。

Booleans

bool flag = true;
bool flag = false;

这个没什么说的。

Lists

一句话,在Dart中数组Array就是List。

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

操作起来和java中数组更像一些。

Sets

Set的特点是不允许有重复元素。

var set = [1,2,3,3];
print(set)

结果只有[1,2,3]

final names =  const  <String>{};
names.add("value");
names.add("value");
names.add("world");
print(names);

上边那段代码会运行报错的。因为对names变量进行了finnal声明。

Maps

和Java中的Map一样,Dart中Map是一个(k,v)结构的对象。

Map gifts = {
null: Null
}; print(gifts);

在java中的map对k,v的是否可以存null有限制,但是在dart中是没有的。

var maps = Map();
maps['id'] = '1';
maps['name'] = 'dart';

可以看到赋值方式和js中是一样的。

Runes

这东西挺有意思的。

可以直接将字符编码输出为表情符号。

Runes input =  new  Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));

Dart Learn Notes 01的更多相关文章

  1. Dart Learn Notes 04

    流程控制语句 流程控制语句的作用就是控制代码的执行流程. if and else var a = 10; if(a > 10){ print('ok'); }else if( 5 < a ...

  2. Dart Learn Notes 03

    操作符 dart 有一套自己定义的操作符: 这里我就不再写了,直接copy一份官网的. 如果有过编程基础,上边展示的操作符应该都不陌生. 算术运算符 加: + 减: - 乘: * 除: / 取余: % ...

  3. Dart Learn Notes 02

    Functions Dart是一门面向对象的语言,所以即便是方法也是一个对象,它的类型是Function. 这就意味着方法可以指向变量,也可以作为方法中的参数供其他方法使用.甚至可以让 一个类作为一个 ...

  4. ORACLE STUDY NOTES 01

    [JSU]LJDragon's Oracle course notes In the first semester, junior year DML数据操纵语言 DML指:update,delete, ...

  5. Linux Academy Learn Notes

    Linux Essentials Certification Globbing ls ?.txt --- ? stands for one character while * means one or ...

  6. Java 8 Learn Notes

    Main reference: [1] http://winterbe.com/posts/2014/03/16/java-8-tutorial/ [2] https://plus.google.co ...

  7. ASP.NET MVC Notes - 01

    inetmgr 进入IIS ViewBag和ViewData在run-time的时候检查错误,View中的用法如下: @*ViewBag传递的是动态对象*@ @foreach (string item ...

  8. OpenGL ES crash notes 01 - Nice to meet you

    这篇笔记完全参照<OpenGL.ES.3.0.Programming.Guide.2nd.Edition>,摘出部分内容只为学习参考. 为什么要用英文:无论是D3D的SDK还是OES的Sp ...

  9. Bash Scripting Learn Notes

    References: [1] http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ 1. Executing programs from a scri ...

随机推荐

  1. Prometheus(二):Prometheus 监控Windows机器

    一.安装wmi-exporter 首先在需要监控的Windows机器上安装wmi_exporter.wmi_exporter下载地址:https://github.com/martinlindhe/w ...

  2. 查看线上日志利器less

    less实用命令 搜索 很多关于命令的解释有点令人困惑,因为前字,forward是向前,before也是前面. 上表示backward 下表示forward 向下搜索 / - 使用一个模式进行搜索,并 ...

  3. SVN命令行笔记

    SVN命令行笔记 近期玩了一下命令行,记录如下. svn info <path> #查看文件,路径信息 svn log <path> #查看文件,路径历史记录 svn st(s ...

  4. Oracle大规模数据快速导出文本文件

    哈喽,前几久,和大家分享过如何把文本数据快速导入数据库(点击即可打开),今天再和大家分享一个小技能,将Oracle数据库中的数据按照指定分割符.指定字段导出至文本文件.首先来张图,看看导出的数据是什么 ...

  5. GCC中,可以使用未声明过的函数

    今天代码中使用了一个函数,这个函数也是自定义的,但是还没来得及声明和定义,可以编译时竟然未报错,网上查了下果然,GCC中可以使用未声明的函数http://bbs.csdn.net/topics/390 ...

  6. python:__name__的使用

    1.python中__name__是什么意思? 很多python的初学者可能都会遇到一个问题:__name__是什么意思? 在刚开始学习python的时候,我们总会看到这样一句代码: if __nam ...

  7. MySQL在渗透测试中的应用

    原文地址:https://xz.aliyun.com/t/400 前言作为一个安全爱好者你不可能不知道MySQL数据库,在渗透过程中,我们也很经常遇到MySQL数据库的环境,本文就带大家了解MySQL ...

  8. Python中xml和dict格式转换

    在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决.最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为js ...

  9. 一次flume exec source采集日志到kafka因为单条日志数据非常大同步失败的踩坑带来的思考

    本次遇到的问题描述,日志采集同步时,当单条日志(日志文件中一行日志)超过2M大小,数据无法采集同步到kafka,分析后,共踩到如下几个坑.1.flume采集时,通过shell+EXEC(tail -F ...

  10. C语言I博客作业07

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-1/homework/9931 我在这个课程的目标 ...