C'era una grande differenza tra ciò che fa le funzioni e ciò che fa la classe.
Consente di spiegarlo da zero . 🙂 (solo imperativo)
La storia della programmazione, sappiamo tutti, è iniziata con semplici comandi di base (ad esempio: Assembly).
Next La programmazione strutturata è arrivata con i controlli di flusso (ad esempio: if, switch, while, for ecc.) Questo paradigma consente ai programmatori di controllare il flusso del programma in modo efficace e anche di ridurre al minimo il numero di righe di codice per loop.
Successivamente è arrivata la programmazione procedurale che raggruppa le istruzioni in procedure (funzioni). Ciò ha dato due vantaggi principali ai programmatori.
1. Raggruppa le istruzioni (operazioni) in blocchi separati.
2.Può riutilizzare questi blocchi. (Funzioni)
Ma soprattutto i paradigmi non hanno fornito una soluzione per la gestione delle applicazioni. La programmazione procedurale può anche essere utilizzata solo per applicazioni su piccola scala. Non può essere utilizzato per sviluppare applicazioni web di grandi dimensioni (es: banking, google, youtube, facebook, stackoverflow ecc.), Non può creare framework come android sdk, flutter sdk e molto altro ...
Quindi gli ingegneri fanno molte più ricerche per gestire i programmi in modo corretto.
Infine la programmazione orientata agli oggetti viene fornita con tutte le soluzioni per la gestione delle applicazioni su qualsiasi scala (da Hello World a trilioni di persone che utilizzano la creazione di sistemi, ad esempio google, amazon e oggi il 90% delle applicazioni).
In oop tutte le applicazioni sono costruite intorno agli oggetti, significa che l'applicazione è una raccolta di questi oggetti.
quindi gli oggetti sono l'edificio di base per qualsiasi applicazione.
class (oggetto in fase di esecuzione) raggruppa i dati e le funzioni relative a tali variabili (dati). quindi oggetto della composizione dei dati e delle relative operazioni.
[Qui non ho intenzione di spiegare su oop]
👉👉👉Ok Now Lets coming for flutter framework.👈👈👈
-Dart supporta sia procedurale che oop Ma, il framework Flutter viene costruito completamente utilizzando le classi (oop). (Perché un framework gestibile di grandi dimensioni non può creare utilizzando procedurale)
Qui creerò un elenco di motivi per cui usano le classi invece delle funzioni per creare widget.👇👇👇
1 - La maggior parte delle volte il metodo build (widget figlio) chiama il numero di funzioni sincrone e asincrone.
Ex:
- Per scaricare l'immagine di rete
- ottenere input dall'utente ecc.
quindi il metodo build deve essere mantenuto in un widget di classe separato (perché tutti gli altri metodi chiamati dal metodo build () possono rimanere in una classe)
2 - Usando la classe widget puoi creare il numero di un'altra classe senza scrivere lo stesso codice ancora e ancora (** Use Of Inheritance ** (extends)).
E anche usando l'ereditarietà (estensione) e il polimorfismo (sovrascrittura) è possibile creare una propria classe personalizzata. (In basso nell'esempio, in là personalizzerò (sovrascriverò) l'animazione estendendo MaterialPageRoute (perché la sua transizione predefinita voglio personalizzare).
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 - Le funzioni non possono aggiungere condizioni per i loro parametri, ma usando il costruttore del widget di classe Puoi farlo.
Sotto Esempio di codice👇 (questa funzione è ampiamente utilizzata dai widget del 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 - Le funzioni non possono usare const e il widget Class può usare const per i loro costruttori. (che influenzano le prestazioni del thread principale)
5 - Puoi creare un numero qualsiasi di widget indipendenti usando la stessa classe (istanze di una classe / oggetti) Ma la funzione non può creare widget indipendenti (istanza), ma il riutilizzo sì.
[ogni istanza ha la propria variabile di istanza e quella completamente indipendente dagli altri widget (oggetto), ma la variabile locale della funzione dipende da ciascuna chiamata di funzione * (il che significa che quando si modifica un valore di una variabile locale, essa influisce su tutte le altre parti di l'applicazione che utilizza questa funzione)]
C'erano molti vantaggi in classe rispetto alle funzioni ... (sopra sono solo pochi casi d'uso)
🤯 Il mio pensiero finale
Quindi non utilizzare le funzioni come elemento costitutivo della tua applicazione, usale solo per eseguire operazioni. Altrimenti causa molti problemi non gestibili quando l'applicazione diventa scalabile .
- Utilizzare le funzioni per eseguire piccole porzioni di attività
- Usa la classe come elemento costitutivo di un'applicazione (Gestione dell'applicazione)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
NON È POSSIBILE MISURARE LA QUALITÀ DEL PROGRAMMA PER IL NUMERO DI DICHIARAZIONI (o righe) UTILIZZATE DA esso
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Grazie per aver letto