亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ ウェブフロントエンド jsチュートリアル 関數(shù)構(gòu)成:保守可能なコードの構(gòu)成要素

関數(shù)構(gòu)成:保守可能なコードの構(gòu)成要素

Feb 17, 2025 am 11:19 AM

Function Composition: Building Blocks for Maintainable Code

javaScript関數(shù)の組み合わせ:より保守可能なコードを構(gòu)築します

javaScript関數(shù)構(gòu)成は、複數(shù)の単純な関數(shù)を、特定のデータのサブ機(jī)能操作を論理順序で実行する?yún)g一のより複雑な関數(shù)に組み合わせる手法です。関數(shù)が適用される順序は、異なる結(jié)果を生成します。

保守可能なコードを記述するには、次の関數(shù)が正しく処理できるように、各組み合わせ関數(shù)の返品タイプを理解することが重要です。 JavaScriptは、組み合わせが不適切なタイプの機(jī)能を返すことを妨げないため、責(zé)任のこの部分はプログラマーにあります。

機(jī)能的なプログラミングパラダイムに精通していない人の場合、関數(shù)を組み合わせると、コードが複雑に見えるようになります。ただし、ES2015構(gòu)文の出現(xiàn)により、矢印関數(shù)を使用して、特別な組み合わせ方法を必要とせずに1つのコードで簡単な組み合わせ関數(shù)を作成することができます。

組み合わせ関數(shù)は純粋な関數(shù)である必要があります。つまり、特定の値が関數(shù)に渡されるたびに、関數(shù)は同じ結(jié)果を返す必要があり、関數(shù)は獨(dú)自の外部値を変更する副作用を持たないようにします。これにより、よりクリーンで読みやすいコードが生成されます。

この記事は、ジェフ?モット、ダン?プリンス、セバスチャン?セイツによってレビューされました。 SitePointコンテンツを最高の狀態(tài)にしてくれたすべてのSitePointピアレビューアに感謝します!

Function Composition: Building Blocks for Maintainable Code

機(jī)能的思考の利點(diǎn)の1つは、小さくて理解しやすい単一関數(shù)を使用して複雑な関數(shù)を構(gòu)築する能力です。 しかし、これは、最もエレガントなソリューションを作成する方法を把握するために、肯定的ではなく、逆に問題について考える必要がある場合があります。この記事では、JavaScriptの関數(shù)の組み合わせをチェックするための段階的なアプローチを取り、理解しやすく、エラーが少ないコードをどのように生成するかを示します。

ネストされた関數(shù)

構(gòu)成は、2つ以上の単純な関數(shù)をより複雑な関數(shù)に組み合わせることができる手法であり、論理的な順序で合格したデータの各サブ機(jī)能を?qū)g行します。この結(jié)果を取得するには、ある関數(shù)を別の関數(shù)にネストし、結(jié)果が生成されるまで內(nèi)部関數(shù)の結(jié)果で外部関數(shù)の操作を繰り返す必要があります。結(jié)果は、関數(shù)が適用される順序によって異なる場合があります。これは、JavaScriptですでに知っているプログラミング技術(shù)を使用して、関數(shù)呼び出しを別の関數(shù)にパラメーターとして渡すことで簡単に実証できます。

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8
この場合、addone()関數(shù)を定義して値を値に追加し、timestwo()関數(shù)は値に2を掛けます。ある関數(shù)の結(jié)果を別の関數(shù)として渡すことにより、初期値が同じであっても、他の1つの任意が他の1つをネストすることが異なる結(jié)果をどのように生成するかを見ることができます。內(nèi)部関數(shù)が最初に実行され、結(jié)果は外部関數(shù)に渡されます。

命令的な組み合わせ

同じ一連の操作を繰り返したい場合は、1つ目と2番目の関數(shù)を自動的に適用する新しい関數(shù)を定義するのが便利な場合があります。これは次のようになるかもしれません:

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8

この場合、2つの関數(shù)を特定の順序で手動で結(jié)合します。最初に渡された値をホルダー変數(shù)に割り當(dāng)てる新しい関數(shù)を作成し、次に最初の関數(shù)を?qū)g行して2番目の関數(shù)を?qū)g行してその変數(shù)の値を更新し、最後にその所有者の値を返します。 (ホルダーと呼ばれる変數(shù)を使用して一時的に渡された値を保持していることに注意してください。このような単純な関數(shù)については、余分なローカル変數(shù)が冗長に見えますが、命令的なJavaScriptであっても、関數(shù)の引數(shù)はまた渡されます。定數(shù)を局所的に変更することが可能ですが、これにより、関數(shù)の異なる段階でパラメーター値が何であるかについて混亂が生じます。)同様に、別の新しい関數(shù)を作成する場合それどころか、これら2つの小さな機(jī)能を適用する順序は、次のことを行うことができます。

// ...來自上面的先前函數(shù)定義
function addOneTimesTwo(x) {
  var holder = x;
  holder = addOne(holder);
  holder = timesTwo(holder);
  return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10
もちろん、このコードは非常に反復(fù)的に見え始めます。私たちの2つの新しい組み合わせ関數(shù)はほぼ同じですが、彼らが呼ぶ2つの小さな関數(shù)には異なる実行命令があることを除きます。私たちはそれを単純化する必要があります(自分自身を繰り返さないように)。また、このように値を変更する一時的な変數(shù)を使用すると、たとえそれが作成している組み合わせ関數(shù)の內(nèi)部に隠されていても、あまり機(jī)能的ではありません。結(jié)論:私たちはもっとうまくやることができます。

機(jī)能的な組み合わせを作成

既存の機(jī)能を採用し、必要な順序でそれらを結(jié)合する組み合わせ関數(shù)を作成しましょう。毎回內(nèi)部の詳細(xì)に対処することなく、これを一貫した方法で行うには、関數(shù)をパラメーターとして渡す順序を決定する必要があります。 2つのオプションがあります。パラメーターはそれぞれ関數(shù)であり、左から右または右から左に実行できます。つまり、提案した新しい関數(shù)を使用して、compose(timestwo、addone)がtimestwo(addone())を表してパラメーターを左から左に読み取ることができます。パラメーターを左から右に実行する利點(diǎn)は、英語で同じ方法で読み取られることです。これは、加算前に乗算が行われることを暗示する機(jī)能を組み合わせた機(jī)能と命名する方法と非常によく似ています。私たちは皆、簡潔で読みやすいコードのための論理的な命名の重要性を知っています。パラメーターを左から右に実行することの欠點(diǎn)は、操作する値を前に配置する必要があることです。ただし、値を前に置くと、結(jié)果の関數(shù)を?qū)硭螜C(jī)能と組み合わせるのが便利ではありません。このロジックの背後にある考えをよく説明するために、ブライアン?ロンズドルフの古典的なビデオHey Underscoreを超えて行くことはできません。あなたはそれを間違っています。 (Underscoreには、BrianがLodash-FPやRamdaなどの機(jī)能的なプログラミングライブラリでUnderscoreを使用する際に議論する機(jī)能的プログラミングの問題を解決するのに役立つFPオプションがあることに注意する必要がありますが、とにかく、私たちはあなたが望んでいることを本當(dāng)に望んでいます。 DOは、最初にすべての構(gòu)成データに合格し、最終的に操作する値を渡します。したがって、組み合わせた関數(shù)をパラメーターの読み取りと右から左に適用することとして定義することが最も論理的です。したがって、このように見える基本的な組み合わせ関數(shù)を作成できます:

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8

この非常に単純な組み合わせ関數(shù)を使用して、2つの以前の複雑な関數(shù)をより簡単に構(gòu)築し、同じ結(jié)果を確認(rèn)できます。

// ...來自上面的先前函數(shù)定義
function addOneTimesTwo(x) {
  var holder = x;
  holder = addOne(holder);
  holder = timesTwo(holder);
  return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10
この単純な組み合わせ関數(shù)は機(jī)能しますが、柔軟性と適用性を制限する多くの問題を考慮しません。たとえば、2つ以上の関數(shù)を組み合わせたい場合があります。さらに、このプロセスでこの情報を失います。これらの問題を解決することはできますが、組み合わせの仕組みを習(xí)得する必要はありません。自分で書くのではなく、RAMDAなどの既存の機(jī)能ライブラリからより強(qiáng)力な組み合わせを継承します。デフォルトでは、左から左へのパラメーターの順序を考慮しています。

タイプはあなたの責(zé)任です

次の関數(shù)が正しく処理できるように、各組み合わせ関數(shù)のリターンタイプを知ることはプログラマの責(zé)任であることを覚えておくことが重要です。厳格なタイプチェックを?qū)g行する純粋な機(jī)能プログラミング言語とは異なり、JavaScriptは、不適切なタイプの値を返す機(jī)能を結(jié)合しようとすることを妨げません。合格數(shù)値に限定されませんが、同じ変數(shù)タイプをある関數(shù)から次の型に維持することさえしません。ただし、組み合わせている関數(shù)が、以前の関數(shù)によって返される値を処理する準(zhǔn)備ができていることを確認(rèn)する責(zé)任があります。

視聴者を検討してください

他の人は將來コードを使用または変更する必要があることを常に覚えておいてください。従來のJavaScriptコードで組み合わせを使用することは、機(jī)能的なプログラミングパラダイムに精通していない人にとっては複雑になる可能性があります。目標(biāo)は、コードを読み取り、維持しやすく、よりシンプルになり、維持することです。ただし、ES2015構(gòu)文の出現(xiàn)により、特別な組み合わせ方法を必要とせずに矢印関數(shù)を使用して単一ラインコールとして単純な組み合わせ関數(shù)を作成することも可能です。

function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8

今日から組み合わせて始めましょう

すべての機(jī)能的なプログラミング手法と同様に、組み合わせた機(jī)能は純粋な機(jī)能である必要があることを覚えておくことが重要です。要するに、これは、特定の値が関數(shù)に渡されるたびに、関數(shù)が同じ結(jié)果を返す必要があり、関數(shù)に獨(dú)自の外部値を変更する副作用がないことを意味します。組み合わせのネストは、データに適用する関連機(jī)能のセットがある場合、非常に便利です。その関數(shù)のコンポーネントを再利用可能で簡単に組み合わせることができます。すべての機(jī)能的なプログラミング手法と同様に、既存のコードに組み合わせを追加して、慎重に慣れることをお勧めします。正しく行うと、結(jié)果はクリーンで乾燥し、コードを読みやすくなります。これは私たち全員が欲しいものではありませんか?

(以下はFAQであり、元のテキストに従って調(diào)整および合理化されており、複製情報は回避されます) 関數(shù)の組み合わせと保守可能なコードについてよく尋ねる質(zhì)問

    プログラミングにおける機(jī)能の組み合わせは何ですか?
  • 関數(shù)の組み合わせは、単純な関數(shù)をより複雑な関數(shù)に組み合わせるという概念です。構(gòu)成要素のように、これらの小さな再利用可能な機(jī)能を使用して複雑で強(qiáng)力な機(jī)能を作成できます。これにより、コードをより読みやすく、メンテナンスしやすく、よりスケーラブルにすることができます。

  • 関數(shù)の組み合わせは、保守可能なコードをどのように促進(jìn)しますか?
  • 関數(shù)の組み合わせは、小さな再利用可能な機(jī)能の使用を促進(jìn)することにより、保守性を促進(jìn)します。これらの機(jī)能は、理解、テスト、デバッグが簡単です。これらの小さな関數(shù)を組み合わせてより複雑な関數(shù)を作成すると、発生する可能性のある問題を特定して修正する方が簡単です。また、このモジュール式アプローチにより、システム全體に影響を與えることなく、コードの特定の部分を簡単に更新または変更できます。

  • 保守可能なコードを作成するためのベストプラクティスは何ですか?
  • メンテナブルコードには、次のような多くのベストプラクティスが含まれます構(gòu)造。

  • 関數(shù)の組み合わせと機(jī)能プログラミングの関係は何ですか?
  • 関數(shù)の組み合わせは、機(jī)能プログラミングの基本概念です。関數(shù)プログラミングは、計(jì)算を數(shù)學(xué)機(jī)能の評価として扱い、変化する狀態(tài)と変動データを回避する例です。このパラダイムでは、関數(shù)の組み合わせは、より単純な機(jī)能からより複雑な関數(shù)を構(gòu)築する上で重要な役割を果たし、それによりコードの再利用性と保守性を改善します。

  • 関數(shù)の組み合わせを?qū)g裝することの課題は何ですか? 関數(shù)の組み合わせには多くの利點(diǎn)がありますが、課題をもたらすこともできます。 1つの課題は、適切に管理されていない場合、特に複數(shù)の関數(shù)を組み合わせる場合、コードを読みにくくすることができるということです。複合関數(shù)のチェーンでのエラーと例外の処理も難しい場合があります。ただし、これらの課題は、優(yōu)れたコーディングプラクティスと機(jī)能の組み合わせの正しい使用によって軽減できます。

  • 関數(shù)の組み合わせでコードテストを改善する方法は? 関數(shù)の組み合わせにより、コードテストがより簡単かつ効率的になります。結(jié)合された関數(shù)は小さく獨(dú)立した関數(shù)で構(gòu)成されているため、各小さな関數(shù)を個別にテストできます。これにより、バグを分離して修正しやすくなります。また、ソフトウェアの各部分が個別にテストされて、適切に機(jī)能することを確認(rèn)するために、単體テストの実踐を容易にします。

