####前言: 1.Dart 语言在2011年10月由 Google 发布,并在2012年10月发布第一个里程碑版本 M1。Dart 做为一种结构化的Web开发语言,既让人感受熟悉,又足够灵活。既适用于快速原型开发,又适用于组织大型的代码库。既能够用在桌面版和移动版的浏览器中,也能够在服务器端使用。整体上说,Dart 语言是感受熟悉的而且符合程序员的直觉,特别是你已经掌握了 Java、JavaScript 等语言的话。程序员
2.Dart 是一门很特别的语言,(1)特性是可选类型。(2)Dart中的类和接口是统一的,类即接口,你能够继承一个类,也能够实现一个类(接口),天然也包含了良好的面向对象和并发编程的支持。shell
3.编程语言并非孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成: SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。 Dartium:内嵌 Dart VM 的 Chromium ,能够在浏览器中直接执行 dart 代码。 Dart2js:将 Dart 代码编译为 JavaScript 的工具。 Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上全部工具。支持代码补全、代码导航、快速修正、重构、调试等功能。编程
4.Dart 程序是从顶层的 main() 函数开始执行的。test.dart数组
main() {
print('hello world!');
}
复制代码
在命令行中运行代码:浏览器
dart hello.dart
复制代码
或者以检查模式运行:bash
dart --checked hello.dart
复制代码
更多请参考《Dart的资源汇总》服务器
####基本语法闭包
1.介绍:Dart中全部的都是对象,涵盖数字,函数,他们都是继承Object,默认的值都是null。 2.支持的类型: (1)Numbers,里面包含了int ,double (2)Strings (3)Booleans (4)List(也就是数组) (5)Maps 3.简单的栗子: (1)数值:并发
num a=5;
num b=6;
print(a+b);
复制代码
(2)字符串:app
//字符串赋值的时候,可使用单引号,也可使用双引号
var exam1 = "Ok?";
//若是使用的是双引号,能够内嵌单引号
//固然,若是使用的是单引号,能够内嵌双引号,不然须要“\”转义
//String exam2 = ‘It\’s ok!’;
String exam2 = "It's ok!";
//使用三个单引号或者双引号能够多行字符串赋值
var exam3 = '''Dart Lang Hello,World!''';
//在Dart中,拼接字符串用“+”,是能够的,可是不推荐这样使用,应该使用${param};
var name = "nihao";
var sex = "dsf";
print("name: ${sex}");
复制代码
(3)布尔值:
bool ishello=false;
if(ishello){
print("nihao");
}else{
print
复制代码
(4)容器: I、StringBuffer 说明:StringBuffer并非容器,按照官方的说法,StringBuffer能够特别高效的构建多个字符串,另外,之前的用的add方法已经改成write;
StringBuffer sb = new StringBuffer();
sb.write("hello StringBuffer ");
sb ..write('nihao')..write('linghit');
print(sb.toString());
sb.clear();
print(sb.toString());
复制代码
II、List 列表,也就是常说的数组 常见的添加、索引、删除等方法以下
// 使用List的构造函数,也能够添加int参数,表示List固定长度
//var vegetables = new List();
var persons = ['小智', '明兄'];
// 添加元素
persons.add('小约妹');
// 添加多个元素
persons.addAll(['小莫', '小污']);
// 获取List的长度
print(persons.length);
// 利用索引获取元素
print(persons[0]);
// 查找某个元素的索引号
print(persons.indexOf('小莫'));
// 利用索引号删除某个元素
var appleIndex = persons.indexOf('小莫');
persons.removeAt(appleIndex);
// 删除全部的元素
persons.clear();
print(persons.length);
复制代码
你可使用sort()对List的元素进行排序
而且必须制定比较两个对象的函数,函数的返回值中
return <0 表示小于,0表示相同,>0表示大于
复制代码
III、Set 集合在Dart中无序,而且每一个元素具备惟一性 由于它是无序的,所以你不能像List那样用索引来访问元素 这个就不细说了,吃瓜观众本身下去看看
IV、Map
映射,也有人称之为字典 Map是一个无序的键值对容器
// Map的声明 (以往不一样的点)
var initMap1 = {
'one' : 1,
'two' :2,
'three' : 3
};
var initMap2 = new Map();
// 指定键值对的参数类型
var initMap3 = new Map<int, String>();
print(initMap["one"]);
复制代码
V、迭代:
//若是迭代的对象是容器,那么可使用forEach或者for-in
var diedai = [0, 1, 2];
diedai.forEach((x) => print(x));//forEach的参数为Function
for(var x in diedai) {
print(x);
}
复制代码
介绍:首先,函数也是对象,当没有指定返回值的时候,函数返回null I、简单应用
String hello(String name)
{
return 'Hello $name!';
复制代码
Dart语言中,参数类型也是可选的
String hello(name)
{
return 'Hello $name!';
复制代码
建议仍是定义好,输入的类型以及输出的类型,方便后人阅读和调用
若是函数只是简单的返回一个表达式的值,可使用箭头语法 =>expr; 它等价于{return expr;}
hello(name) => 'Hello $name!';
复制代码
Dart中匿名函数的写法 (name)=>’Hello $name!’;
因而能够以下定义匿名函数
var hello = (name)=>'Hello $name!';
复制代码
II、函数别名:
typedef int Add(int a, int b);
int Subtract(int a, int b) => a - b;
void main()
{
print(Substract is Function);
print(Substract is Add);
}
上面代码的命名感受有点误导人的感受
若是两个函数的参数和返回值都同样
那么is操做符就会返回true
复制代码
III、函数的闭包 下面的代码有一点须要注意 初始化变量的时候,参数对应的是函数的参数num n 调用函数类型变量的时候,参数对应的是返回值中的参数num i
Function makeSubstract(num n)
{
return (num i) => n - i;
}
void main()
{
var x = makeSubstract(5);
print(x(2));
}
复制代码
下面这段颇有意思的代码 须要反应过来一件事:Dart中函数也是对象 下面的代码应该看得明白,以后会讲控制语句以及容器
var callbacks = [];
for (var i = 0; i < 3; i++) {
// 在列表 callbacks 中添加一个函数对象,这个函数会记住 for 循环中当前 i 的值。
callbacks.add(() => print('Save $i'));
}
callbacks.forEach((c) => c()); // 分别输出 0 1 2
复制代码
IV、可选参数: Dart中支持两种可选参数:命名可选参数和位置可选参数 但两种可选不能同时使用
命名可选参数使用大括号{},默认值用冒号: 位置可选参数使用方括号[],默认值用等号=
FunX(a, {b, c:3, d:4, e})
{
print('$a $b $c $d $e');
}
复制代码
在命名可选参数的函数中,大括号外的a为必填参数 大括号内的参数能够指定0个或多个 而且与顺序无关,在调用函数的时候须要指明参数名 没有赋值的参数值为null
FunY(a, [b, c=3, d=4, e])
{
print('$a $b $c $d $e');
}
复制代码
在位置可选参数的函数中,大括号内的参数能够指定0个或多个 在调用的时候参数值会依次按顺序赋值
void main()
{
FunX(1, b:3, d:5);
FunY(1, 3, 5);
}
复制代码
3、操做符和流程语句:(和其余语言差很少) 一、取整:
int a = 3;
int b = 2;
print(a~/b);//输出1
复制代码
二、级联: 当你要对一个单一的对象进行一系列的操做的时候 可使用级联操做符 ..
class Person {
String name;
String sex;
int age;
setAge(num age) =>this.age=age;
String toString() => 'Name:$name\nSex:$sex\nage:$age';
}
void main() {
Person p = new Person();
p ..name = 'Xq'
..sex="nan"
..setAge(20);
print(p);
}
复制代码
三、if语句没有多大的区别: If语句的判断条件为bool值,用法和大多语言同样
if(2){
print("true");
}else{
print("false");
}
复制代码
switch:也差很少;swith的参数能够是num,或者String
4.循环:
for(); while(); do{}while();没太多变化
复制代码
五、异常处理: 在Dart中能够抛出非空对象(不只仅是Exception或Error)做为异常
throw new ExpectException('值必须大于0!');
throw '值必须大于0!';
复制代码