對 Dart 的感想
對 Dart 的感想
感覺 Dart 介乎 JavaScript 和 Java 之間
對比 Java
void main() {
var person = new Person();
person.firstName = 'Jason';
person.printName();
}
class Person {
String firstName;
Person(name) {
firstName = name;
}
printName() {
print(firstName);
}
}
和 Java 相似:
-
class
class Person
-
constructor
Person(name)
和 Java 不同:
- 語化對比 Java 有所簡化, 沒有 public, protected, private. If an identifier starts with an underscore (_), it’s private to its library. For details, see Libraries and visibility.
- 一個 dart file 可以有不同 public class, simplify file structure
對比 JavaScript
class Deck {
List<Card> cards = [];
Deck() {
var ranks = ['Ace', 'Two', 'Three', 'Four'];
var suits = ['Diamonds', 'Hearts'];
for (var suit in suits) {
for (var rank in ranks) {
var card = new Card(suit: suit, rank: rank);
cards.add(card);
}
}
}
toString() {
return cards.toString();
}
shuffle() {
cards.shuffle();
}
cardsWithSuit(String suit) {
return cards.where((card) => card.suit == suit);
}
deal(int size) {
var hand = cards.sublist(0, size);
cards = cards.sublist(size);
return hand;
}
removeCard(String suit, String rank) {
cards.removeWhere((card) => (card.suit == suit) && (card.rank == rank));
}
}
class Card {
String suit;
String rank;
Card({this.suit, this.rank});
toString() {
return "$rank of ${suit}";
}
}
和 JavaScript 相似:
-
Simple syntax & expression
var ranks = ['Ace', 'Two', 'Three', 'Four'];
-
String template
return "$rank of ${suit}";
-
Arrow function
cards.removeWhere((card) => (card.suit == suit) && (card.rank == rank));
和 JavaScript 不同:
-
Named constructor
Card({this.suit, this.rank});
-
有 Standard library
-
有 Strong type, 但有 type inference
-
有 Generic
其他特點
- 內置格式化工具 dmf