カリー化

spec

stringだけでできている配列(arr)の各要素について、
指定した部分文字列(str)を含む要素が一個でもあればtrue、
さもなければfalseを返す関数include(arr, str)の実装

TypeScript的には、
interface include {
  (arr: string[], str: string): boolean
}

implement (ES6)

function include (arr, str) {
  const reg = new RegExp(str)
  for (const elem of arr) {
    if (reg.test(elem)) {
      return true
    }
  }
  return false
}
たとえば、
include(['aiueo', 'kakikukeko'], 'iku') // true
include(['aiueo', 'kakikukeko'], 'uko') // false
というように使える。 ここで、一定の配列に対して様々な部分文字列の検証をしたいとする。
const arr = ['aiueo', 'kakikukeko', 'warota']
include(arr, 'iku') // true
include(arr, 'uko') // false
include(arr, 'asd') // false
include(arr, 'aro') // true

最初からカリー化で実装

function include (arr) {
  return (str) => {
    const reg = new RegExp(str)
    for (const elem of arr) {
      if (reg.test(elem)) {
        return true
      }
    }
    return false
  }
}
たとえば、
include(['aiueo', 'kakikukeko'])('iku') // true
include(['aiueo', 'kakikukeko'])('uko') // false
と使える。 ここで、一定の配列に対して様々な部分文字列の検証をしたいとする。
const arr = ['aiueo', 'kakikukeko', 'warota']
const arrIncludes = include(arr)
arrIncludes('iku') // true
arrIncludes('uko') // false
arrIncludes('asd') // false
arrIncludes('aro') // true
気持ちいい(arrIncludesは長いがIDEの補完機能が効くので然程デメリットではないし、英語的にSVO構文になって読みやすい)

コメント

このブログの人気の投稿

ぷよぷよ 4つの戦法

LLR

ぷよぷよ 先折り階段を組む時に考えたこと