1. 程式人生 > >dart語言入門(一)

dart語言入門(一)

箭頭 腳本 adf tin 關系 可變 移動 urn 下標

dart 目前可用於全平臺開發,是一門面向對象的編程語言;
應用場景;
web開發
跨平臺移動應用開發(flutter)
腳本或者服務端開發

語言入門

  • 數據類型
變量:
    使用 var聲明變量,可賦予不同類型的值
    未初始化時,默認值為 null
    使用 final 聲明一個只能賦值一次的變量
常量:
    使用 const 聲明常量
    使用 const 聲明的必須是編譯器常量

區別:
finnal:表示單一賦值,final 變量或字段必須初始化,一旦賦值,就不能改變 final 變量的值,final 修飾變量
const:修飾值,可以在創建集合的時候使用它,const 意味著對象的整個深度狀態可以在編譯時完全確定,並且對象將被凍結並完全不可變

- 數值型-Number
int :整形
double:浮點型
運算符:+,-,*,/,~/(取整),% 常用屬性:isNaN,isEven,isOdd 等 常用方法:abs(),round(),floor(),ceil(),toInt(),toDouble()
- 字符串x-String
使用單引號,雙引號創建字符串, 使用三引號創建多行字符串 差值表達式:"a + b = ${a+b}"或者"a = $a" 常用屬性:length,isEmpty,isNotEmpty 常用方法:contains(),subString(),startsWith(),endsWidth(),indexOf(),lastIndexOf(),split(),

- 布爾型-Boolean
此值不是 false 就是true
- 列表-List
常用方法:length,add(),insert(下標,元素),remove(元素),clear(),indexOf(),sort(),sublist(開始截取的下標)
- 鍵值對-Map
使用方法如 list
- Runes,Symbols

  • 運算符
    • 算術運算符
    • 邏輯運算符
    • 關系運算符
    • 賦值運算符:=,??=(左邊變量無值,取右邊,有值,取左邊)
    • 條件表達式:三目運算符,??運算符(左邊有值,取右邊,無值,取左邊)
  • 控制流
    • 條件語句
    • for循環
    • while||do while
    • break,continue
    • switch語句
  • 方法
    • 對象也是方法,並且有具體類型Function
    • 返回值類型,參數類型都可以省略
    • 箭頭語法:=>expr 是{returnexpr;}縮寫,只適用於一個表達式
    • 方法都有返回值,如果沒有指定,默認 return null最後一局執行
可選參數:[],或者{}
    printData1(String name,{int age,String gender}){
        print("name=$name,age=$age,gender=$gender");
    }
    printData1('李四',age:12,gender:'fafas');

    printData2(String name,[int age,String gender]){
        print("name=$name,age=$age,gender=$gender");
    }
    printData2('張三',12,'fafas');
可選參數必須放在必須的參數的後面;
指定默認參數值:
    printData1(String name,{int age = 10,String sex = '男'}){
        print("name=$name,age=$age,gender=$gender");
    }

方法對象

  • 方法可作為對象賦值給其他變量
void main() {
    Function func = printHello;
    func();
}
void printHello(){
    print('hello');
}
  • 方法可作為參數傳遞給其他方法
void main(){
    List list = [1,'dafasd',3,'fafasdf'];
    list.forEach(f);
    var list1 = ["h","e","l","l","o"];
    print(listTimes(list1,times));//[hhh, eee, lll, lll, ooo]
}
void f(e){
    print(e);   
}
String times(str){
    return str * 3;
}

List listTimes(List list,String f(str)){
    for (var i = 0; i < list.length; i++) {
        list[i] = f(list[i]);
    }
    return list;
}
  • 匿名方法
    • 可賦值給變量,通過變量進行調用
    ((){
        print('test');
    })();
    • 可在其他方法中直接調用或者傳遞給其他方法
    void main() {
        List list1 = ['h','e','l','l','o'];
        var result = listTimes(list1, (str){
            return str * 3;
        });
        print(result);
    }
    
    
    List listTimes(List list, String times(str)) {
        for (var i = 0; i < list.length; i++) {
            list[i] = times(list[i]);
        }
        return list;
    }
    

    匿名方法不能直接定義在 main 方法外面

  • 閉包
    • 閉包是一個方法(對象)
    • 閉包定義在其他方法的內部
    • 閉包能夠訪問外部方法內的局部變量,並持有其狀態
  • 構造函數

    通過創建一個和類名相同的函數,聲明一個構造函數(除此之外還有命名構造函數)
    構造函數通常用來創建一個類的實例

class Point {
    num x, y;

    Point(num x, num y) {
        this.x = x;
        this.y = y;
    }
    //或者
    Point(this.x,this.y);
}
  • 默認的構造函數

    如果沒有生命構造函數,將默認聲明一個構造函數,而且將調用父類的無參構造函數

  • 構造函數不能繼承

    子類不能從父類繼承構造函數.聲明的無參構造函數的子類只有默認的構造函數,也就是說沒有參數,沒有名字

  • 命名構造函數

    通過命名購銷函數實現一個類可以有多個構造函數,或者提供正對性的構造函數;
    class Point{ num x,y; Point(this.x,this.y); Point.origin(){ x=0; y=0; } }
    構造函數是不能繼承的,所以子類是不能繼承父類的命名構造函數的,如果希望使用父類中的構造函數創建子類的實例,就必須在子類中實現父類的構造函數

  • 調用父類非默認構造函數

    默認,子類的構造函數調用父類的非命名,無參構造函數.父類的構造函數在構造函數體之前調用,如果有初始化列表,初始化在父類構造函數之前執行,總之,執行順序如下;

    1.初始化列表

    2.父類的無參構造函數

    3.當前類的無參構造函數
    class Person { String firstName; Person.fromJson(Map data){ print(‘in person‘); } } class Employee extends Person { Employee.formJson(Map data) :super.fromJson(data){ print(‘in Employee‘); } } main函數:var emp =new Employee.formJson({‘data‘:‘dadfds‘});

dart語言入門(一)