国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド 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ù)を自動(dòng)的に適用する新しい関數(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ù)を特定の順序で手動(dòng)で結(jié)合します。最初に渡された値をホルダー変數(shù)に割り當(dāng)てる新しい関數(shù)を作成し、次に最初の関數(shù)を?qū)g行して2番目の関數(shù)を?qū)g行してその変數(shù)の値を更新し、最後にその所有者の値を返します。 (ホルダーと呼ばれる変數(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ù)を使用すると、たとえそれが作成している組み合わせ関數(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ù)を組み合わせたい場合があります。さらに、このプロセスでこの情報(bào)を失います。これらの問題を解決することはできますが、組み合わせの仕組みを習(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ǎng)幛幛筏蓼埂U筏肖Δ?、結(jié)果はクリーンで乾燥し、コードを読みやすくなります。これは私たち全員が欲しいものではありませんか?

(以下はFAQであり、元のテキストに従って調(diào)整および合理化されており、複製情報(bà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ī)能の評(píng)価として扱い、変化する狀態(tài)と変動(dòng)データを回避する例です。このパラダイムでは、関數(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ù)を個(gè)別にテストできます。これにより、バグを分離して修正しやすくなります。また、ソフトウェアの各部分が個(gè)別にテストされて、適切に機(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)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時(shí)間を操作する方法は? JSで日付と時(shí)間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時(shí)間を処理する場合は、次の點(diǎn)に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお?jiǎng)幛幛筏蓼埂?2。時(shí)間情報(bào)を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動(dòng)でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお?jiǎng)幛幛筏蓼埂¥长欷椁沃匾圣荪ぅ螗趣蛄?xí)得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動(dòng)作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動(dòng)的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaとJavaScriptの違いは何ですか? JavaとJavaScriptの違いは何ですか? Jun 17, 2025 am 09:17 AM

JavaとJavaScriptは、異なるプログラミング言語です。 1.Javaは、エンタープライズアプリケーションや大規(guī)模なシステムに適した、靜的に型付けされ、コンパイルされた言語です。 2。JavaScriptは動(dòng)的なタイプと解釈された言語であり、主にWebインタラクションとフロントエンド開発に使用されます。

See all articles