Dart简介
- Dart 是面向对象的、类定义的、单继承的语言,它的语法类似 C 语言,可以转译为 JavaScript,支持接口 (interfaces)、混入 (mixins)、抽象类 (abstract classes)、具体化泛型 (reified generics)、可选类型 (optional typing) 和 sound type system;
VSCode环境搭建
- 在学习Dart语法时,本人使用的是VSCode编辑器,下载官方网址为:https://code.visualstudio.com/
- 其次安装Flutter,Dart,Code Runner三个插件,如下所示:
- 然后在桌面上创建一个文件夹
01_Dart基本语法
,用VSCode打开,再创建dart文件,就可以进行Dart语法演练了;
main函数
- Dart语言的入口是
main函数
,并且必须显示的进行定义;
- Dart的入口函数main是没有返回值的;
- 传递给main函数的命令行参数,是通过List完成的;
- 代码展示如下:
变量
- 在Dart语言中,
所有的变量都可视为一个对象
,所有的对象都看作一个类的实例,数字
、函数
、null
也是对象,所有的对象都派生自Object类
;
变量的定义与初始化
- 关键字
var
和dynamic
都可以定义变量,两者最大的区别在于var定义的变量,在初始化后类型确定不可更改,dynamic定义的变量,类型随值类型的变化而变化;
- 通过
var
关键字定义变量,表明变量的值是可以发生改变的;
- 定义变量之后,未进行初始化,系统默认赋值为
null
;
void main(List args) {
var num;
if (num == null) {
print("num is null"); //执行 num = null
} else {
print("num = ${num}");
}
int a;
if (a == null) {
print("a is null"); //执行 a = null
} else {
print("num = ${num}");
}
}
- 整型变量a,定义之后未进行初始化,默认赋值为null,表明a也是一个对象;
- 使用var关键字定义变量,变量在进行初始化之后,变量的类型也就确定了,表明Dart语言支持
类型推断
;
void main(List args) {
var a = 100;
a = "yanzi";
}
- 上述代码出现报错,
Error: A value of type 'String' can't be assigned to a variable of type 'int'
,原因在于变量a,在进行初始化时,系统经类型推断
确认为int类型
,是不能赋值字符串数据的;
- 通过
dynamic
关键字定义变量,dynamic类型的变量,在使用中可以随时改变其类型,系统会根据该变量的当前值类型确定其当前时刻的类型
;
void main(List args) {
dynamic a = 100;
a = "yanzi";
}
- 上述代码不会报错,也就是说
dynamic
修饰的变量,可以随时更改变量的数据类型;
常量
- 关键字
const
和final
,都可定义常量,其值不可发生更改,且定义与初始化同时进行
,否则会报错;
-
const
定义的常量,在编译时就已经初始化,且不可改变;
-
final
定义的常量,在运行时进行初始化,且不可改变;
void main(List args) {
const a1 = "yanzi";
const int a2 = 100;
print(a1);
print(a2);
final name1 = "yanzi";
final String name2 = "sss";
print(name1);
print(name2);
}
数据类型
- 在Dart语言中,支持的数据类型有8种,依次是
num数值类型
,String字符串类型
,bool布尔型
,List数组类型
,Map字典类型
,Set集合类型
,Runes类型
,Symbols类型
;
num数值类型
- num数值类型有两种分别为
int
和double
,均继承自num
类;
void main(List args) {
int a = 100;
double b = 120.2;
print("a = ${a}");
print("b = ${b}");
double c = 200; //自动将int转成double
print("c = ${c}");
}
-
double c = 200
,会自动将int转成double类型;
String字符串类型
- 在Dart中,可使用
双引号
,也可以使用单引号
创建字符串;
- 可以用
${字符串变量名}
,引用字符串;
void main(List args) {
String name1 = "yanzi";
String name2 = 'SF';
var name3 = "ssss";
print("name1 = ${name1}");
print("name2 = ${name1}");
print("name3 = ${name1}"); //name3 = yanzi
}
字符串的常用方法
void main(List args) {
String name1 = "yanzi";
print(name1.length); //5
}
void main(List args) {
String name1 = "yanzi";
print(name1.isEmpty); //false
}
void main(List args) {
String name1 = "yanzi";
print(name1.isNotEmpty); //true
}
- 字符串拼接
- 使用
加号+
,进行字符串拼接;
- 使用
${字符串变量名}
,进行字符串内嵌,实现字符串拼接效果;
void main(List args) {
String name1 = "yanzi";
String name2 = " ssss";
String name3 = name1 + name2;
String name4 = "asd" + "123";
print("name3 = " + name3); //name3 = yanzi ssss
print("name3 = ${name3}"); //name3 = yanzi ssss
print("name4 = " + name4); //name4 = asd123
}
void main(List args) {
String name1 = "aaabbb";
//截取指定区间的字符串
print(name1.substring(0, 2)); //aa
//截取指定index至末尾
print(name1.substring(3)); //bbb
//利用 指定字符 切割 获取数组
String str = "a,b,c,d,e";
List strs = str.split(",");
print(strs); //[a, b, c, d, e]
}
void main(List args) {
String name1 = "aaabbb";
String name2 = "AddSSS";
//转成大写
print(name1.toUpperCase()); //AAABBB
//转成小写
print(name2.toLowerCase()); //addsss
}
void main(List args) {
String name1 = " aaabbb ";
//去除左右两边空格
print(name1.trim()); //
//去除左边空格
print(name1.trimLeft());
//去除右边空格
print(name1.trimRight());
}
bool布尔型
- 使用关键字
bool
定义布尔型变量,属于bool
类型;
void main(List args) {
bool isTop = false;
bool isRich = true;
if (isTop) {
print("高");
}
if (isRich == true) {
print("帅");
}
}
List数组类型
void main(List args) {
//int整型数组
var arr1 = List();
arr1.add(10);
arr1.add(20);
arr1.add(30);
arr1.add(100);
arr1.add(200);
print(arr1); //[]
}
Map字典类型
void main(List args) {
var dic1 = {"name": "yanzi", "age": 16};
var dic2 = new Map();
dic2["name"] = "yanzi";
dic2["age"] = 30;
Map dic3 = new Map();
dic3["name"] = "yanzi";
dic3["age"] = "15";
Map dic4 = new Map();
dic4["name"] = "liyanyan";
dic4["age"] = "33";
Map dic5 = {"name": "yanzi", "age": "23"};
}
Set集合类型
void main(List args) {
//定义初始化
Set names1 = {};
var name2 = {};
//添加元素
name2.add("yanzi");
name2.add("sss");
name2.add("aaa");
print(name2); //{yanzi, sss, aaa}
}
Runes类型
- Dart的rune类型主要是unicode编码之类的;
Symbols类型
- Dart的Symbol表示程序中出现的操作符或标识符;
类型转换
- 字符串转int,double 数值,调用num类型的
parse方法
;
void main(List args) {
String str1 = "12345";
print(int.parse(str1)); //12345
String str2 = "123.56";
print(double.parse(str2)); //123.56
}
- int,double数值转字符串,调用num类型的
toString方法
;
void main(List args) {
int num1 = 100;
print(num1.toString()); //100
double num2 = 123.56;
print(num2.toString()); //123.56
}