SlideShare a Scribd company logo
15分でわかった気になる
Dart
「Angular 4 の最新動向と、2017年再注目のDart、そしてAngular Dart 」
Dart の部 1/3
HRMOS事業部 小林 達
at BizReach on 2017.3.6
自己紹介
✓ 小林 達 (こばやしさとし)
✓ HRMOS[ハーモス]プロダクト開発部
✓ マネージャ兼エンジニア。最初の開発者
✓ 仕事では Scala (というよりJIRAとかGoogle Sheetとか)
✓ Dart は趣味です。。
● ウォッチ歴数週間
● 学習歴数日
Dart を取り巻く状況
Dartってどんな言語?
✓ 2011年にGoogleが発表
✓ Java、JSに似たシンタックスの動的型付け言語
● JITコンパイルされ、DartVM上で動作する
● dart2jsでJSに変換できるのでブラウザでも動く
✓ ECMA-408で標準化されている
※ 出典(Dart/Flutter入門(2017.2.27))
触ってみた感触としては
✓ Java、JavaScript等がかければすんなり書ける
✓ 型を書いても書かなくてもいい
✓ async/await, class周りのサポート
✓ パッケージマネージャー、IDEサポートの充実
✓ "ちょうどいい" 言語
● Javaのレガシーさを取り除いている
● Goほど記述量は多くない
● Scalaほど難しくない
※ 出典(Dart/Flutter入門) + 少し改変
黒歴史
✓ 当初はブラウザ上で動作し、JavaScriptを置き換える目的
● 各ブラウザがDartVMを搭載する必要がある
● やっぱりそれは無理なのであきらめた
● (dart2jsでJSに変換して動かすことはできる)
※ 出典(Dart/Flutter入門)
2017年、Dart 復権の兆し
✓ TIOBE Indexによると2016年に
”0.95%増加したDartは 〜 26位から17位へ急上昇”
✓ AdSense/AdWordsは、全面的にAngular Dartでリプレイス
2017年、Dart 復権の兆し
Google AdSense のリニューアル
The new Google AdSense user interface: built with AngularDart
(2016/10 の意訳)
✓ 初版は2003年リリース。Google Web Toolkit (GWT) で作られていた
✓ 開発者は全体で100人近く、およそ25%がDartを使っていた
✓ Dart部分は、16万行
✓ 開発始めて2.5年、Dartを使って1.5年、Material Design化を8ヶ月
✓ コンパイルは8倍、開発時のページ読み込みは6-7倍、生産性は全体で2倍
2017年、Dart 復権の兆し
Google AdWords のリニューアル
The new AdWords UI uses Dart — we asked why
(2016/3 の抜粋)
✓ Q: Why not Closure lib? GWT? TypeScript? Vanilla JS?
✓ (前略) 〜 巨大でミッションクリティカルなアプリケーションを作れる能力があるかど
うか、つまり、よいUXで、低遅延で、機能追加も継続的にできること。UXデザイナー
に十分な柔軟性を与えられるかどうか 〜 ワールドクラスの低遅延を実現できるか
どうか。多くの顧客が一日中、膨大なデータを処理するので速いことは超重要〜
(後略)
Dart 言語
公式サイトのウリ
✓ ライブラリやツールの堅固な基盤
コアなライブリラリやツールなしではプログラミング言語は意味がない。Dartは今まで何年も巨大なアプリケーションを支
えてきた
✓ 一般的なプログラミング作業を簡単に
アプリケーション開発には、普遍的に見られる問題とエラーがある。Dartは、それらの問題により簡単に退治でき、それ
らのエラーをより簡単にキャッチできる。async/await や generators、 string interpolation やエラー検知などはそのため
にある。
✓ プログラマーを驚かさない
何をタイピングするかと何が起こるかの間はとてもストレートであるべき。魔法 (自動的な型の強制、変数の巻き上げ、
グローバルのヘルパー、、、) は大きなアプリケーションとは相性がよくない
✓ 安定して実用的な解を
Dartは、ときどき退屈かもしれない。私たちは生産的で安定的である方を好む。私たちは長く走り続けられるために、大
規模なアプリケーションを開発するコアなカスタマーらと密に作業している
Terse
タァース。昨年のカンファレン
スでよく聞いたキーワード。
最近のDartを象徴的に表す
ワード。
発表から6年経つが、活発な開発
February 14, 2017 Dart 1.22: Faster tools, assert messages, covariant overrides
December 07, 2016 Dart 1.21: Generic Method Syntax
October 17, 2016 Good-bye symlinks (1.20.0)
August 26, 2016 Dart 1.19: Improved developer experiences
July 28, 2016 Dart 1.18: Laying foundations
April 26, 2016 Dart 1.16: Faster tools, updated HTML APIs
March 09, 2016 Dart 1.15: Updated Dartium and improved live code analysis
January 29, 2016 Dart 1.14 continues to improve core APIs and tools
November 18, 2015 Dart 1.13 brings improved JavaScript interoperability and more
Jun 25, 2015 Dart 1.12 Released, with Null-Aware Operators and more
May 28, 2015 1.11.0, March 26, 2015 1.10.0
November 28, 2014 Dart 1.9: The release you’ve been await-ing for
October 15, 2014 Dart 1.8: library improvements and experimental support for enums
August 27, 2014 Dart 1.7: easily share and use command-line applications built with Dart
April 09, 2014 Dart 1.4 Brings Deep Visibility to Run Applications
June 26, 2014 Dart 1.6 adds support for deferred loading
May 21, 2014 Dart 1.5 makes it easier to develop for the mobile web
August 31, 2015 Dart 1.3 dramatically improves server-side performance
February 26, 2014 Dart 1.2 continues to improve developer experience
January 16, 2014 Dart 1.1 features up to 25% faster Javascript
November 14, 2013 Dart 1.0: A stable SDK for structured web apps
DartPad で試す
DartPad は、オンラインエディタ
https://dartpad.dartlang.org/
✓ JSFiddleとかと似ている。コンソール出力だけでなくHTMLも
✓ Shareすると永続化できる。埋め込みできる
✓ Strong Mode (後述)
Dart のインストール
Macの方は brew で。ドキュメントはこちら
※ IntelliJ で、Dartium 使います
brew install dart --with-content-shell --with-dartium
IntelliJ・WebStorm
✓ JetBrainsの公式プラグインをインストールする
✓ Atom、Sublime VS Code、Vimなどにもプラグインあり
Dart のコードを少し
数値、文字列、真偽、、
✓ すべてオブジェクト (クラス名が小文字始まりでも)
✓ int などは初期化しないと null
✓ bool は true 以外 (の 1、'str', obj など) は、すべて false
✓ 過去のしがらみがないためか分かりやすい
var name = 'Bob';
String name2 = 'Bob';
final String name3 = 'Bob';
const bar = 1000000;
var foo = const [];
int count;
assert(count == null);
3.14159.toStringAsFixed(2) == '3.14';
var v1 = "y";
assert(x is ${v1.toUpperCase()} ' == x is Y);
Map
✓ JavaScriptと違って、Object と Map は全く別物
✓ Mapのメソッドは、forEach, putIfAbsent, contains, isEmpty など
✓ dart:collectionパッケージには、(Javaみたく)多くのコレクションあり
var gifts1 = {
'first' : 'partridge',
'second' : 'turtledoves'
};
var gifts2 = new Map<String, String>()
..putIfAbsent('first', () => 'partridge')
..putIfAbsent('second', () => 'turtledoves');
Iterable (List、Set)
✓ 最近の他言語にある扱いやすいメソッドは揃っている
✓ map, sort, every, firstWhere, lastWhere, indexOf, jojin take, skip
var teas = ['green', 'black', 'chamomile', 'earl grey'];
var loudTeaList = teas
.map((tea) => tea.toUpperCase())
.where((tea) => tea != 'chamomile')
.toList();
List<String> loudTeaList2 = teas
.map<String>((String tea) => tea.toUpperCase())
.where((String tea) => tea != 'chamomile')
.toList();
高階関数 も適度に使える
✓ map, fold, where, reduce, every, sort ...
✓ シュガーもあるので、冗長にならない
bool isDecaffeinated(String tea) => tea == 'chamomile';
teas.where(isDecaffeinated) ;
teas.every(isDecaffeinated) ;
var nameJoiner = (pre, cur) => pre + " " + cur;
teas.fold("Tea names are", nameJoiner);
teas.reduce((left, right) =>
left.length >= right.length ? left : right) == 'chamomile';
型推論はもうちょい
✓ ただ、型推論はもう少し頑張って欲しい
● IntelliJ で補完いまいち
var teas = <String>['green', … , 'earl grey'];
var loudTeaList = teas
.map((tea) => tea.toUpperCase())
.where((tea) => tea != 'chamomile')
.toList();
Future, async, await
✓ あまり何も考えずに簡単に使える
✓ await + async で等価でより簡潔
に書ける
※ Stream は、 Angularのパートで。
Future<String> runUsingFuture() {
return findEntrypoint().then((entryPoint) {
return runExecutable(entryPoint , 'x');
}).then(flushThenExit) ;
}
Future<String> runUsingAsyncAwait() async {
var entryPoint = await findEntrypoint();
var exitCode = await runExecutable(entryPoint , 'x');
await flushThenExit(exitCode) ;
}
シンタックス
シュガーなど
class Point {
num x; num y;
num _privateNum; //アンダースコアで、(パッケージ)プライベート
Point(this.x, this.y); //コンストラクタ
num get numPlus => _privateNum + 1; //ゲッター
set numPlus(num x) => _privateNum = x - 1; //セッター
void doSome(){} void doAnother(){}
}
main() {
var p = new Point(1, 2);
var p2 = p..doSome()
..doAnother(); //「..」(ドット2個)で、void を返すメソッドをビルダー化
int i1 = null;
int i2 = i1 ?? 1; // 「a ?? b」 は、a が null なら b
String s3 = i1?.toString(); // i1 != null ? i1.toString() : null
var isDecaffe1 = (String tea) => tea == 'chamomile'; // 1行関数
Function isDecaffe2 = (String tea) => tea == 'chamomile'; // 1行関数
充実した標準ライブラリ
結構、簡単にいろいろ作れそうという感触。
dart:async Future、Stream などの非同期処理用
dart:collection 様々な追加のコレクション、 HashMap、LinkedList、、、
dart:convert エンコード、デコードなど
dart:io ファイル、HTTPなどのネットワーク。サーバ処理用
dart:html DOM操作などのウェブアプリケーション (フロント)用
dart:js JavaScriptとの相互運用用
dart:math 数式計算関連
dart:mirrors リレクション操作のためのライブラリ
Sound Dart 〜 より強い型チェック
最近の世の流れに合わせて型付けを強化する方向。Strong Mode とも言う。反対は便
宜的に、Classic Dart と呼ぶらしい。歴史的に、型がオプションである位置づけから Dart
は始まったが、静的型付けを好む最近の流れに合わせてきた。
✓ コンパイル時の型チェックが強化される
✓ 実際は、List と Map に型を加えるだけでコンパイルが通ることが多い
✓ Classic Dart だと、実際にはList<dynamic>として定義され、List<int>などにキャスト
される
✓ IntelliJなどのIDEにも優しい
✓ ジェネリック型でも、親子関係(共変)うまく扱える?
Sound Dart 〜 より強い型チェック
Classic Dart
void fn(List<int> a) {
print(a);
}
main() {
var list = [];
list.add(1);
list.add("2");
fn(list);
}
void fn(List<int> a) {
print(a);
}
void main() {
var list = <int>[] ;
list.add(1);
list.add(2);
fn(list);
}
Sound Dart
公式ドキュメントが充実
さすがGoogle様 (ただし英語に限る)。
✓ A Tour of the Dart Language … クイックツアー
✓ Effective Dart … Effective Java とまではいかないがコーディングガイド
✓ コアライブラリのドキュメントも豊富
まとめ
まとめ
✓ 書きやすい!
● すんなり学ぶことができた
● シュガーも適度にある
✓ IDEとの相性はすごくいい
● 型の恩恵を受けられないところの勘所はもう少し使わないとわからない
✓ なおStrong Modeは、DDC(Dart Dev Compiler)の登場を待つ必要がある
● コンパイラとは別に dartanalyzer が提供されているのが現在
● dart-lang/sdk は開発がとても活発なので期待

More Related Content

PDF
サーバーサイドDartを試してみる
Satoshi KOBAYASHI
 
PDF
Angular+Dart=より快適なSPA開発
Satoshi KOBAYASHI
 
PDF
はじめてのDart
Takuya Kawabe
 
PDF
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
invogue
 
PDF
マークアップエンジニアと情報アーキテクチャ
力也 伊原
 
PPTX
XAML + C#で開発するときの Visual Studio 2013(とBlend)の 便利機能
一希 大田
 
PDF
お気に入り拡張機能
SatsukiYabu
 
PDF
今更ながらCSS3を試してみた
Takao Sumitomo
 
サーバーサイドDartを試してみる
Satoshi KOBAYASHI
 
Angular+Dart=より快適なSPA開発
Satoshi KOBAYASHI
 
はじめてのDart
Takuya Kawabe
 
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
invogue
 
マークアップエンジニアと情報アーキテクチャ
力也 伊原
 
XAML + C#で開発するときの Visual Studio 2013(とBlend)の 便利機能
一希 大田
 
お気に入り拡張機能
SatsukiYabu
 
今更ながらCSS3を試してみた
Takao Sumitomo
 

Viewers also liked (20)

PDF
Angular 4がやってくる!? 新機能ダイジェスト
Masahiko Asai
 
PDF
Python × Herokuで作る 雑談slack bot
dcubeio
 
PDF
20ヶ月を取り戻す Dart flight school
Masahiro Wakame
 
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
 
PDF
TypeScriptは明日から使うべき
Masahiro Wakame
 
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
PDF
Convolutional Neural Netwoks で自然言語処理をする
Daiki Shimada
 
PDF
How to Become a Thought Leader in Your Niche
Leslie Samuel
 
PDF
コンパイラ指向ReVIEW
Masahiro Wakame
 
PDF
Google Glass XE17版
Masahiro Wakame
 
PDF
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Masahiro Wakame
 
PDF
Angular1.4で作られた自社マイクロサービスを2へマイグレーション
Hayashi Yuichi
 
PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
 
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
PPTX
TypeScriptについて
echigoya-jp
 
PDF
About dart
Naoto Higuchi
 
PPTX
TypeScript 1.0 Released!
Horuchi Hiroki
 
PDF
Type scriptのいいところ
Kazuhide Maruyama
 
DOCX
Sistemas de control
cesar
 
PPTX
Allen chou
世璽 周
 
Angular 4がやってくる!? 新機能ダイジェスト
Masahiko Asai
 
Python × Herokuで作る 雑談slack bot
dcubeio
 
20ヶ月を取り戻す Dart flight school
Masahiro Wakame
 
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
Masahiro Wakame
 
TypeScriptは明日から使うべき
Masahiro Wakame
 
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
Convolutional Neural Netwoks で自然言語処理をする
Daiki Shimada
 
How to Become a Thought Leader in Your Niche
Leslie Samuel
 
コンパイラ指向ReVIEW
Masahiro Wakame
 
Google Glass XE17版
Masahiro Wakame
 
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Masahiro Wakame
 
Angular1.4で作られた自社マイクロサービスを2へマイグレーション
Hayashi Yuichi
 
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
 
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
TypeScriptについて
echigoya-jp
 
About dart
Naoto Higuchi
 
TypeScript 1.0 Released!
Horuchi Hiroki
 
Type scriptのいいところ
Kazuhide Maruyama
 
Sistemas de control
cesar
 
Allen chou
世璽 周
 
Ad

Similar to 15分でわかった気になるdart (20)

KEY
Inside frogc in Dart
Goro Fuji
 
PDF
Dartをはじめよう
Tatsumi Naganuma
 
PDF
Flutterを体験してみませんか
cch-robo
 
PDF
Dart言語の進化状況
cch-robo
 
PDF
磯野ー!Dartやろうぜー!
uka yare
 
PDF
Source Code of Dart
nothingcosmos
 
PDF
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Akira Inoue
 
PDF
Flutter_Forward_Extended_Kyoto-Keynote_Summary
cch-robo
 
PDF
Dart 1.1
nothingcosmos
 
PDF
go & dart
Hiroshi Mimori
 
PDF
Monaca公式ガイドブック発売記念全国キャラバン
アシアル株式会社
 
PDF
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
PDF
Kanazawa.js.Next
dynamis
 
PDF
Monaca公式ガイドブック発売記念全国キャラバン
アシアル株式会社
 
PDF
JavaScript/CSS 2015 Autumn
Koji Ishimoto
 
PDF
マッチングアプリ『Omiai』の Flutter へのリプレイスの挑戦 (FlutterKaigi 2024)
Kosuke Saigusa
 
PDF
TypeScript と Visual Studio Code
Akira Inoue
 
PDF
JavaScript (ECMAScript) 2013
dynamis
 
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
PDF
DartPad+CodePenで、Flutterを体験してみよう
cch-robo
 
Inside frogc in Dart
Goro Fuji
 
Dartをはじめよう
Tatsumi Naganuma
 
Flutterを体験してみませんか
cch-robo
 
Dart言語の進化状況
cch-robo
 
磯野ー!Dartやろうぜー!
uka yare
 
Source Code of Dart
nothingcosmos
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Akira Inoue
 
Flutter_Forward_Extended_Kyoto-Keynote_Summary
cch-robo
 
Dart 1.1
nothingcosmos
 
go & dart
Hiroshi Mimori
 
Monaca公式ガイドブック発売記念全国キャラバン
アシアル株式会社
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
Kanazawa.js.Next
dynamis
 
Monaca公式ガイドブック発売記念全国キャラバン
アシアル株式会社
 
JavaScript/CSS 2015 Autumn
Koji Ishimoto
 
マッチングアプリ『Omiai』の Flutter へのリプレイスの挑戦 (FlutterKaigi 2024)
Kosuke Saigusa
 
TypeScript と Visual Studio Code
Akira Inoue
 
JavaScript (ECMAScript) 2013
dynamis
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
DartPad+CodePenで、Flutterを体験してみよう
cch-robo
 
Ad

Recently uploaded (11)

PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 

15分でわかった気になるdart