window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() JavaScriptで学ぶ関数型プログラミング 第3回 - ファンクターとモナド - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-06-21
ソフトウェア開発

JavaScriptで学ぶ関数型プログラミング 第3回 ファンクターとモナドかもしれない

The Codest

パヴェル・ゲド

Vue.js開発者

JavaScriptの関数型プログラミングのパワーの第3弾をご覧ください。今回はJavaScriptのエキスパートがファンクターとモナドについて詳しく説明します。

はじめに

多くの場合、変更不可能な状態を維持するのは難しい。そこで、データをコンテナにラップするパターンが有効だ。これにより、値を安全に扱うことができ、副作用を排除することができる。

初めての方は、The Codestブログの関数型プログラミングに関する最後の2つのパートを必ずチェックしてください:

  • パート1-はじめに
  • パート2 - コンビネーター

ファンクタ

複雑なロジックは持たない。その主な仕事は、コンテキストをラップし、外部から受け取った関数をそれに対して実行することである。値が変更されるたびに、新しいコンテナのインスタンスが再パッケージされて返される。コンテナ・インスタンスを呼び出すとき 地図 メソッドに特定のアクションを渡すと、変更不可の原則を維持したまま、渡された関数が返す値を持つ新しいコンテナ・インスタンスを返します。

宣言

 const ファンクター = 値 => ({)
     map: fn => Functor(fn(value))、
     chain: fn => fn(value)、
     の:() => 値
 });

地図 - コンテナ内の値の状態を変更したいが、まだそれを返したくない場合に便利。

チェーン - コンテナの状態を変更せずに関数に値を渡したい場合に使用する。通常は 地図 のコール。

の - 現在値を返す

命令形の例

const randomInt = (max) => Math.floor(Math.random() * (max + 1))

const randomNumber = randomInt(200) // 0 から 200 までの数を返す。

decrease(randomNumber) // (0 から 200 までの数) - 1 を返します。

宣言的な例

const randomIntWrapper = (max) => ランダムIntラッパー。
ファンクタ(max)
.map(increase) // max + 1
.map(multiplyBy(Math.random()))// Math.random() * (max + 1)
.map(Math.floor) // Math.floor(Math.random() * (max + 1))

const randomNumber = randomIntWrapper(200)

randomNumber.of() // 0 から 200 までの数を返す
randomNumber.chain(decrease) // (0 から 200 までの数) - 1 を返す

モナド

値の新しい状態をトリガーする関数に加えて、コンテナに隠された追加ロジックが必要になることもある。そこで便利なのがモナドである。 ファンクタ.例えば、値がある値になったときに何が起こるか、あるいは次のアクションがどのような経路をたどるかを決定することができる。

モナドかもしれない

モナドはもしかしたら、真を返さない値の問題を解決してくれるかもしれない。この場合、後続の 地図 の呼び出しは無視される。 ゲットオア メソッドを使うことができる。でよく使われるif/else演算子の使用を避けることができる。 必要不可欠 プログラミングを行う。このモナドは3つのコンテナで構成されている:

何もない - 真でない値がコンテナまたは フィルター メソッドは偽を返す。これは関数の実行をシミュレートするために使用される。つまり、このコンテナは関数を受け取りますが、実行はしません。

ただ - これは、すべての機能を実行するメイン・コンテナであるが、値が偽の値に変更された場合、または フィルター メソッドがfalseを返すと、それを 何もない コンテナ

たぶん - 私は初期値を受け取り、最初に呼び出すコンテナを決める。

宣言

const Just = value => ({
map: fn => Maybe(fn(value))、
chain: fn => fn(value)、
の:() => value、
getOr: () => 値、
filter: fn => fn(value) ?Just(value) :Nothing()、
type: 'just'
});

const Nothing = () => (
map: fn => Nothing()、
chain: fn => fn()、
の:() => Nothing()、
getOr: substitute => substitute、
filter: () => Nothing()、
type: 'nothing'
});

コンス ト Maybe = value =>
value === null || value === undefined || value.type === 'nothing' ?
?Nothing()
:Just(value)
テーブル・メソッド・ファンクター

では、条件について先ほどの例を組み立ててみよう。もしmaxが0より大きければ、関数が実行される。そうでなければ0を返す。

命令形の例

const randomInt = (max) => { { { もし(max > 0)
if(max > 0) {
return Math.floor(Math.random() * (max + 1)).
} else {
return 0
}
}

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // ランダムを返す.
const randomPage = randomInt(-10) || bookMiddlePage // 200 を返す.

宣言的な例

const randomIntWrapper = (max) => ランダムIntラッパー。
Maybe(max)
.filter(max => max > 0) // 値falseはそれ以降の呼び出しを無視する。
.map(increase)
.map(multiplyBy(Math.random()))
.map(Math.floor)

const bookMiddlePage = 200

// 単なるコンテナ
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // ランダムを返す.
// 何もないコンテナ
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // 200 を返す.


協力バナー

関連記事

ソフトウェア開発

非同期およびシングルスレッド JavaScript?

JavaScriptはシングルスレッド言語であると同時に、ノンブロッキング、非同期、並行処理も可能です。この記事では、その仕組みを説明する。

ルカシュ・コルコ
E-commerce

サイバーセキュリティのジレンマデータ漏洩

クリスマス前の駆け込み需要が本格化している。愛する人への贈り物を求めて、人々はますますオンラインショップを "襲撃 "することを厭わなくなっている。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese