Había una gran diferencia entre lo que hace la función y lo que hace la clase.
Deja que te lo explique desde cero . 🙂 (solo sobre imperativo)
El historial de programación, todos sabemos que comenzó con comandos básicos directos (por ejemplo: Ensamblaje).
Siguiente La programación estructurada vino con controles de flujo (por ejemplo, si, cambiar, mientras, para, etc.) Este paradigma permite a los programadores controlar el flujo del programa de manera eficaz y también minimizar el número de líneas de código por bucles.
Luego vino la programación procedimental y que agrupa las instrucciones en procedimientos (funciones). Esto dio dos importantes beneficios para los programadores.
1. Agrupe las declaraciones (operaciones) en bloques separados.
2.Puede reutilizar estos bloques. (Funciones)
Pero sobre todo los paradigmas no dieron una solución para la gestión de aplicaciones. La programación por procedimientos también solo se puede utilizar para aplicaciones a pequeña escala. Eso no se puede usar para desarrollar aplicaciones web grandes (por ejemplo: banca, google, youtube, facebook, stackoverflow, etc.), no se pueden crear marcos como android sdk, flutter sdk y mucho más ...
De modo que los ingenieros investigan mucho más para gestionar los programas de forma adecuada.
Finalmente, la Programación Orientada a Objetos viene con todas las soluciones para administrar aplicaciones a cualquier escala (desde hello world hasta billones de personas que utilizan la creación de sistemas, por ejemplo, google, amazon y hoy el 90% de las aplicaciones).
En oop, todas las aplicaciones se basan en objetos, lo que significa que la aplicación es una colección de estos objetos.
por lo que los objetos son el edificio básico para cualquier aplicación.
clase (objeto en tiempo de ejecución) grupo de datos y funciones relacionadas con esas variables (datos). para que el objeto se componga de datos y sus operaciones relacionadas.
[Aquí no voy a explicar sobre oop]
👉👉👉Ok Now Vayamos para flutter framework.👈👈👈
-Dart soporta tanto procedural como oop Pero, el framework Flutter se construye completamente usando clases (oop). (Porque un gran marco manejable no se puede crear usando procedimientos)
Aquí crearé una lista de razones por las que usan clases en lugar de funciones para hacer widgets.
1 - La mayoría de las veces, el método de construcción (widget secundario) llama al número de funciones sincrónicas y asincrónicas.
Ex:
- Para descargar la imagen de red
- obtener información del usuario, etc.
por lo que el método de compilación debe mantenerse en un widget de clase separado (porque todos los demás métodos llamados por el método build () pueden mantenerse en una clase)
2 - Usando la clase de widget, puede crear un número de otra clase sin escribir el mismo código una y otra vez (** Uso de herencia ** (extiende)).
Y también usando herencia (extender) y polimorfismo (anular) puede crear su propia clase personalizada. (Abajo del ejemplo, allí personalizaré (Anularé) la animación extendiendo MaterialPageRoute (porque quiero personalizar su transición predeterminada) .👇
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 - Las funciones no pueden agregar condiciones para sus parámetros, pero usando el constructor del widget de clase puede hacerlo.
Ejemplo de código a continuación👇 (esta función es muy utilizada por los widgets de marco)
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 - Las funciones no pueden usar const y el widget Class puede usar const para sus constructores. (que afectan el rendimiento del hilo principal)
5 - Puede crear cualquier número de widgets independientes usando la misma clase (instancias de una clase / objetos) Pero la función no puede crear widgets independientes (instancia), pero la reutilización sí.
[cada instancia tiene su propia variable de instancia y eso es completamente independiente de otros widgets (objeto), pero la variable local de la función depende de cada llamada de función * (lo que significa que cuando cambia un valor de una variable local afecta a todas las demás partes de la aplicación que utiliza esta función)]
Hubo muchas ventajas en la clase sobre las funciones ... (arriba son solo algunos casos de uso)
🤯 Mi pensamiento final
Por lo tanto, no use las funciones como bloques de construcción de su aplicación, úselas solo para realizar operaciones. De lo contrario, causa muchos problemas imposibles de manejar cuando su aplicación se vuelve escalable .
- Utilice funciones para realizar una pequeña parte de la tarea
- Usar la clase como componente básico de una aplicación (administración de la aplicación)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
NO SE PUEDE MEDIR LA CALIDAD DEL PROGRAMA POR EL NÚMERO DE DECLARACIONES (o líneas) que utiliza
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Gracias por leer