Dart的安装
- 下载Dart SDK,注意此处需要梯子
- 根据路径配置环境变量
工具的配置
学习Dart语法的时候,选择的是VSCode作为编辑器
VSCode的需要安装的插件:
Dart、Flutter、Code Runner(方便运行调试)
安装完Code Runner后,可以通过右击然后选择run code执行代码;
也可以通过点击右上角执行代码
Dart语法学习
- Dart的入口函数
main(List args) {
//coding
}
- print - 输出内容
print("Hello World!");
- 定义变量
- 明确声明
String name = 'who';
name = 'hanmmm';
//name = 12; 错误,将一个int值赋值给一个String变量
- 类型推导
2.1 声明常量
final height = 1.85;
const address = '广州市';
注: final和const的区别:
final可以通过计算/函数获取一个值(可以运行期间来确定一个值)
const必须赋值 常量值(编译期间需要一个确定的值)
2.2 声明变量
var age = 20;
注意:其中identical判断两个对象是否为同一个对象
main(List args) {
//通过final定义的p1和p2不是一个对象
final p1 = Person("lmf");
final p2 = Person("lmf");
print(identical(p1, p2));
//const放在赋值语句的右边,可以共享对象,提高性能
//通过const定义的p1和p2是同一个对象
const p3 = Student('haha');
const p4 = Student('haha');
print(identical(p3, p4));
}
class Person {
String name;
Person(String name) {
this.name = name;
}
}
class Student {
final String name;
const Student(this.name);
}
- dynamic - 如果需要为变量赋值不同类型的值,可以使用dynamic,开发中不推荐使用
dynamic sex = 'man';
print(sex.runtimeType);
sex = 12;
print(sex.runtimeType);
- 布尔类型
bool flag = true;
// var flag = 'abc'; 错误,Dart中不能判断非0即真, 或者非空即真
if(flag) {
print('为真');
- 字符串类型
定义字符串 - 使用''、“”、‘’‘’‘’,其中三引号可以表示多行字符串
var str1 = 'abc';
var str2 = "def";
var str3 = '''
abc
cba
nba
''';
print(str1+'\n'+str2+'\n'+str3);
字符串的拼接 - 使用${expression},如果表达式是一个标识符,可以省略{}
var name = "who";
var age = 18;
var height = 1.78;
//强调: ${变量},那么{}可以省略;表达式不可以
var msg1 = "my name is ${name}, age is ${age}, height is ${height}";
var msg2 = "name is $name, type is ${name.runtimeType}";
print(msg1);
print(msg2);
- 集合类型
- List - 有序的
var names = ["abc", "cba", "nba", "abc"];
print(names);
- Set - 无序的、不可重复的
var movies = {"大话西游", "哪咋传奇"};
print(Set.from(names).toList());
- Map - 字典类型
var info = {
"name": "lilei",
"age": 18
};
- 函数
- 箭头函数 - 只有一行代码的,可以使用箭头函数表示
// int sum(int num1, int num2) {
// return num1+num2;
// }
int sum(int num1, int num2) => num1+num2;
- 参数
main(List args) {
sayHello("lilei");
sayHello2("lilei", 18, 1.88);
sayHello3('leilei', height:2.02, age:18);
}
//1.1 必选参数:必须传
void sayHello(String name) {
print(name);
}
//1.2 可选参数:位置可选参数 、命名可选参数
//注:可选参数可以有默认值
//1.2.1 位置可选参数:[int age, double height]
//实参和形参在进行匹配是,是根据位置匹配
void sayHello2(String name, [int age = 10, double height]) {
print(name);
}
//1.2.2 命名可选参数 :{int age, double height}
void sayHello3(String name, {int age = 18, double height}) {
}
- 函数可以作为返回值、参数
main(List args) {
test(bar);
//匿名函数
test((){
print("匿名函数被执行");
});
//箭头函数 函数体只有一行代码
test(()=> print("箭头函数被调用"));
//指定函数类型
test2((num1, num2) {
return num1+num2;
});
//通过typedef定义函数类型
test3((num1, num2) {
return num1+num2;
});
var foo = demo();
print(foo(20, 30));
}
void test(Function foo) {
foo();
}
void bar() {
print("bar函数被调用");
}
void test2(int foo(int num1, int num2)) {
print(foo(20, 30));
}
typedef Calculate = int Function(int num1, int num2);
void test3(Calculate foo) {
print(foo(20, 40));
}
Calculate demo() {
return (int a, int b) {
return a*b;
};
}
生活如此美好,今天就点到为止。。。