Dart语法

2020-11-06  本文已影响0人  GaoXiaoGao

1.Dart程序运行的入口是main函数,所以写一段Dart程序时,必须要有main函数

void main(List<String> args){
  print("Hello Dart");
}

2.Dart定义变量

Dart为强类型语言

第一种定义变量方式,明确类型声明,如

 String name = "xiaoming";
  int age = 1;
  double height = 12.1;

 int a = "xiaoming"; //错误的定义方式

  print("${name} ${age} ${height}");

  //如果是变量的话{}可以省略,有的时候不能省略
  print("$name $age $height");

  //打印类型
  print(name.runtimeType);
  print(age.runtimeType);
  print(height.runtimeType);

第二种定义变量方式,类型推导方式,如

  var hint = "hello";
  //hint = 100; //错误的赋值,hint为String类型
  print("$hint");


const name1="你好"; //常量,不可再赋值
final name2="你好"; //常量,不可再赋值

  //区别
  // const 声明时必须直接赋值
  // final 可以运行时赋值,如接收一个函数的返回值

  dynamic cc = "a";
  cc = 10; //可以
  print(cc.runtimeType);

3.Dart支持10进制和16进制,其他不支持

4.Dart中不通过非空值作为Boolean 类型来判断

String s = "123";
if(s){ //行不通
    //
}

5.定义字符串的三种方式,三种方式都可以

String s1 = "123456";
String s2 = '123456';
String s3 = ''' 
 abc 
 def
 ''';


  //当$后面是表达式时,则必须放在{}中
  print("name:${name.runtimeType} age:${age.runtimeType} height:${height.runtimeType}");

6.集合

List Set Map

void main(List<String> args){

  List<String> nameList = ['xiaoming','xiaohong','xiaogang','xiaoming','xiaohong'];
  Set<int> numberList = {1,2,3,4,5,6};

  // print(nameList);
  // print(numberList);
  // Set集合不能有重复元素,可以使用Set来去重
  List<String> newNameList = List.from(Set.from(nameList));
    print(newNameList);

    Map<String,dynamic> info = {
      "name":"yes",
      "age":18,
      "height":2.1
    };
    print(info);

}

7.Dart的函数

//如何让函数的参数可传可不传?
两种方式:
1.通过[]将参数括起来是位置方式,值参会按顺序传参,如果不传为null
2.通过{}将参数括起来是命令方式,传参数时以key:value的形式传参

可以给可选参数设置默认值,必传参数不可设置默认值

void main(List<String> args){

testFun1("li",18,29.1);
testFun1("li");
testFun1("li",16);

testFun2("li",age:12);
}

void testFun1(String name,[int age=20,double height]){
// age=20表示没有参数时,使用默认值20
  print(name);
  print(age);
  print(height);

}

void testFun2(String name,{int age=20,double height}){

  print(name);
  print(age);
  print(height);

}

函数可以作为另一个函数的参数传递

void main(List<String> args){
  testFun2(testFun1);  
}

void testFun1(){
  print("函数可以作为参数传递");
}

void testFun2(Function test){

 test();

}

函数可以作为另一个函数的返回值

void main(List<String> args){
  Function tempFunc = testFun2();  
  tempFunc(); //调用返回的函数
}

void testFun1(){
  print("函数可以作为另一个函数的返回值");
}

Function testFun2(){
 return testFun1;
}

匿名函数的使用

void main(List<String> args){

    List<String> nameList = ['xiaoming','xiaohong','xiaogang'];

    //forEach()中要求传一个函数,可以通过 (参数) {} 直接定义一个匿名函数传入 
    nameList.forEach((item){
      print(item);
    });

    //如果只有一行简单的代码,可以使用箭头函数
     nameList.forEach((item)=> print(item));
}

map函数的使用

List<String> nameList = ['xiaoming','xiaohong','xiaogang'];
final result = nameList.map((item)=> item+"hahaha");
print(result);

//将result转换为一个数组
final result = List.from(nameList.map((item)=> item+"hahaha"));
print(result);

8.类

main(List<String> args){

// final p = new Person();
final p = Person(); //Dart 2.0以上版本 可以省略new 

p.name="gao";
p.age = 12;
p.eating();

}

class Person {
  
  String name;
  int age;
  void eating(){
    print("${this.name}在吃早餐");
  }
}

9.构造函数

1.无构造函数时,默认创建一个无参构造函数
2.Dart不支持构造函数的重载

main(List<String> args){

// final p = new Person();
// final p = Person("xiaoming",12); //Dart 2.0以上版本 可以省略new 

// final p = Person("xiaoming"); 

// final p = Person(name:"xiaoming", shengao:170); 



  Map<String,dynamic> params = {
    "name":"Jerry",
    "age":20,
    "shengao":190
  };

  final p = Person.fromMap(params);

  // p.name="gao";
  // p.age = 12;
  p.eating();

}

class Person {
  
  String name;
  int age;
  int shengao;

  //方式1
  // Person(String name, int age){
  //   this.name = name;
  //   this.age = age;
  // }

  //方式2
  //  Person(String name,[int age,int shengao]){
  //   this.name = name;
  //   this.age = age;
  //   this.shengao = shengao;
  // }

  //方式3
  //  Person(String name,{int age,int shengao}){
  //   this.name = name;
  //   this.age = age;
  //   this.shengao = shengao;
  // }

  
  //   //方式4
  //  Person({String name,int age,int shengao}){
  //   this.name = name;
  //   this.age = age;
  //   this.shengao = shengao;
  // }

      //方式5 语法糖写法,效果与方式4一致
  、// Person({this.name, this.age, this.shengao});

   //初始化列表 可以在:后面初始化列表
   Person({this.name, this.age, this.shengao}) : twoAge = age * 2;


  //方式6 通过传入map数据来创建构造函数
  //命名构造函数
  Person.fromMap(Map<String, dynamic> map) {
      this.name = map["name"];
      this.age = map["age"];
      this.shengao = map["shengao"];
  }


  void eating(){
    print("${this.name}在吃早餐");
  }
}

10.抽象类

抽象类跟java中类似
默认类也是接口,可以被implements

11. dynamic和Object有什么区别?

Dart中默认所有类继承自Object
dynamic 可以动态指定类型

上一篇下一篇

猜你喜欢

热点阅读