Có một sự khác biệt lớn giữa những gì chức năng làm và những gì lớp làm.
Cho phép tôi sẽ giải thích nó từ đầu .🙂 (chỉ về mệnh lệnh)
Lịch sử lập trình, chúng ta đều biết bắt đầu với các lệnh cơ bản đơn giản (ví dụ-: Assembly).
Tiếp theo Lập trình có cấu trúc đi kèm với các điều khiển Luồng (ví dụ: if, switch, while, for, v.v.) Mô hình này cho phép các lập trình viên kiểm soát luồng chương trình một cách hiệu quả và cũng giảm thiểu số lượng dòng mã theo vòng lặp.
Tiếp theo lập trình thủ tục xuất hiện và nhóm các hướng dẫn thành các thủ tục (hàm). Điều này mang lại Hai lợi ích chính cho các lập trình viên.
1. Nhóm các câu lệnh (hoạt động) thành các khối riêng biệt.
2.Có thể sử dụng lại các khối này. (Chức năng)
Nhưng trên tất cả các mô hình đã không đưa ra giải pháp để Quản lý các ứng dụng. Lập trình thủ tục cũng chỉ có thể sử dụng cho các ứng dụng quy mô nhỏ. Điều đó không thể được sử dụng để phát triển các ứng dụng web lớn (ví dụ: ngân hàng, google, youtube, facebook, stackoverflow, v.v.), không thể tạo các khung như android sdk, flaming sdk và nhiều hơn nữa ......
Vì vậy, các kỹ sư nghiên cứu nhiều hơn để quản lý các chương trình một cách thích hợp.
Cuối cùng, Lập trình hướng đối tượng đi kèm với tất cả các giải pháp để quản lý ứng dụng ở mọi quy mô. (Từ hello world đến nghìn tỷ người sử dụng hệ thống tạo như google, amazon, và ngày nay là 90% ứng dụng).
Trên hết, tất cả các ứng dụng đều được xây dựng xung quanh các Đối tượng, có nghĩa là ứng dụng là một tập hợp các đối tượng này.
vì vậy các đối tượng là nền tảng cơ bản cho bất kỳ ứng dụng nào.
lớp (đối tượng lúc chạy) nhóm dữ liệu và các hàm liên quan đến các biến (dữ liệu) đó. vì vậy đối tượng tổng hợp dữ liệu và các hoạt động liên quan của chúng.
[Ở đây tôi sẽ không giải thích về oop]
👉👉👉Ok Now Hãy đến với khuôn khổ rung động.👈👈👈
-Dart hỗ trợ cả thủ tục và oop Nhưng, Flutter framework xây dựng hoàn toàn bằng cách sử dụng các lớp (oop). (Vì khung có thể quản lý lớn không thể tạo bằng thủ tục)
Ở đây tôi sẽ tạo danh sách lý do họ sử dụng các lớp thay vì các hàm để tạo widget.👇👇👇
1 - Hầu hết các lần xây dựng phương pháp (widget con) gọi số chức năng đồng bộ và không đồng bộ.
Ví dụ:
- Để tải xuống hình ảnh mạng
- nhận đầu vào từ người dùng, v.v.
vì vậy phương thức build cần phải giữ trong widget lớp riêng biệt (vì tất cả các phương thức khác được gọi bằng phương thức build () có thể giữ trong một lớp)
2 - Sử dụng lớp widget, bạn có thể tạo số lớp khác mà không cần viết đi viết lại cùng một đoạn mã (** Use Of Inheritance ** (mở rộng)).
Và cũng bằng cách sử dụng kế thừa (mở rộng) và đa hình (ghi đè), bạn có thể tạo lớp tùy chỉnh của riêng mình. (Ví dụ dưới đây, Trong đó tôi sẽ tùy chỉnh (Ghi đè) hoạt ảnh bằng cách mở rộng MaterialPageRoute (vì chuyển đổi mặc định của nó mà tôi muốn tùy chỉnh) .👇
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 - Các hàm không thể thêm điều kiện cho các tham số của chúng, Nhưng sử dụng hàm tạo của tiện ích lớp Bạn có thể làm điều này.
Xuống bên dưới Code example👇 (tính năng này được sử dụng nhiều bởi các widget khung)
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 - Các hàm không thể sử dụng const và tiện ích lớp có thể sử dụng const cho các hàm tạo của chúng. (ảnh hưởng đến hiệu suất của luồng chính)
5 - Bạn có thể tạo bất kỳ số lượng widget độc lập nào bằng cách sử dụng cùng một lớp (các thể hiện của một lớp / đối tượng) Nhưng hàm không thể tạo các widget độc lập (instance), nhưng có thể sử dụng lại.
[mỗi phiên bản có biến phiên bản riêng của chúng và hoàn toàn độc lập với các tiện ích con khác (đối tượng), Nhưng biến cục bộ của hàm phụ thuộc vào từng lệnh gọi hàm * (có nghĩa là, khi bạn thay đổi giá trị của biến cục bộ, nó sẽ ảnh hưởng đến tất cả các phần khác của ứng dụng sử dụng chức năng này)]
Có nhiều Ưu điểm trong lớp hơn các hàm .. (trên đây chỉ là một số trường hợp sử dụng)
🤯 Suy nghĩ cuối cùng của tôi
Vì vậy, đừng sử dụng Functions làm khối xây dựng ứng dụng của bạn, chỉ sử dụng chúng để thực hiện các Operations. Nếu không, nó gây ra nhiều vấn đề không thể khắc phục khi ứng dụng của bạn có thể mở rộng .
- Sử dụng các hàm để thực hiện một phần công việc nhỏ
- Sử dụng lớp làm khối xây dựng ứng dụng (Quản lý ứng dụng)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
BẠN KHÔNG THỂ ĐO LƯỜNG CHẤT LƯỢNG CHƯƠNG TRÌNH BẰNG SỐ BÁO CÁO (hoặc dòng) SỬ DỤNG CỦA CHƯƠNG TRÌNH
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Cảm ơn vì đã đọc