Dart Learn Notes 01
关于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的更多相关文章
- Dart Learn Notes 04
流程控制语句 流程控制语句的作用就是控制代码的执行流程. if and else var a = 10; if(a > 10){ print('ok'); }else if( 5 < a ...
- Dart Learn Notes 03
操作符 dart 有一套自己定义的操作符: 这里我就不再写了,直接copy一份官网的. 如果有过编程基础,上边展示的操作符应该都不陌生. 算术运算符 加: + 减: - 乘: * 除: / 取余: % ...
- Dart Learn Notes 02
Functions Dart是一门面向对象的语言,所以即便是方法也是一个对象,它的类型是Function. 这就意味着方法可以指向变量,也可以作为方法中的参数供其他方法使用.甚至可以让 一个类作为一个 ...
- ORACLE STUDY NOTES 01
[JSU]LJDragon's Oracle course notes In the first semester, junior year DML数据操纵语言 DML指:update,delete, ...
- Linux Academy Learn Notes
Linux Essentials Certification Globbing ls ?.txt --- ? stands for one character while * means one or ...
- Java 8 Learn Notes
Main reference: [1] http://winterbe.com/posts/2014/03/16/java-8-tutorial/ [2] https://plus.google.co ...
- ASP.NET MVC Notes - 01
inetmgr 进入IIS ViewBag和ViewData在run-time的时候检查错误,View中的用法如下: @*ViewBag传递的是动态对象*@ @foreach (string item ...
- OpenGL ES crash notes 01 - Nice to meet you
这篇笔记完全参照<OpenGL.ES.3.0.Programming.Guide.2nd.Edition>,摘出部分内容只为学习参考. 为什么要用英文:无论是D3D的SDK还是OES的Sp ...
- Bash Scripting Learn Notes
References: [1] http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ 1. Executing programs from a scri ...
随机推荐
- 设计模式(二十二)Command模式
一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录. 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多.每一项想做的工 ...
- GStreamer基础教程12 - 常用命令工具
摘要 GStreamer提供了不同的命令行工具用于快速的查看信息以及验证Pipeline的是否能够正确运行,在平时的开发过程中,我们也优先使用GStreamer的命令行工具验证,再将Pipeline集 ...
- ORM之单表操作
ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...
- SpringCloud 中集成Sentinel+Feign实现服务熔断降级
Sentine 1.背景 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳 ...
- 分类算法之逻辑回归(Logistic Regression
分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就 ...
- 用python实现对元素的长截图
一.目标 浏览网页的时候,看见哪个元素,就能截取哪个元素当图片,不管那个元素有多长 二.所用工具和第三方库 python ,PIL,selenium pycharm 三.代码部分 长截图整体思路: 1 ...
- re模块的基本使用
目录 re模块 常用元字符 特殊构造 贪婪模式 非贪婪模式 re的常用函数 re模块补充 关于re模块必须知道的知识点 re模块 re模块 , 即正则表达式 , 本身是一种小型的.高度专业化的编程语言 ...
- python——inspect模块
inspect模块常用功能 import inspect # 导入inspect模块 inspect.isfunction(fn) # 检测fn是不是函数 inspect.isgenerator((x ...
- PHP更新用户微信信息的方法
PHP更新用户微信信息的方法 大家都知道 授权登录一次 获取后 再登录就会提示已经授权登录 就没办法重新获得用户信息了 这个时候根据openid来获取了请求user/info这个获取ps:必须关注过公 ...
- ctf misc 学习总结大合集
0x00 ext3 linux挂载光盘,可用7zip解压或者notepad搜flag,base64解码放到kali挂载到/mnt/目录 mount 630a886233764ec2a63f305f31 ...