官术网_书友最值得收藏!

2.3 Dart中的內置數據類型

通過前面的學習,對于數據類型你已經有了簡單的理解。在Dart中,萬事萬物皆是對象。也就是說,無論是什么類型的數據,其都是某個類的實例,在Dart中,你可以使用字面量來創建這些對象,也可以使用類的構造器來創建這些對象(非抽象類)。

Dart中內置了7類特殊的數據類型,分別為numbers(數值類型)、strings(字符串類型)、booleans(布爾類型)、lists(列表類型)、maps(圖類型)、runes(字符類型)和symbols(符號類型)。本節我們主要學習這些內置的數據類型。

2.3.1 數值類型

顧名思義,數值類型用來描述與數值相關的數據。在數學中,數有多種分類方法,比如可以分為整數、小數,也可以分為正數、負數等。在Dart中,數值類型有兩種,分別為int和double。int是integer的縮寫,用來描述整型數據;double是雙精度浮點類型,即用64位來描述帶有小數的數值。

可以使用字面量來直接創建數值對象,例如:

    int a = 99;
    int b = 0xA1;
    print(a);//99
    print(b);//161

如果使用0x開頭定義數值,就表示使用十六進制數值。如果一個數值包含小數,就需要將其定義為double類型。我們也可以使用直接定義與指數定義來定義小數,例如:

    double c = 3.14;
    double d = 1.4e2;
    print(c);//3.14
    print(d);//140.0

e符號表示科學計數法,上面的1.4e2表示1.4乘以10的2次方,最終的結果為140。需要注意,雖然結果為整數,但其類型依然是double類型。在Dart 2.1版本后,整型數值是可以直接賦值給浮點型變量的,Dart會自動處理將其轉換成浮點數,例如:

    double e = 1;
    print(e);//1.0

int和double類型中都定義了許多常用的屬性和方法,通過屬性我們可以獲取許多關于當前數值對象的信息,例如:

數值類型中還定義了許多常用的方法,這個方法實際上就是函數,它們幫助開發者對數值數據進行操作,例如:

上面列舉的方法都有詳盡的注釋,并且這些方法是int類型對象和double類型對象所通用的。對于int類型數據,其還可以調用許多獨有的方法,例如:

2.3.2 字符串類型

字符串是編程中常用的數據類型。在Dart中,可以使用單引號或者雙引號來創建字符串,例如:

    var str1 = "Hello";
    var str2 = 'World';

更多時候,我們需要對字符串進行格式化,例如將某個變量的值插入字符串中,或者將某個表達式的運算結果插入字符串中。在Dart中,使用$來進行字符串的格式化,例如:

需要注意,如果要將表達式的值插入字符串中,就需要使用大括號標記,即${}。

字符串也支持直接使用“+”運算符來進行拼接,示例如下:

    var str1 = "Hello";
    var str2 = 'World';
    print(str1+str2);//HelloWorld

其實,即使你不使用運算符,相鄰的字符串也會自行進行拼接,例如:

    print('hello''world');//helloworld

使用3對單引號或者3對雙引號可以進行多行字符串的創建,在某些應用場景下,這個語法特點十分有用,例如:

    var str5 = '''第一行
    第二行
    第三行''';
    var str6 = """第一行
    第二行
    第三行""";

和C語言類似,Dart中的字符串也支持使用反斜杠來進行字符的轉譯,常用的轉譯字符是引號與換行符,例如:

    print('hello \'琿少\'');//hello '琿少'
    //hello
    //world
    print("hello\nworld");

當然,如果你不想進行轉譯,想讓字符串完全匹配其字面的意思,就可以使用原始字符串,例如:

    print(r"hello\nworld");//hello\nworld

上面的示例代碼中,我們都是采用字面量直接進行字符串對象的創建的,其實也可以使用構造方法來創建字符串,例如:

    var str7 = String.fromCharCode(97);//字符碼97對應字符a
    var str8 = String.fromCharCodes([97,98,99]);//abc

可以通過調用字符串對象的一些屬性來獲取當前字符串的相關信息,列舉如下:

String類中的相關方法也可以幫助我們對字符串進行運算或修改,列舉如下:

除了上面列舉的方法外,如果要對字符串進行拷貝,就可以直接使用“*”運算符,例如:

    print("hello"*2);//hellohello

