Dart语言入门学习

267 阅读1分钟

Dart语言已经在flutter里面普遍使用,对于dart语言的学习也志在必得,学习一门新的语言必须要对其基础语法规则有熟悉的认知,这样在项目开发中才能得心应手。Dart语言的使用语法大部分是和javaScript很相似,有些功能就不展开复述了!

Dart 数据类型

一、常用的数据类型
  1、Numbers(数值):
      int
        example:int a=123;
      double(既可以是整型 也可是浮点型)
      	example:double b=23.5;
  2、Strings(字符串)
      String
	example:String str1='this is str1';
  3、Booleans(布尔)
      bool
        example: bool flag1=true;  
  4、List(数组)
      	1、var l1=['aaa','bbbb','cccc'];
        2、var l2=new List();
           l2.add('张三');
       	3、var l3=new List<String>();
           l3.add('张三');
  5、Maps(字典)
        1、var person={
           "name":"张三"
           };
        2、var p=new Map();
           p["name"]="李四";
二、Dart判断数据类型: is 关键词来判断类型
	if(str is String){
           print('是string类型');
        }

Dart 运算符、条件表达式

一、运算符
  1、算术运算符: +    -    *     /     ~/ (取整)     %(取余)
  2、关系运算符: ==    !=   >    <    >=    <=
  3、逻辑运算符: !  &&   ||
  4、赋值运算符: =   ??=  +=  -=  *=   /=   %=  ~/=
二、条件表达式
  1if  else
  2switch case 
  3、三目运算符
     String c=flag?'我是true':'我是false';
  4、??运算符

Dart 循环语句

一、for基本语法
    for (int i = 1; i<=100; i++) {   
        print(i);
      }
二、while
	do{
	  语句/循环体	
	}while(表达式/循环条件);
    
    	while(i<=10){
            print(i);
        }

Dart 集合类型List、Set、Map

 一、List里面常用的属性和方法
   常用属性:
      length          长度
      reversed        翻转
      isEmpty         是否为空
      isNotEmpty      是否不为空
    常用方法:  
      add         增加
      addAll      拼接数组
      indexOf     查找  传入具体值
      remove      删除  传入具体值
      removeAt    删除  传入索引值
      fillRange   修改   
      insert(index,value);            指定位置插入    
      insertAll(index,list)           指定位置插入List
      toList()    其他类型转换成List  
      join()      List转换成字符串
      split()     字符串转化成List
      forEach   
      map
      where
      any
      every
  二、Set 主要的功能就是去除数组重复内容
  	var s=new Set();
        s.add('香蕉');
        s.add('苹果');
        s.add('苹果');
        print(s);   //{香蕉, 苹果}
        print(s.toList()); 
  三、映射(Maps)是无序的键值对
    常用属性:
      keys            获取所有的key值
      values          获取所有的value值
      isEmpty         是否为空
      isNotEmpty      是否不为空
    常用方法:
      remove(key)     删除指定key的数据
      addAll({...})   合并映射  给映射内增加属性
      containsValue   查看映射内的值  返回true/false
      forEach   
      map
      where
      any
      every

Dart 中的函数

一、内置方法/函数
	print();
二、自定义方法
     自定义方法的基本格式:
	返回类型  方法名称(参数1,参数2,...){
          方法体
          return 返回值;
        }
        注意:方法参数的不同定义写法
        1、带可选参数的方法
           String printUserInfo(String username,[int age]){}
        2、带默认参数的方法
        	String printUserInfo(String username,[String sex='男',int age]){}
        3、定义一个命名参数的方法
        	String printUserInfo(String username,{int age,String sex='男'}){}
                print(printUserInfo('张三',age:20,sex:'未知'));

Dart 中的对象 类的介绍

Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类.
Dart和其他面向对象语言不一样,Data中没有 public  private protected这些访问修饰符合.我们可以使用_把一个属性或者方法定义成私有。
一、私有变量实例:
Animal.dart文件(子类)
    class Animal{
    String _name;   //私有属性
    int age; 
    //默认构造函数的简写
    Animal(this._name,this.age);

    void printInfo(){   
      print("${this._name}----${this.age}");
    }

    String getName(){ 
      return this._name;
    } 
    void _run(){
      print('这是一个私有方法');
    }

    execRun(){
      this._run();  //类里面方法的相互调用
    }
  }
  
  
