[Flutter 學習筆記] Dart 語法 (2)

Prerequisite

由於平常主要寫的程式語言是 Java ,因此自然而然會以 Java 的角度去比較與 Dart 有什麼不同。
這邊會記錄一些目前學到或用到,然後覺得可以稍微筆記一下的小差異。

DartPad 這是一個線上 IDE,可以直接在上面輸入 Dart 語法打程式。

這篇主要紀錄四個差異:

  1. 物件產生
  2. 建構子
  3. private
  4. final vs const

Dart 語法特性

1. 物件產生

Java 中,我們的 class 可能會長這樣:

class Person {
    String name;
    Integer age;

    Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }   
}

這說明我們 Person 的類別有兩個參數,一個是 name ,另一個是 age
當我們要產生 Person 物件時,我們的寫法會長這樣:

Person person = new Person("Jake", 25);

但在 Dart 語言中,我們的寫法可以簡化為:

class Person {
    String name; // 因為 Dart 不是強型別,所以也可以改成 var name; var age;
    int age;

    Person(this.name, this.age);
}

產生物件的話我們則可以寫成:

Person('Jake', 25); // 字串部分,單引號雙引號都可以,跟 Javascript 雷同

有沒有看到 Dart 的語法更簡潔,但也是非常清楚的。

2. 建構子

在建構子的部分,再進一步分享一下我覺得 Dart 超棒的地方,讓我們來看一下下方程式:

Person({this.name, this.age});

有沒有看到多了一個大括號,有了這個大括號我們就不用像 Java 一樣,每次產生物件時,都要照順序將我們的參數方進去囉!

這時我們可以有三個產生物件的發法:

Person();  // 第一種,沒傳入參數的
Person(age: 25);  // 第二種,只傳入 age 參數
Person(name: 'Jake');  // 第三種,只傳入 name 參數
Person(age: 25, name: 'Jake'); // 第四種,傳入兩個參數

相信大家都有發現,很不一樣的是我在傳入參數時,多給了他的參數名,也就是加了 name:age: 這個動作。

當我們加上大括號 {} 以後,有兩個地方需要注意:

  1. 這個大括號裡面的參數是可以不照順序的,所以如果參數很多的話我們就不需要記住每一個參數,特別是參數的型別如果都一樣,可以減少一些錯誤的機會。
  2. 在括號裡面的參數不是強制要求,所以如果我們想要讓 name, 跟 age 都是一定要傳入的參數的話,我們要寫成 Person({@required this.name, @required this.age});

其中 @required 這寫法是用到另外的 Library,但因為我是在學習 Flutter,所以使用這個寫法是沒問題的

3. Private

Java,如果我們想要讓某個變數,或 Function 變成 private 的,我們就會在前面加上 private:

private String name;

private void yourFunction(String name) {
... // do somthing
}

加上 private 後,我們的 nameyourFunction 只能在自己產生的 instance 裡面使用。

在這邊,Dart 有非常類似的做法:

String _name;

void _yourFunction(String name) {
... // do somthing
}

我們只需要在變數Function 名稱前面加一個 _,就可以做到一樣的事情了!

4. final vs const

finalconst 都是特殊的保留字,當參數前面有這兩字的任一個時,代表這個參數是不能被改變的。

舉個例子,如果在程式中看到

final String name = 'Jake';
name = 'Tom'; // 這行會錯,因為我們已經在 name 前面給了 final 的關鍵字了

好了,那這兩個到底差在哪呢?

  • final: 差異在我們可以在 rumtime 階段,才給有 final 保留字的參數值,但是在給定以後,就不能更改。
  • const: 在 compile 階段就需要給定參數了,給定後就不能更改。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *