関数の機能とクラスの機能には大きな違いがありました。
最初から説明します。🙂(必須事項についてのみ)
プログラミングの歴史、私たちは皆、まっすぐな基本的なコマンド(eg-:Assembly)から始めたことを知っています。
次の構造化プログラミングにはフロー制御が付属しています(例:if、switch、while、forなど)。このパラダイムにより、プログラマーはプログラムのフローを効果的に制御し、ループによってコード行の数を最小限に抑えることができます。
次の手続き型プログラミングが登場し、命令を手続き(関数)にグループ化しました。これは、プログラマーに2つの大きな利点をもたらしました。
1.ステートメント(操作)を個別のブロックにグループ化します。
2.これらのブロックを再利用できます。(機能)
しかし、上記のすべてのパラダイムは、アプリケーションを管理するためのソリューションを提供しませんでした。また、手続き型プログラミングは小規模なアプリケーションでのみ使用できます。これは、大規模なWebアプリケーション(例:バンキング、google、youtube、facebook、stackoverflowなど)の開発には使用できません。androidsdk、flutter sdkなどのフレームワークを作成できません。
そのため、エンジニアはプログラムを適切に管理するために、さらに多くの調査を行います。
したがって、オブジェクトはあらゆるアプリケーションの基本的な建物です。
クラス(実行時のオブジェクト)は、これらの変数(データ)に関連するデータと関数をグループ化します。したがって、データのオブジェクト作成とその関連操作。
[ここでは、oopについては説明しません]
👉👉👉OKフラッターフレームワークに参加しましょう。👈👈👈
-Dartは、手続き型とoopの両方をサポートしますが、Flutterフレームワークは、classes(oop)を使用して完全に構築します。(大規模な管理可能なフレームワークは手続き型を使用して作成できないため)
ここでは、ウィジェットを作成するために関数ではなくクラスを使用する理由のリストを作成します。👇👇👇
1-ほとんどの場合、ビルドメソッド(子ウィジェット)は同期関数と非同期関数の数を呼び出します。
例:
- ネットワークイメージをダウンロードするには
- ユーザーからの入力など
そのため、ビルドメソッドは別のクラスウィジェットに保持する必要があります(build()メソッドによって呼び出される他のすべてのメソッドは1つのクラスに保持できるため)
2-ウィジェットクラスを使用すると、同じコードを何度も書くことなく、別のクラスの数を作成できます(**継承の使用**(拡張))。
また、inheritance(extend)とpolymorphism(override)を使用して、独自のカスタムクラスを作成できます。(下の例では、MaterialPageRouteを拡張してアニメーションをカスタマイズ(オーバーライド)します(デフォルトの遷移をカスタマイズしたいため)。👇
class MyCustomRoute<T> extends MaterialPageRoute<T> {
MyCustomRoute({ WidgetBuilder builder, RouteSettings settings })
: super(builder: builder, settings: settings);
@override //Customize transition
Widget buildTransitions(BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child) {
if (settings.isInitialRoute)
return child;
// Fades between routes. (If you don't want any animation,
// just return child.)
return new FadeTransition(opacity: animation, child: child);
}
}
3-関数はパラメーターの条件を追加できませんが、クラスウィジェットのコンストラクターを使用してこれを行うことができます。
下のコード例👇(この機能はフレームワークウィジェットで頻繁に使用されます)
const Scaffold({
Key key,
this.bottomNavigationBar,
this.bottomSheet,
this.backgroundColor,
this.resizeToAvoidBottomPadding,
this.resizeToAvoidBottomInset,
this.primary = true,
this.drawerDragStartBehavior = DragStartBehavior.start,
this.extendBody = false,
this.extendBodyBehindAppBar = false,
this.drawerScrimColor,
this.drawerEdgeDragWidth,
}) : assert(primary != null),
assert(extendBody != null),
assert(extendBodyBehindAppBar != null),
assert(drawerDragStartBehavior != null),
super(key: key);
4-関数はconstを使用できず、クラスウィジェットはコンストラクターにconstを使用できます。(メインスレッドのパフォーマンスに影響する)
5-同じクラス(クラス/オブジェクトのインスタンス)を使用して任意の数の独立したウィジェットを作成できますが、関数は独立したウィジェット(インスタンス)を作成できませんが、再利用はできます。
[各インスタンスには独自のインスタンス変数があり、他のウィジェット(オブジェクト)から完全に独立していますが、関数のローカル変数は各関数呼び出しに依存しています*(つまり、ローカル変数の値を変更すると、他のすべての部分に影響します)この機能を使用するアプリケーション)]
関数よりもクラスに多くの利点がありました。(上記はいくつかのユースケースのみです)
🤯私の最後の考え
そのため、アプリケーションのビルディングブロックとして関数を使用しないでください。操作を行うためにのみ使用してください。そうしないと、アプリケーションがスケーラブルになると、多くの扱いにくい問題が発生します。
- タスクのごく一部を実行するための関数を使用する
- アプリケーションのビルディングブロックとしてクラスを使用する(アプリケーションの管理)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
ステートメントの数(または行)によってプログラムの品質を測定することはできません
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
読んでくれてありがとう