想学习Flutter开发,那就必须学习Dart编程语言的语法,下面我们就通过一篇文章去了解一下Dart语言的魅力吧!
数据类型
1、变量
Dart中有 var、dynamic、bool、int、double、String、List、Map、enum等数据类型。
(1) var 可以声明任何类型的数据类型,数据类型取决于变量的值。
var name = 'Bob';
(2) 未指定静态类型的变量则会隐式声明为 dynamic,也可以使用dynamic关键字代替var关键字声明变量。
dynamic name = 'Bob';
(3) bool 布尔类型,true和false。
(4) int 整型
(5) double 双精度型,小数都用这个。
(6) String 字符串类型
(7) List 列表类型,大概就这个样子 ⬇️
var lists = [1,2,3,4,5,6];
(8) Map 映射类型,也就是键值对。
var maps = {'username':'zhangsan','password':'admin12345'};
(9) enum 枚举类型
// 声明枚举
enum Status{
success,
error
}
void main(List<string> args) {
// 打印枚举值
print(Status.success);
print(Status.error);
print(Status.values); // 打印结果: [Status.success, Status.error]
// 遍历枚举
Status.values.forEach((v){
print(v);
});
}/<string>
2、常量
final 和 const
final和const关键字用于声明常量。在Dart中不能修改使用final或const关键字声明变量的值。这些关键字可以与变量的数据类型一起使用,也可以与var关键字一起使用。
const关键字用于表示编译时常量。使用const关键字声明的变量是隐式final。
示例:
final name = 'zhangSan';
final String name = 'zhangSan';
const name = 'liSi';
const String name = 'liSi';
// 我们都是常量!
运算符
这些大家可以再本地多试一试!
条件语句
(1) if 语句
var num = 10;
if (num > 20) {
print('num > 20');
}
(2) if...else...语句
var num = 10;
if (num > 20) {
print('num > 20');
}else{
print('num <= 20');
}
(3) switch...case... 语句
var num = 30;
switch (num) {
case 10:{
print('num == 10');
}
break;
case 20:{
print('num == 20');
}
break;
default:{
print('num != 10 && num != 20');
}
}
这个和大家平时接触的应该都差不多!
循环语句
(1) for循环语句
var num = 30;
for (var i = 0; i < num; i++) {
print('num:'+i.toString());
}
(2) for…in...循环
var lists = [1,2,3,4,5,6,7,8];
for (var i in lists) {
print(i);
}
(3) while循环
var b = true;
int i = 0;
\t// 当 b == false 时, while 循环停止执行
while (b) {
i++;
if (i == 15) {
b = false;
}
print(i);
}
(4) do…while循环
do {
print('执行了!');
} while (false);
// 循环体至少执行一次!
(5) break 语句 : 跳出循环
int i = 0;
\t// 当 b == false 时, while 循环停止执行
while (true) {
i++;
if (i == 15) {
break;
}
print(i);
}
(6) continue语句 : 跳出当前循环,执行下一次循环
var lists = [1,2,3,4,5,6,7,8];
for (var i in lists) {
if(i == 5){
\t// 跳过当前循环,执行下一次循环
continue;
}
print(i);
}
// 打印结果: 1 2 3 4 6 7 8 只有 5没有打印输出
(7) 使用标签来控制循环
标签只是一个标识符,后跟冒号(:)应用于语句或代码块。标签可以与断点一起使用,并继续更精确地控制流程。
- 带有break的标签
for (var i = 0; i < 4; i++) {
a:
for (var j = 0; j < 5; j++) {
if (j>3) {
break;
}
// 当 i==2 时,执行break语句
if (i == 2) {
break a; // 当这句代码执行时,会中断 标签a:下面的循环
}
print('i:'+i.toString()+'==='+'j:'+j.toString());
}
}
- 带有continue的标签
for (var i = 0; i < 4; i++) {
a:
for (var j = 0; j < 5; j++) {
if (j>3) {
break;
}
// 当 i==2 时,执行continue语句
if (i == 2) {
continue a;
}
print('i:'+i.toString()+'==='+'j:'+j.toString());
}
}
函数、接口、类、对象
一、函数
函数是一组用于执行特定任务的语句。函数将程序组织成逻辑代码块。
return_type(返回类型) function_name(函数名)(type value){
\t\t// 执行代码
}
函数的类型:
(1) 有参数的和无参数的
// 有参数的
int sum(int x,int y){
\treturn x+y;
}
// 无参数的
int sum(){
\treturn 110;
}
(2) 有返回值和无返回值的
// 有返回值的
int sum(int x,int y){
\treturn x+y;
}
// 无返回值的
void sum(){
\t
}
(3) 可选位置参数
要指定可选的位置参数,请使用方括号[]。
void main(List<string> args) {
// 调用函数
print(sum(13, 25));
print(sum(13, 25,23));
}
// 方法一:可选参数默认为 null
int sum(int i,int j,[int z]){
\t// 判断可选参数是否为空,为空就赋初值
if(z.toString() == "null"){
z = 0;
}
return i + j + z;
}
// 方法二:可选参数可以赋初值
int sum(int i,int j,[int z = 0]){
return i + j + z;
}/<string>
(4) 可选的命名参数
与位置参数不同,必须在传递值时指定参数名称。花括号{}可用于指定可选的命名参数。
void main(List<string> args) {
// 调用函数
print(sum(13, 25));
print(sum(13, 25,x:23,y:20));
}
int sum(int i,int j,{x=0,y=0}){
return i + j + x+y;
}
// 打印结果: 38 81/<string>
二、接口
接口定义任何实体必须遵守的语法。接口定义了一组对象可用的方法。
(1) 类通过 implements 关键字来实现接口
(2) 类可以实现多个接口
void main() {
Calculator c = new Calculator();
print("The gross total : ${c.ret_tot()}");
print("Discount :${c.ret_dis()}");
}
// 接口1
class Calculate_Total {
int ret_tot() {}
}
// 接口2
class Calculate_Discount {
int ret_dis() {}
}
// 类实现多个接口
class Calculator implements Calculate_Total,Calculate_Discount {
// 实现接口1中的函数
int ret_tot() {
return 1000;
}
// 实现接口2中的函数
int ret_dis() {
return 50;
}
}
三、类
使用class关键字在Dart中声明一个类。类定义以关键字class开头,后跟类名; 并且由一对花括号包围的类体。
类体中有:
(1) fields
(2) getter和setter方法
(3) constructors
(4) functions
示例:
void main(List<string> args) {
// 根据命名构造函数初始化对象实例
var stu = new Student.name('Bob');
print(stu.name);
}
class Student{
String name;
// getter 方法
String get stu_name{
\treturn name;
}
\t// setter 方法
\tvoid set stu_name(String _name){
\tthis.name = _name;
}
// 默认构成函数
Student(){}
// 命名构造函数
Student.name(String _name){
this.name = _name;
}
// 普通方法
\tvoid read(){
\t
}
}/<string>
(5) super 和 this 关键字
super关键字用于引用类的直接父级。supper关键字可用于引用超类的变量,属性或方法等等。
this关键字引用类的当前实例。这里,参数名称和类字段的名称是相同的。
(6) static 关键字
static关键字可以应用于类的数据成员,即字段和方法。静态变量保留其值,直到程序完成执行。
(7) 类的继承
- 单层 : 每个类最多可以从一个父类扩展
- 多层 : 一个类可以从多个类继承,Dart不支持多重继承。
- 多级 : 类可以从另一个子类继承。
(8) 方法的重写
方法重写是子类在其父类中重新定义方法的机制。
四、对象
(1) 级联运算符(..)
级联(..)运算符可用于通过对象发出一系列调用。
void main(List<string> args) {
// 使用级联运算符来访问方法
new Student()..test_method()..test_method1();
}
class Student{
void test_method(){
print('test_mehtod');
}
void test_method1(){
print('test_mehtod1');
}
}
// 打印结果: test_mehtod test_mehtod1/<string>
(2) toString() 方法
此函数返回对象的字符串表示形式。
void main(List<string> args) {
// 使用 toString() 方法
print(new Student()..toString());
}
class Student{
void test_method(){
print('test_mehtod');
}
void test_method1(){
print('test_mehtod1');
}
}/<string>
异常
try/on/catch块
与我们平常的的异常处理相比,Dart多了on块,on块可以指定异常类型。其他的用法与平常使用相似。
int x = 12;
int y = 0;
var res;
// 使用 on 指定异常类型
try{
res = x~/y;
}on IntegerDivisionByZeroException{
print('除数不能为0');
}
在异常中还有 finally 块(最后都会执行的块),使用throw关键字抛出异常以及自定义异常。
Typedef
typedef或函数类型别名有助于定义指向内存中可执行代码的指针。简单地说,typedef可以用作引用函数的指针。
typedef ManyOperation(int fristNo,int secondNo);
Add(int firstNo,int second){
print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
print("Divide result is ${firstNo/second}");
}
Calculator(int a, int b, ManyOperation oper){
print("Inside calculator");
oper(a,b);
}
void main(List<string> args) {
ManyOperation oper = Add;
oper(10,20);
oper = Subtract;
oper(10,20);
oper = Divide;
oper(50,5);
\t// typedef作为参数
\tCalculator(5,5,oper);
}
/*
打印结果:
Add result is 30
Subtract result is -10
Divide result is 10.0
*//<string>
Dart 库、同步和异步、并发
写的有点累了! 最后这三个概念其实也不复杂,我就偷个懒吧!
对了! 详细的Dart基础知识的文档,我也放在后台了,在私信栏回复 dart 就可以获取!
閱讀更多 程序猿CoderWu 的文章