其實,字符串也是一種集合類型,在Dart中,集合類型的數據都可以使用中括號來獲取集合內的某個元素,例如:

    print("hello"[0]);//h

2.3.3 布爾類型

布爾類型是Dart中一種簡單的數據類型,其只有兩個字面量值:true和false。

布爾類型雖然簡單,卻是編程中必不可少的數據類型。在實現復雜的邏輯分支時,往往需要判斷大量的條件,布爾運算是條件運算的核心。定義布爾值的示例如下:

    bool a = true;
    bool b = false;

布爾類型非常簡單,bool類中沒有封裝太多的屬性,可以使用runtimeType來獲取類型:

    bool a = true;
    bool b = false;
    print(a.runtimeType);//bool

可以調用布爾對象的toString方法來將布爾值轉換成字符串,例如:

    bool a = true;
    print(a.toString());//true

2.3.4 列表類型

列表用來存放一組數據,在許多編程語言中,列表這種數據類型也被稱為數組。在Dart中,列表具體的數據類型由其中的元素類型決定,例如下面是完整的聲明列表變量的格式:

    List<int> list = [1,2,3,4];

其中,尖括號中的類型用來指定列表中元素的類型,如果列表明確了其中元素的類型,它就只能存放這種類型的數據,否則會產生運行時異常。例如下面的寫法是不允許的:

    List<int> list = [1,2,3,4,"5"];

若想在列表中存放不同類型的數據,則可以將列表聲明成動態類型的,例如:

    List<dynamic> list = [1,2,3,4,"5"];

其實更多時候,我們不需要手動指明列表的類型,可以利用Dart的類型推斷特性,直接使用var進行聲明即可,例如:

    var list = [1,2,3,4,"5"];

除了使用字面量來進行列表對象的創建外,我們還可以通過構造方法來創建,示例如下:

需要注意,使用new關鍵字調用構造方法是Dart的標準對象構造語法,Dart 2允許開發者在調用構造方法時省略new關鍵字,這使我們的代碼看起來更加簡潔清爽。

下面列舉列表對象中的一些常用屬性:

和字符串一樣,列表也可以使用中括號進行取值或設置值,同樣支持使用運算符進行相加操作,例如:

需要注意,在對列表中的值進行設置時,如果下標超出了列表元素的個數,就會產生溢出異常。

List類中封裝了大量的實例方法,這些方法可以極大地提高開發者的工作效率,列舉如下:

2.3.5 字典類型

相信你一定有過查詞典的經歷。以英漢詞典為例,當你需要學習某個漢語詞匯對應的英文詞匯時,首先需要在索引處找到這個漢語詞匯,不同的漢語詞匯有可能會查到相同的英文詞匯。字典數據類型也是這樣的,更精確的說法是,字典是一組鍵值對的集合,通過鍵可以完成對值的修改、查找、添加或刪除。在Dart中,字典類型叫作Map。

使用大括號可以通過字面量值創建字典對象,例如:

對于Map類型,在創建時,鍵和值要成對出現。一般情況下,鍵都是字符串類型的。但是在Dart中并沒有嚴格的語法規定,鍵可以是任意類型的,值也可以是任意類型的。但是需要注意,與List類型一樣,一旦Map的類型被確定,其鍵和值的類型就必須遵守。完整的Map類型變量的聲明格式如下:

    //鍵為字符串類型、值為整數類型的字典
    Map<String,int> map2 = {"1":1,"2":2};

通過鍵可以實現對值的獲取、設置和新增,例如:

Map對象中常用的屬性列舉如下:

同樣,Map類中也封裝了許多實例方法可以供我們直接使用,示例代碼如下:

主站蜘蛛池模板: 新建县| 丽水市| 桂阳县| 旌德县| 淄博市| 津市市| 沂南县| 上饶市| 化德县| 阿荣旗| 克东县| 平泉县| 含山县| 海兴县| 扶风县| 蓝田县| 贵阳市| 东至县| 沙田区| 连州市| 广德县| 灵武市| 静宁县| 庄河市| 绥德县| 东明县| 门源| 新郑市| 越西县| 鄂托克前旗| 吉林市| 大冶市| 余姚市| 武穴市| 伊宁县| 漠河县| 夏邑县| 都兰县| 志丹县| 嘉荫县| 平乡县|