2017年10月4日
オトナのプログラミング勉強会
協力 未来会議室
- 村上 卓
- 30歳
- フリーランス
- Angular/Ruby On Rails
Angularまだまだ勉強中
オトナのプログラミング勉強会
http://otona.pro
- 2016年8月から開始
- 月2回(第1水曜、第3水曜)
- いつでも講師募集中
- プログラム言語、機械学習、Web系...
- YouTubeで振り返り可
- OSSのWebフロントエンドフレームワーク
- コンポーネント指向
- Typescript(JavascriptのaltJS)
- 現在バージョン4、9月に5のRCでました
- バージョン1からの互換性はなし
- Javascriptを拡張したOSS
- 静的型付けが可能
- TypescriptからJavascriptを生成して読み込む
- AngularではTypescriptを推奨
Interfaceを宣言することでオブジェクトのプロパティの型を指定できます
interface Person {
firstName: string;
lastName: string;
}
function greeter(person: Person) {
console.log(`Hello ${person.firstName} ${person.lastName}!!`);
}
let p = {firstName: 'Taro', lastName: 'Yamada'};
greeter(p);
TypescriptからJavascriptに変換
$ tsc person.ts
# person.jsが生成される
$ node person.js
Hello Taro Yamada!!
student.tsを作成
class Student {
fullName: string;
constructor(
public grade: number,
public firstName: string,
public lastName: string) {
this.fullName = `${firstName} ${lastName}`;
}
toString() {
return `${this.grade}: ${this.fullName}`;
}
}
let s = new Student(1, 'Taro', 'Yamada');
console.log('' + s);
ハンズオンをやっていきます
https://github.com/sugumura/hands-on
# cloud9でのサーバ起動は下記を利用
$ ng serve --host 0.0.0.0 --public-host $C9_HOSTNAME
例
class Computer {
cpu: CPU = new IntelCoreI7();
storage: Storage = new ToshibaSSD();
}
class Computer {
cpu: CPU;
storage: Storage;
constructor(_cpu: CPU, _storage: Storage) {
this.cpu = _cpu;
this.storage = _storage;
}
}
- 完全な機能がなくてもモックからの開発が可能
- 依存性を切り離すことで実装範囲の明確化
HeroServiceの注入
// 関係ないものは省略
@Component({
providers: [HeroService],
})
export class AppComponent {
constructor(_heroService: HeroService) { }
}
前のコードはシンタックスシュガー
// 関係ないものは省略
@Component({
providers: [
new Provider(HeroService, {useClass: HeroService})
],
})
export class AppComponent {
constructor(@Inject(HeroService) _heroService: HeroService) { }
}
useClass, useValue, useFactoryが指定可能