Il y avait une grande différence entre ce que font les fonctions et ce que fait la classe.
Permettez-moi de l'expliquer à partir de zéro. (Uniquement à propos de l'impératif)
L'historique de la programmation, nous le savons tous, a commencé avec des commandes simples de base (par exemple: Assemblage).
La programmation structurée suivante est venue avec des contrôles de flux (par exemple: if, switch, while, for etc). Ce paradigme permet aux programmeurs de contrôler efficacement le flux du programme et aussi de minimiser le nombre de lignes de code par des boucles.
Ensuite, la programmation procédurale est venue et qui regroupe les instructions en procédures (fonctions). Cela a donné deux avantages majeurs aux programmeurs.
1. Groupez les instructions (opérations) en blocs séparés.
2.Peut réutiliser ces blocs. (Fonctions)
Mais surtout, les paradigmes ne donnaient pas de solution pour la gestion des applications. La programmation procédurale ne peut également être utilisée que pour des applications à petite échelle. Cela ne peut pas être utilisé pour développer de grandes applications Web (par exemple: banque, google, youtube, facebook, stackoverflow, etc.), ne peut pas créer de frameworks comme android sdk, flutter sdk et bien plus encore ......
Les ingénieurs font donc beaucoup plus de recherches pour gérer correctement les programmes.
Enfin, la programmation orientée objet est livrée avec toute la solution pour gérer des applications à toutes les échelles (de hello world à des milliards de personnes utilisant la création de système, par exemple, google, amazon et aujourd'hui 90% des applications).
Dans oop, toutes les applications sont construites autour d'objets, cela signifie que l'application est une collection de ces objets.
les objets sont donc le bâtiment de base pour toute application.
class (objet lors de l'exécution) regroupe les données et les fonctions liées à ces variables (données). donc objet compose de données et de leurs opérations connexes.
[Ici, je ne vais pas expliquer à propos de oop]
👉👉👉Ok Now Permet de venir pour le cadre de flutter.👈👈👈
-Dart prend en charge à la fois procédural et oop Mais, le framework Flutter est entièrement construit en utilisant des classes (oop). (Parce qu'un grand cadre gérable ne peut pas créer à l'aide de procédures)
Ici, je vais créer une liste des raisons pour lesquelles ils utilisent des classes à la place des fonctions pour créer des widgets.
1 - La plupart du temps, la méthode de construction (widget enfant) appelle le numéro des fonctions synchrones et asynchrones.
Ex:
- Pour télécharger l'image du réseau
- obtenir l'entrée de l'utilisateur, etc.
donc la méthode de construction doit rester dans un widget de classe séparé (car toutes les autres méthodes appelées par la méthode build () peuvent rester dans une classe)
2 - En utilisant la classe de widget, vous pouvez créer le numéro d'une autre classe sans écrire le même code encore et encore (** Use Of Inheritance ** (extend)).
Et aussi en utilisant l'héritage (étendre) et le polymorphisme (remplacement), vous pouvez créer votre propre classe personnalisée. (Dans l'exemple ci-dessous, je vais personnaliser (remplacer) l'animation en étendant MaterialPageRoute (parce que sa transition par défaut que je veux personnaliser).
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 - Les fonctions ne peuvent pas ajouter de conditions pour leurs paramètres, mais en utilisant le constructeur du widget de classe Vous pouvez le faire.
Ci-dessous l'exemple de code👇 (cette fonctionnalité est fortement utilisée par les widgets du framework)
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 - Les fonctions ne peuvent pas utiliser const et le widget Class peut utiliser le const pour leurs constructeurs. (qui affectent les performances du thread principal)
5 - Vous pouvez créer n'importe quel nombre de widgets indépendants en utilisant la même classe (instances d'une classe / objets) Mais la fonction ne peut pas créer de widgets indépendants (instance), mais la réutilisation le peut.
[chaque instance a sa propre variable d'instance et totalement indépendante des autres widgets (objet), mais la variable locale de la fonction dépend de chaque appel de fonction * (ce qui signifie que lorsque vous modifiez une valeur d'une variable locale, cela affecte toutes les autres parties de l'application qui utilise cette fonction)]
Il y avait de nombreux avantages en classe par rapport aux fonctions. (Ci-dessus ne sont que quelques cas d'utilisation)
🤯 Ma dernière pensée
N'utilisez donc pas les fonctions comme élément constitutif de votre application, utilisez-les uniquement pour effectuer des opérations. Sinon, cela pose de nombreux problèmes difficiles à gérer lorsque votre application devient évolutive .
- Utilisez des fonctions pour effectuer une petite partie de la tâche
- Utiliser la classe comme élément constitutif d'une application (gestion de l'application)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
VOUS NE POUVEZ PAS MESURER LA QUALITÉ DU PROGRAMME PAR NOMBRE DE DÉCLARATIONS (ou de lignes) UTILISÉES PAR lui
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Merci d'avoir lu