著者のソース: https://ost.51cto.com/user/posts/16066420
声明
JavaScript プログラミングにおける関数は非常に興味深い点であり、JavaScript 関数は C や Java などの他の言語とは大きく異なります。他のプログラミング言語から移行した学生にとっては、関数 function と => 関数の違いなど、特定の「落とし穴」がある可能性があります。関数 function this キーワードの占有率など。
この知識は次の場合に使用される可能性がありますが、紙面の都合上、これらの文法については説明せず、さまざまなエンコード方式のスタイルの問題についてのみ説明します。
テスト環境に関するステートメント
テストツール: DevEco Studio 3.1.1 Release ビルドバージョン: 3.1.0.501
テストプラットフォーム: HarmonyOS Api9 x86 仮想マシン
テスト言語: ArkTS (JavaScript 文法部分のみテスト)
導入
JavaScript プログラミング スタイルの柔軟性のため。単純な合計関数は、JavaScript ではさまざまなスタイルで表現できます。
エディターは、関数型プログラミング、オブジェクト指向プログラミング、オブジェクト指向チェーン プログラミング、宣言型プログラミングなど、さまざまな方法でそれを表現します。
以下のコードは、レンガを投げて翡翠を引き寄せる効果のみを目的としており、実際の開発コードを表すものではなく、現在のコーディング スタイルをすべて表すものではありません。実際の開発プロセスでは、各コーディングスタイルもさらに細分化されたスタイルになります。
手続き型プログラミング
コード
// 过程式编程
function add(...is: number[]) {
// 总和
let sum = 0;
// 求和
for (let index = 0; index < is.length; index++)
sum += is[index];
// 返回总和
return sum;
}
/**
* 使用样例
* console.log(add(11, 22, 33));
*/
解釈する
手続き型プログラミングは、最も単純かつ粗雑で直接的なプログラミング方法であり、手続き型プログラミングはすべての主流のプログラミング言語でサポートされています。
手続き型プログラミングでは、多くの場合、コードの継続的な保守性と拡張性を確保するために、プログラマーに優れたプログラミング リテラシーとビジネスに対する深い理解が求められます。
ビジネスが不確実で、実装ロジックが頻繁に変更され、実装ソリューションが不安定な部分では、コードが制御不能になりやすいため、このコーディング スタイルを使用することはお勧めできません。
ただし、アルゴリズムの実装の観点から、著者はこのコーディング スタイルを使用することを強くお勧めします。シンプルで信頼性が高く、プログラマーの頭を大幅に節約できます。
カレープログラミング
コード
// 自动柯里化机,可以自动把函数转化为柯里化风格。
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function (...nextArgs) {
return curried.apply(this, args.concat(nextArgs));
}
}
}
}
// 获得转化后的函数
export const curriedAdd = curry(add2);
/**
* 使用样例
* console.log(curriedAdd(1)(2)); // 3
* console.log(curriedAdd(1, 2)); // 3
* console.log(curriedAdd(1)(2, 3)); // 3
*/
解釈する
カリー化プログラミングの特徴は、関数の連続的なネストです。これは、フロントエンド開発で非常に一般的なプログラミング方法です。しかし、編集者は次の理由からこのプログラミング方法に強く反対しています。
- カリープログラミングは開発の柔軟性を向上させますが、関数の変更可能性も低下させるため、その後のリファクタリングで全体に影響を及ぼす可能性があります。
- カリー化の優れた機能は関数の入れ子ですが、これは「決して入れ子にしない」というプログラミング哲学に準拠していません。ネストすると可読性が大幅に低下する可能性があります。
本当にカリー化されたプログラミング スタイルを使用するつもりの場合。編集者は、完全なコメントを書くことをお勧めします。!!
関数が何をしたいのか、パラメーターの数、何を返したいのか、どのような状況でカリー化が終了するのかを知るために関数を読む必要がなくなるまで書き続けます。。
オブジェクト指向プログラミング スタイルの関数
コード
// 面向对象风格函数
export function count() {
// 总和属性
this._sum = 0;
// 添加方法方法
this.add = (i) => this._sum += i;
// 返回总和方法
this.get = () => this._sum;
// 返回构造对象
return this;
}
/*
// 使用样例
* a = count();
* console.log(a.add(10));
* console.log(a.add(20));
* a.add(30);
* console.log(a.get());
*/
解釈する
後述するチェーンプログラミングに比べ、よりオーソドックスなオブジェクト指向スタイル。各演算の結果と型が明確であり、最新のプログラミング ツールを使用すると、プログラミング効率が非常に高くなります。
オブジェクト指向風関数、チェーンプログラミング
コード
//面向对象链式编程风格
// 构造函数
export function count2() {
// 总和属性
this._sum = 0;
// 添加方法
this.add = (is) => ((this._sum += is), this);
// 求和方法
this.get = () => this._sum
// 返回构造对象
return this;
}
/*使用样例
console.log(count().add(10).add(20).add(30).get());
*/
解釈する
これをオブジェクト指向と区別する理由は、オブジェクト指向チェーン スタイルのプログラミングが基本的にカリー プログラミングに取って代わることができるためです。
カリー化と比較して、このプログラミング スタイルはよりフラットで読みやすく、ある程度のスケーラビリティを備えています。
では、カリー化を選択できるのに、なぜカリー化を使用するのでしょうか?
宣言型関数
コード
// 声明式风格函数
export function sum3(is, get) {
let ans = 0;
// 这里可以使用任何实现方式,可以使用异步等方式实现
is.forEach(element => {
ans += element;
});
// 无论用任何方式实现,最后所有运算结束后都使用get函数作为回调。
get(ans)
}
解釈する
宣言型関数の特徴は、そのコードがどのようなものであるかではなく、開発者が呼び出すためにどのようなパラメーターを提供するかにあります。実装方法はまったく重要ではなく、実装順序も重要ではないため、開発者は実装の順序や実装方法を気にしなくなりました。あなたが望むのは答え、そして答えを得ることだけです。実装は任意の方法で実装でき、マルチスレッド、非同期、またはその他の方法を使用して内部的に実装できます。
要約する
現代のコーディング スタイルの進化は、対処する必要がある問題の変化に伴う焦点の変化に他なりません。開発者の注意を変えるには、開発者が自分のビジネスにより多くのエネルギーを注げるようにします。コーディング スタイルが高度であればあるほど使いやすいというわけではなく、最も重要なことは、適切な場所で適切なコーディング スタイルを選択することです。
関連拡張機能 - ローコード開発
ローコード開発は、近年 Web 開発分野で注目を集めているトレンドです。ローコード開発とは、最小限のプログラミング コードを使用してアプリケーションやビジネス ロジックを開発することを指し、IT やプログラミングの経験がない初心者でも、必要な機能を迅速に作成できます。
ローコード開発が従来の開発者の役割を脅かしているわけではありませんが、傾向がローコード (またはノーコード) 開発に向かっていることは否定できません。アメリカの調査会社ガートナーの予測によると、2024年までにアプリケーション開発プロジェクトの約65%がローコードプラットフォームで開発されるようになるという。開発者にとってこの傾向は無視できず、開発者の働き方は今後数年間で徐々に変化していくことが予想されます。
ここ数年、漠然とローコードに出会ったのですが、現在では比較的人気があり、大手メーカーも続々と参入しています。
私の考えでは、ローコードとは、フロントエンド、バックエンド、データベースをすべて一度に実行できるシステムを、ドラッグしたり、動かしたり、ワンパス操作で作成したりすることです。もちろんこれが最終目標かもしれません。
リンク: www.jnpfsoft.com/?csdn、興味のある方はぜひ体験してみてください。
JNPF の利点は、フロントエンド コードとバックエンド コードを生成できることです。これにより、優れた柔軟性が得られ、より複雑でカスタマイズされたアプリケーションを作成できます。また、そのアーキテクチャ設計により、開発者は基礎となる技術的な詳細を気にすることなく、アプリケーション ロジックとユーザー エクスペリエンスの開発に集中できます。