- var hoge;
- final hoge;
初期化されていない変数は初期値は null
- main() {
- final name = "droid";
- var age = 4;
- var favor = 'ics';
- // コンソールに出力
- print("Hello, my name is ${name}.");
- print('I like ' + favor + '!');
- }
- "Hello, ${name}"
- 'Hello, $name'
- 'Hello' + name
@"..." で /n などが無視される raw string になる
■ クラス
class Hoge {}
- class Droid {
- var name = 'droid';
- greet(favor) {
- print("Hello, my name is ${name}.");
- print('I like ' + favor + '!');
- }
- }
- main () {
- var droid = new Droid();
- droid.greet('ics');
- }
dart では全てのクラスは Object クラスを継承している non-Object クラスを継承したい場合は extends を使う
通常の変数と同じように、生成したクラスのインスタンス変数には var か final もしくは各タイプを使う必要がある
コンストラクタを明示的に定義していない場合は、引数なしのコンストラクタが定義されていることになる
コンストラクタを明示的に定義した場合は、引数なしのコンストラクタも必要な場合は明示的に定義する必要がある
- class Droid {
- var name = 'droid';
- // コンストラクタ
- Droid();
- Droid.withName(this.name);
- greet(favor) {
- print("Hello, my name is ${name}.");
- print('I like ' + favor + '!');
- }
- }
- main () {
- var droid = new Droid.withName('dronjo');
- droid.greet('gingerbread');
- }
_ で始まる変数は private になる。それ以外は public になる。
- class Droid {
- String _name = 'droid'; // private
- String get name() => _name; // getter
- void set name(String name) { // setter
- if(name == null) name = "";
- if(name.length > 20) throw 'name is too long!';
- _name = name;
- }
- greet(favor) {
- print("Hello, my name is ${name}.");
- print('I like ' + favor + '!');
- }
- }
- main () {
- var droid = new Droid();
- droid.name = 'dronjo';
- droid.greet('gingerbread');
- }
■ Interfaces
implements Hoge
- class Droid implements Comparable {
- String name = 'droid'; // private
- // コンストラクタ
- Droid();
- Droid.withName(this.name);
- greet(String text) => print('$name, $text');
- int compareTo(Droid d) => name.compareTo(d.name);
- }
- main () {
- var droid = new Droid();
- droid.name = 'dronjo';
- var droid2 = new Droid.withName('dronjo');
- droid.greet('gingerbread');
- num result = droid2.compareTo(droid);
- if(result == 0) {
- droid2.greet('you are the same.');
- } else {
- droid2.greet('you are different.');
- }
- }
Optional types (実態は interfaces)
String, num, int (num を継承), double (num を継承), 等
自分で static な type を追加することもできる
final を加えて定義できる final String hoge;
Built-in types
- String
- StringBuffer
- num
- int (num を継承)
- double (num を継承)
- bool
- List (JavaScript の array にコンパイルされる)
- Map
- // string -> int
- var one = Math.parseInt("1"); // 1
- // string -> double
- var onePointOne = Math.parseDouble("1.1"); // 1.1
- // int -> string
- String oneAsString = 1.toString(); // "1"
- // double -> string
- String piAsString = 3.14159.toStringAsFixed(2); // "3.14"
■ List
- // 可変長リスト
- var list = [1,2,3];
- // リストの長さ
- print(list.length);
- // 要素の取得
- print(list[1]);
- // 要素の追加
- list.add(4);
- // 要素の削除
- list.removeRange(2, 1);
- // 固定長リスト
- var list = new List(4);
for...in
- var list = [1,2,3];
- for (final x in list) {
- print(x);
- }
forEach()
- var list = [1,2,3];
- void printElement(element) => print(element);
- list.forEach(printElement);
- var list = [1,2,3];
- list.forEach((element) => print(element));
Collection document
■ Map
- var gifts = {
- // keys values
- "first" : "partridge",
- "second" : "turtledoves",
- "fifth" : "golden rings"};
key は string でなければならない
Map のコンストラクタを使ったり、Hashable を実装した別のオブジェクトを使えば key の他のタイプを使うことができる
- // Map コンストラクタを使う
- var map = new Map();
- map[1] = "partridge";
- map[2] = "turtledoves";
- map[5] = "golden rings";
存在しない key の value を取得しようとすると null が返ってくるが、そもそも value は null を取ることができるので、 containsKey() や putIfAbsent() でチェックする
- var gifts = { "first": "partridge" };
- gifts["fourth"] = "calling birds";
- // 長さ
- print(gifts.length);
- // 削除
- gifts.remove('first');
- // コピー
- var regifts = new Map.from(gifts);
- print(regifts['first']);
Iterating
forEach()
- var gifts = {
- "first" : "partridge",
- "second": "turtledoves",
- "fifth" : "golden rings"};
- gifts.forEach((k,v) => print('$k : $v'));
keys や values だけ必要な場合は getKeys(), getValues() でそれぞれの Collection オブジェクトが取得できる
- var gifts = {"first": "partridge", "second": "turtledoves"};
- var values = gifts.getValues();
- values.forEach((v) => print(v));
Hashable document
■ Functions
=> e シンタックスは {return e;} の短縮形
関数引数を [] を囲むと、オプショナルな引数になる
- String say(String from, String msg, [String device]) {
- var result = "$from says $msg";
- if (device != null) {
- result = "$result with a $device";
- }
- return result;
- }
- String say(String from, String msg, [String device='carrier pigeon']) {
- var result = "$from says $msg";
- if (device != null) {
- result = "$result with a $device";
- }
- return result;
- }
- print(say("Bob", "Howdy", device: "tin can and string"));
- bool isOdd(num i) => i % 2 == 1;
- List ages = [1,4,5,7,10,14,21];
- List oddAges = ages.filter(isOdd);
- List ages = [1,4,5,7,10,14,21];
- List oddAges = ages.filter((i) => i % 2 == 1);
- var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
- print(loudify('hello'));
- Function makeAdder(num n) {
- return (num i) => n + i;
- }
- main() {
- var add2 = makeAdder(2);
- print(add2(3)); // 5
- }
■ Exceptions
- try {
- breedMoreLlamas();
- } catch (final OutOfLlamasException e) { // a specific exception
- buyMoreLlamas();
- } catch (final Exception e) { // anything that is an exception
- print("Unknown exception: $e");
- } catch (final e) { // no specified type, handles all
- print("Something really unknown: $e");
- }
- try {
- breedMoreLlamas();
- } catch (final e) {
- print("Error: $e"); // handle exception first
- } finally {
- cleanLlamaStalls(); // then run finally
- }
■ 参考
- Language Tour
- Dart Style Guide
Dart Style Guide の規定では、インデントは 2 spaces - Language Specification
0 件のコメント:
コメントを投稿