parent.dart文件(父类)
  import 'lib/Animal.dart';
  void main(){
   Animal a=new Animal('小狗', 3);
   print(a.getName());
    a.execRun();   //间接的调用私有方法
  }
  
  
二、类中的getter和setter修饰符的用法
class Rect{
    num height;
    num width; 

    Rect(this.height,this.width);
    get area{
      return this.height*this.width;
    }
    set areaHeight(value){
      this.height=value;
    }
  }

  void main(){
    Rect r=new Rect(10,4);
    // print("面积:${r.area()}");   
    r.areaHeight=6;

    print(r.area);

  }

Dart 类的静态成员、操作符和类的继承

Dart中的静态成员:
1、使用static 关键字来实现类级别的变量和函数
2、静态方法不能访问非静态成员,非静态方法可以访问静态成员
class Person {
  static String name = '张三';
  int age=20;
  
  static void show() {
    print(name);
  }
  void printInfo(){  /*非静态方法可以访问静态成员以及非静态成员*/

      // print(name);  //访问静态属性
      // print(this.age);  //访问非静态属性

      show();   //调用静态方法
  }
  static void printUserInfo(){//静态方法

        print(name);   //静态属性
        show();        //静态方法

        //print(this.age);     //静态方法没法访问非静态的属性

        // this.printInfo();   //静态方法没法访问非静态的方法
        // printInfo();

  }

}
Dart中的对象操作符
 ?    条件运算符 
as    类型转换
is    类型判断
..    级联操作 (连缀)
实例:
 class Person {
     String name;
     num age;
     Person(this.name,this.age);
     void printInfo() {
       print("${this.name}---${this.age}");  
     }
   }

  p?.printInfo();


   Person p=new Person('张三', 20);
    if(p is Person){
        p.name="李四";
    } 


   p1=new Person('张三1', 20);
   (p1 as Person).printInfo();	



   Person p1=new Person('张三1', 20);
   p1..name="李四"
     ..age=30
     ..printInfo();
Dart中的类的继承:
  1、子类使用extends关键词来继承父类
  2、子类会继承父类里面可见的属性和方法 但是不会继承构造函数
  3、子类能复写父类的方法 gettersetter
1、简单继承:
 class Person {
   String name='张三';
   num age=20; 
   void printInfo() {
     print("${this.name}---${this.age}");  
   } 
 }
 class Web extends Person{

 }

 main(){   
   Web w=new Web();
   print(w.name);
   w.printInfo();
 }
2、复杂类的继承:super、类的继承覆写父类的方法、子类调用父类方法
 class Person {
  String name;
  num age; 
  Person(this.name,this.age);
  void printInfo() {
    print("${this.name}---${this.age}");  
  }
  work(){
    print("${this.name}在工作...");
  }
}

class Web extends Person{
  Web(String name, num age) : super(name, age); //super关键词的使用

  run(){
    print('run');
    super.work();  //子类调用父类的方法
  }
  //覆写父类的方法
  @override       //可以写也可以不写  建议在覆写父类方法的时候加上 @override 
  void printInfo(){
     print("姓名:${this.name}---年龄:${this.age}"); 
  }
  @override
  work(){
    print("${this.name}的工作是写代码");
  }

}

main(){ 

  Web w=new Web('李四',20);

  w.printInfo();

  w.work();

}

Dart 中的抽象类、多态以及接口

 Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。
  1、抽象类通过abstract 关键字来定义
  2、Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。
  3、如果子类继承抽象类必须得实现里面的抽象方法
  4、如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。
  5、抽象类不能被实例化,只有继承它的子类可以