以上が関數(shù)構(gòu)成:保守可能なコードの構(gòu)成要素の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

node.jsでHTTPリクエストを作成する方法は? node.jsでHTTPリクエストを作成する方法は? Jul 13, 2025 am 02:18 AM

node.jsでHTTPリクエストを開始するには、組み込みモジュール、axios、およびnode-fetchを使用する3つの一般的な方法があります。 1.依存関係のない內(nèi)蔵http/httpsモジュールを使用します。これは基本的なシナリオに適していますが、https.get()を使用してデータを取得したり、.write()を介してPOSTリクエストを送信するなど、データステッチとエラーモニタリングの手動処理が必要です。 2.Axiosは、約束に基づいたサードパーティライブラリです。簡潔な構(gòu)文と強(qiáng)力な機(jī)能を備えており、非同期/待ち聲、自動JSON変換、インターセプターなどをサポートします。非同期リクエスト操作を簡素化することをお勧めします。 3.Node-Fetchは、約束と単純な構(gòu)文に基づいて、ブラウザフェッチに似たスタイルを提供します

JavaScriptデータ型:プリミティブ対參照 JavaScriptデータ型:プリミティブ対參照 Jul 13, 2025 am 02:43 AM

JavaScriptデータ型は、プリミティブタイプと參照タイプに分割されます。プリミティブタイプには、文字列、數(shù)字、ブール、ヌル、未定義、シンボルが含まれます。値は不変であり、コピーは値を割り當(dāng)てるときにコピーされるため、互いに影響を與えません。オブジェクト、配列、関數(shù)などの參照タイプはメモリアドレスを保存し、同じオブジェクトを指す変數(shù)は互いに影響します。 TypeofとInstanceOFを使用してタイプを決定できますが、TypeOfNullの歴史的な問題に注意してください。これらの2種類の違いを理解することは、より安定した信頼性の高いコードを書くのに役立ちます。

