http://usagi.github.com/intro-dart/
Note: この資料は2次元構成です。
(茶道楽の人
)
そんなこんなで今日はGoogle Dart Hackathon
でDart入門セッションや
tutorとして参加させて頂く事に。
お茶も好きだけど美味しい食べ物も大好きだよ!
よろしくお願いします
∪・x・∪
あ、そうそう…
cpprefjpとかC++JPとかProgramming(中略)C++とかもよろしく☆(ゝω・)vキャピ
2011年5月12日現在も言語仕様ver.0.09の開発が進行中!
言語仕様の変化を追い掛けるには…?
↓
最新の言語仕様(English)には、最初のver.0.01から現行仕様に至るまでの全ての変更が冒頭に記述されている。
↓
C++の言語仕様書やPHPのオンラインリファレンスなどに比べたらチョット癖のある文書だし不足もあるけど、、、Java、C++、JavaScriptなどの言語使用経験があれば必要に応じて現行仕様を斜め読みに突っつきながらでも(たぶん)大丈夫!Happy Hacking!!
English シンドイネー…
↓
ちょっと古い(&ちと訳出怪しいトコもある)けど、
株式会社クレスさんが邦訳版を公開しています
※dartrefjpでも最新言語仕様をコミュニティ版として邦訳したいのだけど…
(・x・)
JavaScript(ECMA-262) シンドイネー…
↓
ECMA-262の大規模な改訂はここ10年間程で何度か調整に失敗。現在はECMAScript 6th(Harmony)を2013年の策定を目処に…
↓
GoogleECMAScriptの改訂に掛けるより、新たにイケてるウェブスクリプティング言語作っちゃった方が良いんじゃないかしら…
↓
2011年10月 Dart誕生!
(開発中はDashと呼ばれていた)
Dartの目標はJavaScriptの完全な置き換えだけど…
↓
まだまだこれから!
まだまだこれから!
今日はそんなDartで
ゆっくり楽しんでいってね!
main() {
String name = 'World';
print('Hello, ${name}!\nYesterday is ${new Date.now().day - 1}');
}
Hello, World!
Yesterday is 11
main() {
for (int n = 1; n < 100; ++n) {
String say = '';
bool fizz = n % 3 === 0;
bool buzz = n % 5 === 0;
if (fizz)
say += 'Fizz';
if (buzz)
say += 'Buzz';
else if (!fizz)
say = n.toString();
print(say);
}
}
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
for (int n = 0; n < 100; ++n) { // <-- `int`
String result; // <-- `String`
bool fizz = n % 3 === 0; // <-- `bool`
bool buzz = n % 5 === 0; // <-- `bool`
組み込み型の基礎については
dartrefjp/Dart言語ツアー/組み込み型
もどうぞ!
for (var n = 0; n < 100; ++n) { // <-- `for`
if (n_is_fizz) // <-- `if`
result += 'Fizz';
if (n_is_buzz) // <-- `if`
result += 'Buzz';
else if (n_is_fizz) // <-- `else if`
result = n;
組み込み型の基礎については
dartrefjp/Dart言語ツアー/演算子
もどうぞ!
void print2(var v) { print(v * 2); }
main() {
var vs = [1, 7, 3, 2, 0, 5, 0, 4];
print('--1--');
vs.forEach(print);
print('--2--');
vs.forEach(print2);
print('--3--');
vs.forEach( (a) => print(a*a) );
}
関数とラムダ式の基礎については
dartrefjp/Dart言語ツアー/関数
もどうぞ!
interface i1 { num m1(); }
interface i2 extends i1 { num m2(); }
interface ix { num mx(); }
class c1 implements i1 { num m1() => 1; }
class c2 extends c1 implements i2 { num m2() => 2; }
class c3 extends c2 implements ix { num mx() => 3; }
main() {
print('--1--');
var one = new c1();
print(one.m1());
print('--2--');
var two = new c2();
print(two.m1());
print(two.m2());
print('--3--');
var three = new c3();
print(three.m1());
print(three.m2());
print(three.mx());
}
※クラスの多重継承はできない。
class c<T extends double> {
T m(T t) => t * t;
}
main() {
var i = new c();
print( i.m(1.41421356) );
}
やや複雑な言語機能は実際にコードを
動かして慣れてからでも大丈夫・x・b
dart:core (dart:coreimpl) / dart:isolate
html / io / json / uri / utf
註: dom (deprecated) → html(※参考リンク)
ちょっと寂しい様な…?
↓
dart:coreの中に、
Math、Date / Duration / Stopwatch、RegExp、HashMap<K,V> / Set<E> / List<E> / Queue<E> ...
…などなど、まだまだ少ないながら基本的なプログラミングパーツは盛り込まれつつある
∪・x・∪
不足は今日Hackするといいよ!
( ・`д・´)
APIリファレンスの日本語って…
⇣
dartrefjp/API リファレンスで頑張ってるよ!
(協力者随時募集中!)
Math.randomで疑似乱数、Math.sqrtで2乗根を求めるよ!
main() {
final int n_max = 100 * 1000;
var in_count = 0;
var print_pi = (n) => 4.0 * in_count / n;
for(var n = 0; n < n_max; ++n){
var x = Math.random();
var y = Math.random();
var d = Math.sqrt(x*x+y*y);
if(d <= 1.0)
++in_count;
if(n % 500 === 0)
print('${n}-th result: ${print_pi(n)}');
}
print('${n_max}-th(final) result: ${print_pi(n_max)}');
}
※Dart APIの疑似乱数生成エンジン Math.random は、
品質が悪く、先月末から改善に取り組み始めたみたい。
ゲームやシミュレーションでは気を付けて!
(Dartには固定精度整数やreinterpret_castは無いので
ユーザーコードで機能的かつ高速な疑似乱数生成エンジンを実装する事は難しい)
(※正しくは"処理系"ではなくDart専用のideone.com的なソレ)
<!-- Copyright (c) 2011, the Dart project authors.Please see the AUTHORS file
for details. All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file. -->
<html>
<head>
<title>Hi Dart</title>
</head>
<body>
<h2 id="status">dart is not running</h2>
<script type="application/dart" src="hi.dart"></script>
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
</body>
</html>
動作画像とぷち解説等はDart -ing/Dartium を使ってみる など参考になります・w・b
(後述の)Dart Editorを使うとDartiumで実行可能なHTML/DART/JSの雛形などもあり便利ですよ!
% cat hello.dart
main() {
var name = 'World';
print('Hello, ${name}!');
}
% dart hello.dart
Hello, World!
% cat hello.dart
main() {
var name = 'World';
print('Hello, ${name}!');
}
% frogc hello.dart
% ls hello.dart*
-rw-r--r-- 1 usagi users 67 5月 11 06:27 hello.dart
-rw-r--r-- 1 usagi users 15K 5月 11 06:27 hello.dart.js
% cat hello.dart.js
(※見せられないよ><)
% d8 hello.dart.js
Hello, World!
実装が気になる…
⇣
っ【ソース】
(Google Project)
入手について日本語化してあるのでどうぞ!
(・∀・)b
⇣
dartrefjp/Dart SDK
(元の公式Englishページはこちら)
⇣
もっとグラフィカルな開発環境を使いたいです><
⇣
(後述の)Dart Editorをどうぞ!
あ、そうそう…もしArch Linuxをお使いなら!
⇣
AURのパッケージをどうぞ!
Dart Editor(の配布パッケージ)
= IDE + SDK + Dartium + Sample
これさえ手に入れれば開発環境準備完了!
↓
日本語ないの…?
↓
アリますよ!
↓
dartrefjp/チュートリアル: Dart Editor
※MacOSXもWindowsもほぼ同じなので"for Linux"しか邦訳していない点はご容赦下さい・x・;
ステップ2からのチュートリアルが肝心です!
開発中はchecked mode!
↓
配置時はproduction modeへ
※Dartboardでもcheckedは使えるし、モード選択はURLにも保存される
Computer Language Benchmarks Game互換のn-bodyコードをDartで書いてみました。
↓
多体問題シミュレーションの様な計算量が必要な処理の
ベンチマーク結果が気になる方は結果記事(1,2)などどうぞ・x・
簡単なDartソースコードのサンプルとして覗いて見てもいいかも
とかあります
∪・x・∪
Vimに慣れている方はどうぞ!
この後は…