開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
『初めてのJavaScript 第2版』(シェリー・パワーズ著(Shelley Powers著)、武舎 広幸+武舎 るみ訳、オライリージャパン、2009年、ISBN978-4-87311-425-5) の13章(カスタムオブジェクトと例外の処理)、練習問第13-1、13-2、13-3、13-5.をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
練習問第13-1、13-2、13-3、13-5.
コード
sample.dart
import 'dart:html'; void main(){ var run = querySelector('#run'), clear = querySelector('#clear'), pre0 = querySelector('#pre0'); run.onClick.listen((MouseEvent event){ var result = window.navigator.userAgent + '\n'; MyClass c = new MyClass(); Element d0 = querySelector('#d0'); Element d1 = querySelector('#d1'); InputElement button = new InputElement(); button.type = 'button'; result += '1.\n'; var i; for (i = 0; i < 10; i += 1){ result += 'tripler($i) -> ${tripler(i)}\n'; } for (i = 0.5; i < 10.5; i += 1){ result += 'tripler($i) -> ${tripler(i)}\n'; } result += '3. (dart2jsでjavascriptに変換した場合、関数の定義で型を指定して、それ以外の型を渡してもエラーにならないみたい。)\n'; result += '引数は共に(num n)で、fはthrow文無し、gはifとthrow文有り。\n'; result += 'f(num n)\n'; [1, 'a', [1,2], () => null, {'a':1, 'b':2}].forEach((item){ try{ result += '${f(item)}\n'; } catch (e){ result += '$e: ${item}\n'; } }); result += 'g(num n)\n'; [1, 'a', [1,2], () => null, {'a':1, 'b':2}].forEach((item){ try{ result += '${g(item)}\n'; } catch (e){ result += '$e: ${item}\n'; } }); result += '引数を2つ以上渡した場合\n'; try{ result += '${f(1, 2)}\n'; } catch (e){ result += '$e\n'; } d0.innerHtml = ''; d0.text = '5.'; d0.append(button); button.value = '現在の状態: ${c.getState()}'; button.onClick.listen((MouseEvent event){ c.changeState(); button.value = '現在の状態: ${c.getState()}'; d1.style.backgroundColor = c.getColor(); }); pre0.text = result; }); clear.onClick.listen((MouseEvent event) => pre0.text = ''); } num tripler(num n){ return 3 * n; } String f(num n){ return 'エラー発生無し: f($n)'; } String g(num n){ if (n.runtimeType != int && n.runtimeType != double){ throw '引数には数値(num(int, double))を指定して下さい。$n'; } return 'エラー発生無し: f($n)'; } class MyClass{ // Dartでは、ライブラリーごとにデータの隠蔽 // 先頭が下線の変数が隠蔽される。 // 今回は同じライブラリー上なので、隠蔽はされない。 // とりあえず学習目的で、データメンバーの隠蔽とそれにアクセスするパブリックメソッドの定義 String _state = 'on'; String _background = '#fff'; void changeState(){ if (_state == 'on'){ _state = 'off'; _background = '#000'; } else { _state = 'on'; _background = '#fff'; } } String getState() => _state; String getColor() => _background; }
0 コメント:
コメントを投稿