The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-05-25
ソフトウェア開発

JavaScriptでの関数型プログラミング その1 - イントロダクション

The Codest

パヴェル・ゲド

Vue.js開発者

私たちの記事を読んで、JavaScriptにおける関数型プログラミングのパワーを発見してください。関数型プログラミングは、プログラムの記述と計算が分離された宣言型のパラダイムに分類されます。

関数型プログラミングとは何か?

「簡単に言えば、関数型プログラミングは ソフトウェア開発 機能重視のスタイル"

本からの抜粋ルイス・アテンシオ "関数型プログラミング入門 JavaScript.を向上させる方法 JavaScript 機能的手法を用いたプログラム"

関数型プログラミング に分類される。 宣言的 このパラダイムでは、プログラムの記述が計算から分離されている。ここで重視されるのは、プログラム・ロジックを記述するために式を使用することである。これは 必要不可欠 プログラミングを行う。 コード はステップ・バイ・ステップで実行され、コンピュータに仕事の進め方を詳細に指示する。

宣言型と命令型の違い、例

整数の配列があり、それぞれを2乗して、偶数でない値だけを選択する必要がある場合を考えてみよう。

インペラティブ

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

const results = [].

for(let i = 0; i < numbers.length; i++) { { { for(let i = 0; i < numbers.length; i++)
const secondPower = Math.pow(numbers[i], 2)
if(secondPower & 1) { // または % 2、ただしビット演算の方が高速
results.push(secondPower);
}
}

console.log(results) // [1, 9, 25, 49, 81].

に関しては 必要不可欠 solution, the focus on implementation details is clearly visible. In the loop, you can see the array index based on the need to control the number of elements. Due to the large number of details in the code, it is harder to focus on what it is doing. Let us now focus on the 宣言的 解決策だ。

宣言的

const risesToSecondPower = (num) => Math.pow(num, 2)
const isOdd = (num) => num & 1;

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9].

const results = numbers
.map(risesToSecondPower)
.filter(isOdd);

console.log(results) // [1, 9, 25, 49, 81].

このソリューションでは、ロジックを別々の関数にすることで、実装と呼び出しが分離されている。このソリューションのおかげで、関数の中で起こっていることを説明する関数名だけに集中できる。さらに、抽象化レベルが上がり、ロジックを再利用できるようになりました。では、呼び出しに注目してみよう。このコードで何をするのか、ステップ・バイ・ステップで説明するだけである:

  1. マップ(risesToSecondPower) - 配列の各要素を取り出し、それを2乗する、
  2. フィルター(isOdd) - フィルターをかけて奇数の要素を選択する。

メリット

関数型プログラミング には多くの利点がある。それは JavaScript関数型言語なのだから、関数の使用は当然である。この言語のクラスは「構文上の糖分」であり、その下は関数で構成されている。

読みやすさについて言えば、命令型アプローチでは、コードは通常、ロジックを掘り下げることなく逐次読むことができる関数名のリストになる。その結果、私たちは実装の詳細には目を向けません。

もうひとつの利点は、イミュータブル・オブジェクトの慣例にこだわることだ。このアプローチのおかげで、コードはより安全になる。 JavaScript は非常に強力で、不要なオブジェクトを修正するのは簡単だ。

関数型プログラミングでは、コードは小さな関数に分解され、再利用可能な抽象コードとして簡単に考えることができる。

純粋機能

関数型プログラミングにおける重要な検討事項のひとつに純粋関数がある。このような関数を作るには、いくつかのルールを覚えておく必要がある:

  • 関数が返す結果は、入力パラメータにのみ依存する、
  • グローバル変数や、自分の範囲を超えた変数を使用しないでください、
  • パラメータの状態を変更しない、
  • 純粋関数は「副作用」(通常はオブジェクトのプロパティを変更する)を持たない、
  • を指定された入力パラメータに代入すると、常に同じ結果を返す、
  • 純粋関数は常にパラメータを取り、常にパラメータを返す。
// インピュア関数
カウンター = 5
...
const multipleCounter = (乗数) => { ...
カウンタ = カウンタ * 乗数
}

multiplyCounter(2) // -> ? 結果は初期値による
// 純粋関数
const multiplyBy = (multiplier) => (value) => value * multiplier
const multipleByTwo = multiplyBy(2)

const counter = multiplyByTwo(5) // -> 10

最初の関数は、変化する可能性のある外部パラメータに依存するため、予測不可能である。番目の関数は透明であり、入力パラメータのみに依存し、パラメータを変更せず、範囲外の変数を使用しない。パラメータに依存し、パラメータを変更せず、範囲外の変数を使用せず、新しい値を返すので、透明である。

協力バナー

関連記事

ソフトウェア開発

Javascriptツールの使用例

プログラミングのレベルアップに役立つ検索ツールJavaScriptをご紹介します。ESLint、Prettier、Huskyについてもっと知る!

The Codest
レダ・サルミ React 開発者

ナレッジベースを購読して、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
    • ウェブサイト利用規約

    Copyright © 2026 by The Codest. All rights reserved.

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