開発環境
- 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 コメント:
コメントを投稿