概述
- Dart是Google发布的开源语言
- Dart是面向对象编程语言
- Dart目前可用于全平台开发(Web开发,跨平台Flutter开发,脚本或服务端开发)
变量
- 使用var观景子进行申明,可赋予不同类型的值
var a = 10;
print(a); //10
var b = "str";
print(b); //str
2.未被初始化,默认值为null
var c ;
print(c);//null
- final申明变量只能被赋值一次
final d = "yxjie";
// d=10; //编译器报错
// d="str";//编译器报错
常量
使用const申明的常量,为编译期常量
const a = 10 ; //不可变了
数据类型(内置数据类型)
- 数值型(Number)【整型:int 浮点型:double】
数值型操作
1.运算符:+,-,*,/,~/(整除),%
2.常用属性:isNaN,isEvent (是否是偶数),isOdd(是否是奇数)等
3.常用方法:abs(),round(),toInt(),toDouble()
- 字符串(String)
注:字符串内容比较使用== 【与java或Kotlin不一样】,也是支持插值表达式的 - 布尔型 (Boolean)
- 列表 (List)
//三种创建方式
var list=[1,2,3];
var list2=const[1,'yxjie',true];
var list3 = new List();
list3.add("hahah");
list3.insert(0, "yxjie");
list3.remove("yxjie");
list3.clear();
list2.forEach(print);
- 键值对(Map)
void main(){
var map={1:"Dart",2:"Java",3:"Kotlin",4:4};
var map2=const{1:"Dart",2:"Java",3:"Kotlin",4:4};
var map3=new Map();
map3[1]="hha";
map3["2"]="lalal";
print(map3.containsKey(2));
print(map);
print(map.length);
print(map.containsKey(1));
print(map.containsValue("java"));
map3.forEach(pf);
}
void pf(key,value){
//差值表达式
print("key=\$key,value=\$value");
}
for语句
var list = [1,2,3,4];
for(var i = 0;i < list.length;i++){
print(i);
}
print('=====');
for(var item in list){
print(item);
}
switch...case语句
- 比较类型:num,String,编译器常量,对象以及枚举
- 非空case必须有个break
- default处理默认条件
- continue跳转制定标签
var language = "Kotlin";
switch (language) {
D:
case "java":
print("java---");
break;
case "Kotlin":
print("Kotlin---");
continue D;
default:
print("Dart");
}
// 运行结果
//Kotlin---
//java---
方法
方法特性
- 方法也是对象且类型为Fuction
- 返回值类型,参数类型都可省略(js类似)
- 箭头语法:=> a 是{return a},只支持一个表达式
- 方法都有返回值,如不指定,默认返回null
//标准定义
void getPerson(String name,int age){
print("name=\$name,age=\$age");
}
// 返回值参数类型都可以省略
getPerson2(name,age){
return "name=\$name,age=\$age";
}
// 箭头函数
getPerson3(name,age)=>"name=\$name,age=\$age";
可选参数
- 可选命名参数:{param1,param2,...}
- 可选位置参数:[param1,param2,...]
void main(){
getPerson("Yxjie");
getPerson("yxjie",age: 27);
//输出结果
//name=Yxjie,age=null
//name=yxjie,age=2
getPerson2("Jerry");
getPerson2("jerry",18);
getPerson2("Jerry",18,"boy");
//运行结果
//name=Jerry,age=null,gender=null
//name=jerry,age=18,gender=null
//name=Jerry,age=18,gender=boy
}
getPerson(name,{age}){
print("name=\$name,age=\$age");
}
getPerson2(name,[age,gender])=> print("name=\$name,age=\$age,gender=\$gender");
默认参数
- 使用= 给参数设置默认值(与Kotlin类似)
- 默认参数值只能是编译时常量
void main(){
getPerson("yxjie");
getPerson("yxjie",age: 28);
//运行结果
//name=yxjie,age=18
//name=yxjie,age=28
}
getPerson(name,{age=18}){
print("name=\$name,age=\$age");
}
方法对象
- 方法可作为对象赋值给其他变量
- 方法可作为参数传递给其他方法
void main(){
var fun=sayHello;
fun(); //say hello!!!
//方法作为参数传递给另一个方法
var list=["Java","Kotlin","Dart","Python"];
list.forEach(print);
}
sayHello()=>print("say hello!!!");
匿名方法特性
- 可赋值给变量,通过变量进行调用
- 可在其他方法中直接调用
void main() {
var a = (s) {
print("hello,\$s");
};
a("Yxjie"); //hello,Yxjie
var list = ["a", "b", "c"];
print(listAddPre(list, addPre)); //[new a, new b, new c]
print(listAddPre(list, (s) {
return s * 3;
}));//[new anew anew a, new bnew bnew b, new cnew cnew c]
}
addPre(s) => "new " + s;
listAddPre(List list, addPre(s)) {
for (var i = 0; i < list.length; i++) {
list[i] = addPre(list[i]);
}
return list;
}
闭包
- 闭包是一个方法对象
- 闭包定义在其他方法内部
- 闭包能够访问外部方法局部变量,并持有他的状态
void main(){
var fun=a();//与方法对象略微不一样
fun();//0
fun();//1
}
a(){
var count=0;
printCount(){
print(count++);
}
return printCount;
}