abstract class Animal{
    eat();   //抽象方法
    run();  //抽象方法  
    printInfo(){
      print('我是一个抽象类里面的普通方法');
    }
  }

 /class Dog extends Animal{
    @override
    eat() {
       print('小狗在吃骨头');
    }

    @override
    run() {
      // TODO: implement run
      print('小狗在跑');
    }  
  }
  class Cat extends Animal{
    @override
    eat() {
      // TODO: implement eat
      print('小猫在吃老鼠');
    }

    @override
    run() {
      // TODO: implement run
      print('小猫在跑');
    }

  }

  main(){

    Dog d=new Dog();
    d.eat();
    d.printInfo();

     Cat c=new Cat();
    c.eat();

    c.printInfo();


    // Animal a=new Animal();   //抽象类没法直接被实例化

  }
Dart中的多态:
  允许将子类类型的指针赋值给父类类型的指针, 同一个函数调用会有不同的执行效果 。
  子类的实例赋值给父类的引用。
  多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。
Dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
使用implements关键字进行实现。使用抽象类定义接口。
abstract class Db{   //当做接口   接口:就是约定 、规范
   String uri;      //数据库的链接地址
   add(String data);
   save();
   delete();
}

class Mysql implements Db{
 
 @override
 String uri;

 Mysql(this.uri);

 @override
 add(data) {
   // TODO: implement add
   print('这是mysql的add方法'+data);
 }

 @override
 delete() {
   // TODO: implement delete
   return null;
 }

 @override
 save() {
   // TODO: implement save
   return null;
 }

 remove(){
     
 }

 
}

class MsSql implements Db{
 @override
 String uri;
 @override
 add(String data) {
   print('这是mssql的add方法'+data);
 }

 @override
 delete() {
   // TODO: implement delete
   return null;
 }

 @override
 save() {
   // TODO: implement save
   return null;
 }


}

main() {
 Mysql mysql=new Mysql('xxxxxx');
 mysql.add('1243214');
 
}

Dart 中的mixins

mixins就是在类中混入其他功能,在Dart中可以使用mixins实现类似多继承的功能
使用mixins的条件:
    1、作为mixins的类只能继承自Object,不能继承其他类
    2、作为mixins的类不能有构造函数
    3、一个类可以mixins多个mixins类
    4、mixins绝不是继承,也不是接口,而是一种全新的特性
class Person{
   String name;
   num age;
   Person(this.name,this.age);
   printInfo(){
     print('${this.name}----${this.age}');
   }
   void run(){
     print("Person Run");
   }
 }

 class A {
   String info="this is A";
   void printA(){
     print("A");
   }
   void run(){
     print("A Run");
   }
 }

 class B {  
   void printB(){
     print("B");
   }
   void run(){
     print("B Run");
   }
 }

 class C extends Person with B,A{
   C(String name, num age) : super(name, age);

 }

 void main(){  
   var c=new C('张三',20);  
   c.printInfo();
   // c.printB();
   // print(c.info);

    c.run();


 }

Dart 中的泛型

泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)
 class PrintClass<T>{
      List list=new List<T>();
      void add(T value){
          this.list.add(value);
      }
      void printInfo(){          
          for(var i=0;i<this.list.length;i++){
            print(this.list[i]);
          }
      }
 }
 
  PrintClass p=new PrintClass<int>();
  p.add(12);
  p.add(23);
  p.printInfo();

Dart 中的库

Dart中的库主要有三种:
1、我们自定义的库     
      import 'lib/xxx.dart';
2、系统内置库       
      import 'dart:math';    
      import 'dart:io'; 
      import 'dart:convert';
3、Pub包管理系统中的库  
    https://pub.dev/packages
    https://pub.flutter-io.cn/packages
    https://pub.dartlang.org/flutter/
    1、需要在自己想项目根目录新建一个pubspec.yaml
    2、在pubspec.yaml文件 然后配置名称 、描述、依赖等信息
    3、然后运行 pub get 获取包下载到本地  
    4、项目中引入库 import 'package:http/http.dart' as http; 看文档使用

希望上面的基础语法对于大家开发有一定的帮助:欢迎大家前来指正!!!