React vs Angular vs Vue:どのJSフレームワークが最適ですか? React vs Angular vs Vue:どのJSフレームワークが最適ですか? Jul 05, 2025 am 02:24 AM

どのJavaScriptフレームワークが最良の選択ですか?答えは、あなたのニーズに応じて最も適切なものを選択することです。 1.反応は柔軟で無料で、高いカスタマイズとチームアーキテクチャ機(jī)能を必要とする中規(guī)模および大規(guī)模プロジェクトに適しています。 2。Angularは、エンタープライズレベルのアプリケーションと長期的なメンテナンスに適した完全なソリューションを提供します。 3. Vueは使いやすく、中小規(guī)模のプロジェクトや迅速な発展に適しています。さらに、既存のテクノロジースタック、チームサイズ、プロジェクトのライフサイクル、およびSSRが必要かどうかは、フレームワークを選択する上で重要な要素でもあります。要するに、絶対に最良のフレームワークはありません。最良の選択は、あなたのニーズに合ったものです。

JavaScript Timeオブジェクト、誰かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 JavaScript Timeオブジェクト、誰かがEACTEXE、Google Chromeなどのより高速なWebサイトを構(gòu)築します。 Jul 08, 2025 pm 02:27 PM

こんにちは、JavaScript開発者!今週のJavaScriptニュースへようこそ!今週は、DenoとのOracleの商標(biāo)紛爭、新しいJavaScript Timeオブジェクトがブラウザ、Google Chromeアップデート、およびいくつかの強(qiáng)力な開発ツールによってサポートされています。始めましょう! 「JavaScript」の商標(biāo)を登録しようとするDeno Oracleの試みとのOracleの商標(biāo)紛爭は、論爭を引き起こしました。 Node.jsとDenoの作成者であるRyan Dahlは、商標(biāo)をキャンセルするために請願書を提出しました。

キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? キャッシュAPIとは何ですか?また、サービスワーカーでどのように使用されますか? Jul 08, 2025 am 02:43 AM

Cacheapiは、ブラウザからネットワークリクエストをキャッシュするツールです。これは、ウェブサイトのパフォーマンスとオフラインエクスペリエンスを改善するために、サービスワーカーと併用することがよくあります。 1.開発者は、スクリプト、スタイルシート、寫真などのリソースを手動で保存できるようにします。 2。要求に応じてキャッシュ応答と一致させることができます。 3.特定のキャッシュの削除またはキャッシュ全體のクリアをサポートします。 4.フェッチイベントを聞いているサービスワーカーを介して、キャッシュの優(yōu)先順位またはネットワークの優(yōu)先戦略を?qū)g裝できます。 5.オフラインサポート、繰り返しのアクセス速度の高速化、主要なリソースのプリロード、バックグラウンドアップデートコンテンツによく使用されます。 6.それを使用する場合、キャッシュバージョンの制御、ストレージ制限、およびHTTPキャッシングメカニズムとの違いに注意する必要があります。

ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ ハンドリングの約束:javascriptのチェーン、エラー処理、および約束の組み合わせ Jul 08, 2025 am 02:40 AM

約束は、JavaScriptで非同期操作を処理するためのコアメカニズムです。チェーンコール、エラー処理、コンビナーの理解は、アプリケーションをマスターするための鍵です。 1.チェーンコールは、.then()を通じて新しい約束を返し、非同期プロセスの連結(jié)を?qū)g現(xiàn)します。それぞれ.then()は以前の結(jié)果を受け取り、値または約束を返すことができます。 2。エラー処理は、.catch()を使用して例外をキャッチしてサイレント障害を回避し、キャッチのデフォルト値を返すためにプロセスを継続する必要があります。 3。promise.all()などの組み合わせ(すべての成功後にのみ成功しました)、promise.race()(最初の完了が返されます)、promise.allsettled()(すべての完了を待っています)

JavaScriptでのデータ操作のためのArray.Prototypeメソッドを活用します JavaScriptでのデータ操作のためのArray.Prototypeメソッドを活用します Jul 06, 2025 am 02:36 AM

.map()、.filter()、.reduce()などのJavaScriptアレイ內(nèi)蔵メソッドは、データ処理を簡素化できます。 1).map()は、要素を1つに変換して新しい配列を生成するために使用されます。 2).filter()は、條件ごとに要素をフィルタリングするために使用されます。 3).reduce()は、データを単一の値として集約するために使用されます。使用すると誤用を避ける必要があり、その結(jié)果、副作用やパフォーマンスの問題が発生します。

JSラウンドアップ:JavaScriptイベントループに深く潛り込む JSラウンドアップ:JavaScriptイベントループに深く潛り込む Jul 08, 2025 am 02:24 AM

JavaScriptのイベントループは、コールスタック、WebAPIS、およびタスクキューを調(diào)整することにより、非同期操作を管理します。 1.コールスタックは同期コードを?qū)g行し、非同期タスクに遭遇すると、処理のためにWebAPIに引き渡されます。 2。WebAPIがバックグラウンドでタスクを完了した後、コールバックを?qū)潖辘工毳濠`(マクロタスクまたはマイクロタスク)に入れます。 3.イベントループは、コールスタックが空であるかどうかをチェックします??栅螆龊稀ⅴ畅`ルバックはキューから取り出され、実行のためにコールスタックに押し込まれます。 4.マイクロタスク(Promise.thenなど)は、マクロタスク(SettimeOutなど)より優(yōu)先されます。 5.イベントループを理解するには、メインスレッドのブロックを避け、コード実行順序を最適化するのに役立ちます。

See all articles