Была большая разница между тем, что делают функции и что делает класс.
Позвольте мне объяснить это с нуля. (Только про императив)
Все мы знаем, что история программирования началась с простых базовых команд (например, «Сборка»).
Далее Структурированное программирование пришло с элементами управления потоком (например: if, switch, while, for и т. Д.). Эта парадигма дает программистам возможность эффективно управлять потоком программы, а также минимизировать количество строк кода за циклами.
Далее пришло процедурное программирование, которое группирует инструкции в процедуры (функции). Это дало программистам два основных преимущества.
1. Сгруппируйте операторы (операции) в отдельные блоки.
2.Можно повторно использовать эти блоки. (Функции)
Но прежде всего парадигмы не дали решения для Управления приложениями. Процедурное программирование также можно использовать только для небольших приложений. Это нельзя использовать для разработки больших веб-приложений (например: банковское дело, google, youtube, facebook, stackoverflow и т. Д.), Нельзя создавать фреймворки, такие как android sdk, flutter sdk и многое другое ...
Поэтому инженеры проводят гораздо больше исследований, чтобы правильно управлять программами.
Наконец, объектно-ориентированное программирование поставляется со всеми решениями для управления приложениями любого масштаба (от привет, мир до триллиона людей, использующих создание системы, например, google, amazon, и сегодня 90% приложений).
В общем, все приложения построены на объектах. Это означает, что приложение представляет собой набор этих объектов.
Таким образом, объекты - это основа любого приложения.
класс (объект во время выполнения) группирует данные и функции, связанные с этими переменными (данными). поэтому объект состоит из данных и связанных с ними операций.
[Здесь я не буду объяснять о уп]
«Хорошо, теперь перейдем к фреймворку флаттера».
-Dart поддерживает как процедурные, так и oop. Но фреймворк Flutter полностью построен с использованием классов (oop). (Потому что большая управляемая структура не может быть создана с использованием процедурных)
Здесь я создам список причин, по которым они используют классы вместо функций для создания виджетов.
1 - Чаще всего метод сборки (дочерний виджет) вызывает ряд синхронных и асинхронных функций.
Пример:
- Скачать сетевой образ
- получить ввод от пользователя и т. д.
поэтому метод сборки необходимо хранить в отдельном виджете класса (потому что все другие методы, вызываемые методом build (), могут храниться в одном классе)
2 - Используя класс виджета, вы можете создать номер другого класса, не записывая один и тот же код снова и снова (** Use Of Inheritance ** (extends)).
А также используя наследование (расширение) и полиморфизм (переопределение), вы можете создать собственный собственный класс. (Пример ниже: там я настрою (переопределю) анимацию, расширив 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 - Функции не могут использовать константу, а виджет класса может использовать константу для своих конструкторов. (которые влияют на производительность основного потока)
5 - Вы можете создать любое количество независимых виджетов, используя один и тот же класс (экземпляры класса / объектов). Но функция не может создавать независимые виджеты (экземпляр), а повторное использование может.
[у каждого экземпляра есть своя собственная переменная экземпляра, которая полностью независима от других виджетов (объекта), но локальная переменная функции зависит от каждого вызова функции * (что означает, что когда вы меняете значение локальной переменной, это влияет на все другие части приложение, которое использует эту функцию)]
У класса было много преимуществ над функциями ... (выше приведены только несколько вариантов использования)
🤯 Моя последняя мысль
Поэтому не используйте функции как строительный блок вашего приложения, используйте их только для выполнения операций. В противном случае это вызовет множество неуправляемых проблем, когда ваше приложение станет масштабируемым .
- Используйте функции для выполнения небольшой части задачи
- Использовать класс как строительный блок приложения (Управление приложением)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
ВЫ НЕ МОЖЕТЕ ИЗМЕРЯТЬ КАЧЕСТВО ПРОГРАММЫ ПО КОЛИЧЕСТВУ ЗАЯВЛЕНИЙ (или строк), ИСПОЛЬЗУЕМЫХ ею
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Спасибо за прочтение