JavaScriptにコンパイルできる関数型言語 WEBサイトやWEBアプリケーションを作るためのツール
JavaScriptにコンパイルできる関数型言語 WEBサイトやWEBアプリケーションを作るためのツール
JavaScript(TypeScript) または、Angular, React, Vue
JavaScriptにコンパイルできる関数型言語 WEBサイトやWEBアプリケーションを作るためのツール
JavaScript(TypeScript) または、Angular, React, Vue
普段お仕事で使っている
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
型をキチンとつけてください
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
型をキチンとつけてください
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
型をキチンとつけてください
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
型をキチンとつけてください
前提条件付き
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
型をキチンとつけてください
foo(x: any): void {
let random = Math.random()
let result = 1;
if(random % 2 == 0) {
result = result * x * random + 2;
} else {
result = result * x - 2;
}
this.result = result;
}
あなたがレビューすべきコードです
可能な限りツッコミを入れてください
型をキチンとつけてください
製品品質の担保
可読性・拡張性の担保
foo : Int -> Int -> Int
foo x randomValue =
if modBy 2 randomValue == 0 then
x * randomValue + 2
else
x - 2
Elmでは、十中八九誰が書いても以下のようなコードになります
any, voidが存在しない
副作用は型が違うので起こせない
一時変数はlet-in構文をわざわざ使わなければならない
if-else等の分岐が全て式(条件演算子は存在しない)
どう足掻いてもテストは書ける
foo : Int -> Int -> Int
foo x randomValue =
if modBy 2 randomValue == 0 then
x * randomValue + 2
else
x - 2
Elmでは、十中八九誰が書いても以下のようなコードになります
any, voidが存在しない
副作用は型が違うので起こせない
一時変数はlet-in構文をわざわざ使わなければならない
if-else等の分岐が全て式(条件演算子は存在しない)
どう足掻いてもテストは書ける
foo : Int -> Int -> Int
foo x randomValue =
if modBy 2 randomValue == 0 then
x * randomValue + 2
else
x - 2
Elmでは、十中八九誰が書いても以下のようなコードになります
any, voidが存在しない
副作用は型が違うので起こせない
一時変数はlet-in構文をわざわざ使わなければならない
if-else等の分岐が全て式(条件演算子は存在しない)
どう足掻いてもテストは書ける
foo : Int -> Int -> Int
foo x randomValue =
if modBy 2 randomValue == 0 then
x * randomValue + 2
else
x - 2
Elmでは、十中八九誰が書いても以下のようなコードになります
any, voidが存在しない
副作用は型が違うので起こせない
一時変数はlet-in構文をわざわざ使わなければならない
if-else等の分岐が全て式(条件演算子は存在しない)
どう足掻いてもテストは書ける
foo : Int -> Int -> Int
foo x randomValue =
if modBy 2 randomValue == 0 then
x * randomValue + 2
else
x - 2
Elmでは、十中八九誰が書いても以下のようなコードになります
any, voidが存在しない
副作用は型が違うので起こせない
一時変数はlet-in構文をわざわざ使わなければならない
if-else等の分岐が全て式(条件演算子は存在しない)
どう足掻いてもテストは書ける
foo : Int -> Int -> Int
foo x randomValue =
if modBy 2 randomValue == 0 then
x * randomValue + 2
else
x - 2
Elmでは、十中八九誰が書いても以下のようなコードになります
any, voidが存在しない
副作用は型が違うので起こせない
一時変数はlet-in構文をわざわざ使わなければならない
if-else等の分岐が全て式(条件演算子は存在しない)
どう足掻いてもテストは書ける
製品品質の担保
可読性・拡張性の担保 -> 多くの場合、ほとんど満たしている
レビューの応酬が少ない
テストがどう足掻いても書けるため、テストが書ける形に持っていく必要がない、テストを書かせることを促しやすい
Google検索やTwitterのツイートや投票の体験はシンプルながら素晴らしい体験を提供してくれる
がしかし、これらをコンポーネント提供されても他サービスでは使い物にならない -> ドメインに対して体験が一意に存在する
Google検索やTwitterのツイートや投票の体験はシンプルながら素晴らしい体験を提供してくれる
がしかし、これらをコンポーネント提供されても他サービスでは使い物にならない -> ドメインに対して体験が一意に存在する
プロダクト独自の体験を直接表現するものでは無いが、クオリティの高さやカスタマイズ性は高い(強いものは強い)
存在はする(例えば、elm-mdlなど)が、Elmがコンポーネント指向をしていない(TEAは疎結合でCSSやロジックを内包するには向いていない)
ポイント1での品質やコードの統一性を重視しているためトレードオフとなる
ロジックをゴリゴリ書いたり、CSSをゴリゴリ書く覚悟と筋力が求められる
Angular Http Client & RxJS
Axios
Superagent
Fetch
Request
RxJS
Akita
Akita + RxJS
React Hooks
Redux
Redux + redux-saga
Redux + redux-thunk
Redux + Hooks
Vuex
これどうやって解決するの?の答えのほとんどが筋力です
当日の僕が上手くまとめてくれる