变量定义
两种方式声明变量,var 或者 指明类型关键词声明:
var str = "test";
String str2 = "string2";
常量定义:
使用final 和const定义常量
final和const区别:final可以开始不赋值,只能赋值一次,final不仅有const编译时常量的特性,最重要的是它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化。
数据类型
字符串类型
**定义: ** 单引号,双引号,三引号都可以定义字符串
var str1 = 'string';
var str2 = "string2";
String str3 = 'string3';
String str4 = "string 4";
String str5 = '''string 5
string6
string7
''';
拼接:
print("$str1 $str2");
print(str1 + " " + str2);
数值类型
int必须是整型,double既可以是整形也可以是浮点型
int ival = 1;
double dval = 2.3;
bool bval = true;
数组/集合
list定义
//第一种定义list的方式
var l1 = ['aa','bb','cc'];
print(l1);
print(l1.length);
print(l1[1]);
//第二种定义list的方式
var l2 = new List();
l2.add('张三');
l2.add('李四');
l2.add('王五');
print(l2);
print(l2[2]);
//定义指定类型list
var l3 = new List<String>();
l3.add('指定类型');
输出结果:
[Running] dart "d:\work\workspace\dart\dartdemo\index.dart"
[aa, bb, cc]
3
bb
[张三, 李四, 王五]
王五
[Done] exited with code=0 in 0.657 seconds
map定义
// 第一种定义Maps的方式
var person = {
"name":"zhangsan",
"age": 20,
"work":["程序员","外卖"]
};
print(person);
print(person["name"]);
print(person["work"]);
//第二种定义Maps的方式
var p = new Map();
p["name"] = "lisi";
p["age"] = 30;
p["work"] = ["student", "服务员"];
print(p);
输出:
{name: zhangsan, age: 20, work: [程序员, 外卖]}
zhangsan
[程序员, 外卖]
{name: lisi, age: 30, work: [student, 服务员]}
is判断类型
var str = "test";
if(str is String){
print('string 类型');
}else{
print("不是string 类型");
}
运算符
此处只写比较特别的运算符,其他根java等语言类似的不在重复
取整:
int a= 13;
int b = 5;
print(a~/b); //取整
??= 赋值运算符
// b??=23;表示如果b为空的话, 23赋值给b
int a = 10;
a ??= 20;
print(a);
int b;
b ??= 23;
print(b);
输出结果:
[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
10
23
??运算符
var a;
var b = a ?? 10;
print(b);
var c = 2;
var d = c ?? 30;
print(d);
输出结果:
[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
10
2
三目运算符
//三目运算符
bool flag = true;
String str = flag? 'ture' : 'false';
函数
定义可选参数的函数
String getUserInfo(String username, [int age]){
if(age != null){
return "姓名:$username-----年龄:$age";
}
return "姓名:$username--- 年龄保密";
}
print(getUserInfo("张三",30));
print(getUserInfo("李四"));
输出结果:
[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
姓名:张三-----年龄:30
姓名:李四--- 年龄保密
默认参数
String getUserInfo(String username, [int age, String sex = '男']){
if(age != null){
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username----性别:$sex---- 年龄保密";
}
print(getUserInfo("张三",30));
print(getUserInfo("李四"));
命名参数
String getUserInfo(String username, {int age, String sex = '男'}){
if(age != null){
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username----性别:$sex---- 年龄保密";
}
print(getUserInfo("张三",age:30));
print(getUserInfo("李四"));
闭包
‘全局变量常驻内存,会污染全局,局部变量会被垃圾回收机制回收,不会污染全局。
如果想实现 常驻内存,并且不污染全局,这个受可以使用闭包
类
私有属性,Java中使用private,在dart中直接在变量前面加下划线即可
class Person{
String _name; //私有属性,对应java中的private
int age; //公有属性,对应java中的public
}
构造函数运行之前初始化实例变量
class Rect{
int width;
int height;
Rect():width=2,height=10{
}
… 级联操作(连缀)
class Person{
String name;
int age;
Person(this.name,this.age);
printInfo(){
print("name=${this.name}-----age = ${this.age}");
}
}
main(List<String> args) {
var p1 = new Person("张三",20);
p1.printInfo();
p1.name="李四";
p1.age=30;
p1.printInfo();
p1..name="王五"
..age=50
..printInfo();
}
输出结果:
[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
name=张三-----age = 20
name=李四-----age = 30
name=王五-----age = 50
mixins功能
实现类似类的多继承功能,但不是继承
class A{
String info = "this is A";
void printA(){
print("A");
}
}
class B{
void printB(){
print("B");
}
}
class C with A,B{
}
void main(List<String> args) {
var c = new C();
c.printA();
c.printB();
print(c.info);
}
输出结果:
[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
A
B
this is A
mixins使用条件:
- 作为minxins的类智能集成Object,不能继承其他类,如上述代码中Class A不能集成自定义的类
- 作为mixins的类不能有构造函数
- 一个类可以mixins多个mixins类
- mixins不是继承,也不是接口,耳是dart中全新的一种功能