Існувала велика різниця між тим, що виконує функції, і тим, що робить клас.
Давайте я поясню це з дуже нуля.🙂 (лише про імператив)
Історія програмування, всі ми знаємо, почалася з прямих базових команд (наприклад-: Збірка).
Наступне Структуроване програмування поставлено з елементами управління потоками (наприклад, якщо:, переключення, в той час як для і т. Д.) Ця парадигма дає програмістам можливість ефективно контролювати потік програми, а також її мінімізувати кількість рядків коду за допомогою циклів.
Далі з'явилося програмування процедур, яке об'єднує вказівки щодо процедур (функцій). Це дало дві основні переваги програмістам.
1. Групові оператори (операції) в окремі блоки.
2.Можна використовувати ці блоки. (Функції)
Але перш за все парадигми не давали рішення для керування програмами. Процедурне програмування також можна використовувати лише для невеликих програм. Це не можна використовувати для розробки великих веб-додатків (наприклад,: банківська справа, google, youtube, facebook, stackoverflow тощо), не може створювати рамки, такі як android sdk, flutter sdk та багато іншого ......
Тож інженери роблять набагато більше досліджень для правильного управління програмами.
Нарешті, об'єктно-орієнтоване програмування має все рішення для управління додатками будь-якого масштабу (від привітного світу до трильйону людей, що використовують створення системи, наприклад, google, amazon та сьогодні 90% додатків).
У oop всі програми створюються навколо об'єктів. Це означає, що додаток - це сукупність цих об'єктів.
тому об'єкти є основною спорудою для будь-якого застосування.
клас (об’єкт під час виконання) групових даних та функцій, пов'язаних із цими змінними (даними). тому об'єкт складається з даних та пов'язаних з ними операцій.
[Тут я не збираюся пояснювати про oop]
Ок зараз Давайте прийдемо для розмивання рамки.👈👈👈
-Dart підтримує як процедурні, так і oop Але, Flutter Framework повністю будується за допомогою класів (oop). (Оскільки великий керований фреймворк неможливо створити, використовуючи процедурні)
Тут я створю список причин, коли вони використовують класи замість функцій для створення віджетів
1 - У більшості випадків метод побудови (довідкового віджета) викликає кількість синхронних та асинхронних функцій.
Наприклад:
- Завантажити зображення в мережі
- отримати вхід від користувача тощо.
тому метод збирання потрібно зберігати в окремому віджеті класу (тому що всі інші методи виклику методом build () можуть зберігатися в одному класі)
2 - Використовуючи клас віджетів, ви можете створювати номер іншого класу, не записуючи той самий код знову і знову (** Використання спадкування ** (розширення)).
А також, використовуючи успадкування (розширення) та поліморфізм (переопределення), ви можете створити власний власний клас. (Нижче прикладу нижче, там я налаштувати (переосмислити) анімацію, розширивши 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, а віджет Class може використовувати const для своїх конструкторів. (які впливають на продуктивність основної нитки)
5 - Ви можете створити будь-яку кількість незалежних віджетів за допомогою одного класу (екземпляри класу / об’єктів).
[кожен екземпляр має власну змінну екземпляра і повністю незалежний від інших віджетів (об'єкта), але локальна змінна функції функції залежить від кожного виклику функції * (це означає, що при зміні значення локальної змінної це впливає на всі інші частини програма, яка використовує цю функцію)]
У класі було багато переваг над функціями .. (вище лише кілька випадків використання)
🤯 Моя заключна думка
Тому не використовуйте Функції як складовий блок програми, використовуйте їх лише для виконання операцій. Інакше це може спричинити багато незмінних проблем, коли ваша програма стає масштабованою .
- Використовуйте функції для виконання невеликої частини завдань
- Використовувати клас як будівельний блок програми (Керування додатком)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
НЕ МОЖЕТЕ ВИМІРИТИ ЯКІСТЬ ПРОГРАМИ НА РОЗМІРУВАННЯ (або рядків), ВИКОРИСТОВУВАННЯ нею
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Дякуємо за прочитане