5月4週

土曜:5h

  • 今日も一日実装

日曜:5h

  • 今日も一日実装

月曜:11h

  • 共通のエラーメッセージ実装

関数型プログラミング

const arr=[1,2,3,4,5,6,7,8];

console.log(arr.map(n => n * 2)); // [ 2, 4, 6, 8, 10, 12, 14, 16 ] 
console.log(arr.filter(n => n % 3 === 0)); // [ 3, 6 ]
console.log(arr.find(n => n > 4));// 5
console.log(arr.every(n => n !== 0));// true
console.log(arr.some(n => n > 8));// false
console.log(arr.includes(5)); // true
console.log(arr.reduce((n, m) => n + m)); // 36 
console.log(arr.sort((n, m) => n < m));// [ 8, 7, 6, 5, 4, 3, 2, 1 ]
  • map() は対象の配列の要素一つ一つを加工した新しい配列を作る
  • filter() は条件に適合する要素だけを抽出して新しい配列を作る
  • find() は条件に適合した要素をひとつだけ取り出す。見つからない場合はundefindを返す ・ every() はすべての要素が条件を満たすかを真偽値で返す
  • some() は条件を満たす要素がひとつでもあるかを真偽値で返す
  • includes() は指定した要素が含まれるかを真偽値で返す
  • reduce() は配列の要素を、与えた式で畳み込んだ値を返す
  • sort() は各要素を、与えた条件によって並び替えた新しい配列を返す

高階関数

  • 高階関数とは、引数に関数をとったり戻り値として関数を返したりする関数のこと
  • 例えば、filterメソッドは引数にn => n % 3 === 0という無名関数を受け取っている
const arr=[1,2,3,4,5,6,7,8];

console.log(arr.filter(n => n % 3 === 0)); // [ 3, 6 ]

  • 戻り値として関数を返したりするの部分は
const hof = (ex, fn) => { 
  return n => fn(n + ex);
};
const plusOneDouble = hof(1, n => n * 2); 
console.log(plusOneDouble(4)); // 10
  • 1ブロック目:関数hofは第一引数に数値、第二引数に関数を受け取り、引数を受け取る関数を返す。
  • 2ブロック目:第一引数に1、第二引数にn*2する関数を渡す。
  • 第3ブロック:n(4)を関数に渡して、1+4をしてから関数n2が実行されるため52が実行されて10が出力される

クロージャ

  • 目的:グローバル変数を作成せずに外部(子関数)から親関数スコープの変数へアクセスする方法
  • ポイント:counterMakerが最後に関数を返しているいこと。const count = counterMaker(1)の中身は関数。
const counterMaker = (initialCount) => { 
  let c = initialCount;
  const increment = () => c++;
  
  return increment; 
};
const count = counterMaker(1); 
console.log(count(),count(),count()); //123

ジェネレータ

  • Redux-Sagaを使用する際に書くので飛ばす

カリー化

const curriedMulti = n => { 
  returnm=>n*m;
} 
console.log(curriedMulti(2)(4)); // 8
  • n(2)を引数に取り、nmを返す。そして、m(4)を引数にとり、24している
  • (4)の部分がmを引数にとって、返ってきた関数にぶつけている箇所

  • returnを省略するとこんな感じ

const simpleCurriedMulti = n => m => n * m; 
console.log(simpleCurriedMulti(2)(4));// 8
  • 部分適用
  • ×3するだけの関数を変数に代入し、その変数に第二引数を与えて計算結果を出す
constmulti=n=>m=>n*m; 
const triple = multi(3); 
console.log(triple(5)); // 15

火曜:11h

- json-serverでエラーハンドリングをテストしたい時

qiita.com

server-jsonでエラーハンドリング

  • server.jsを作ってこんな感じでレスポンスするファイルの中身(mock.json)を読み込む
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('mock.json')
const middlewares = jsonServer.defaults()
const db = require(`./mock.json`)

server.use(middlewares)
// Add custom routes before JSON Server router
server.get('/echo', (req, res) => {
  res.jsonp(db.list)
})

server.use(router)
server.listen(8000, () => {
  console.log('JSON Server Port is 8000 running')
})

golang久々に再開

  • docker on golangの環境構築でずっとモジュールがないよ的なこと言われていた。。。go mod init appでgo.modを作らないといけなかった・・・

水曜:11h

  • nullチェック構文
{ servicePriceMax: servicePriceMax || '' }
  • こうやって書くとservicePriceMaxがnullまたはundefinedのときは''が設定される

木曜:11h

  • テストデータの出しわけ考え方
    • 例えば、認証時の電話番号の1桁または2桁に意味を持たせる(1桁目は性別・2桁目は料金プランとか)

金曜:11h

  • テストケース作成

週次報告

  • 年間(2019/8~2020/8)目標時間(業務での設計・実装含む):3380h
  • 今週を含む累積時間:2470h
  • 週次目標時間:65h
  • 週次実績時間:65h
  • 何を得たか:flutter基礎・capreseデプロイ検討・ライブラリの改造
  • 何が必要か:golang基礎・認証の知見・Nuxt・React・テスト手法の取得
  • 来週の目標:新機能追加