Ada perbedaan besar antara fungsi apa dan fungsi kelas.
Mari saya jelaskan dari awal.🙂 (hanya tentang keharusan)
Sejarah pemrograman, kita semua tahu dimulai dengan perintah dasar langsung (misalnya: Majelis).
Pemrograman terstruktur berikutnya hadir dengan kontrol Flow (misalnya: if, switch, while, for dll) Paradigma ini memberikan programmer untuk mengontrol aliran program secara efektif dan juga meminimalkan jumlah baris kode dengan loop.
Pemrograman prosedural berikutnya datang dan yang mengelompokkan instruksi ke dalam prosedur (fungsi). Ini memberi dua manfaat utama bagi programmer.
1. Pernyataan grup (operasi) ke dalam blok terpisah.
2. Dapat menggunakan kembali blok ini. (Fungsi)
Tetapi di atas semua paradigma tidak memberikan solusi untuk mengelola aplikasi. Pemrograman prosedural juga hanya dapat digunakan untuk aplikasi skala kecil. Itu tidak dapat digunakan untuk mengembangkan aplikasi web besar (misalnya: banking, google, youtube, facebook, stackoverflow dll), tidak dapat membuat kerangka kerja seperti android sdk, flutter sdk dan banyak lagi ......
Jadi, para insinyur melakukan lebih banyak penelitian untuk mengelola program dengan cara yang tepat.
Akhirnya Pemrograman Berorientasi Objek hadir dengan semua solusi untuk mengelola aplikasi dalam skala apa pun. (Dari hello world hingga Triliun orang menggunakan pembuatan sistem misalnya-google, amazon, dan saat ini 90% aplikasi).
Di OOP semua aplikasi dibangun di sekitar Objek. Artinya aplikasi adalah kumpulan dari objek-objek ini.
jadi objek adalah bangunan dasar untuk aplikasi apa pun.
class (objek saat runtime) mengelompokkan data dan fungsi yang terkait dengan variabel tersebut (data). jadi objek terdiri dari data dan operasi terkaitnya.
[Di sini saya tidak akan menjelaskan tentang oop]
👉👉👉Ok Sekarang Mari datang untuk kerangka flutter.👈👈👈
-Dart mendukung prosedural dan oop Tapi, kerangka Flutter sepenuhnya dibangun dengan menggunakan kelas (oop). (Karena kerangka besar yang dapat dikelola tidak dapat dibuat menggunakan prosedural)
Di sini saya akan membuat daftar alasan mereka menggunakan kelas, bukan fungsi untuk membuat widget.👇👇👇
1 - Sering kali metode build (widget anak) memanggil jumlah fungsi sinkron dan asinkron.
Ex:
- Untuk mengunduh citra jaringan
- dapatkan masukan dari pengguna dll.
jadi metode build perlu disimpan dalam widget kelas yang terpisah (karena semua metode lain yang dipanggil oleh metode build () dapat disimpan dalam satu kelas)
2 - Menggunakan kelas widget Anda dapat membuat nomor dari kelas lain tanpa menulis kode yang sama berulang kali (** Use Of Inheritance ** (extends)).
Dan juga menggunakan warisan (memperpanjang) dan polimorfisme (menimpa) Anda dapat membuat kelas khusus sendiri. (Di bawah contoh, Di sana saya akan menyesuaikan (Menimpa) animasi dengan memperluas MaterialPageRoute (karena transisi defaultnya saya ingin menyesuaikan) .👇
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 - Fungsi tidak dapat menambahkan kondisi untuk parameternya, Tetapi menggunakan konstruktor widget kelas Anda dapat melakukan ini.
Di bawah contoh Kode👇 (fitur ini banyak digunakan oleh widget kerangka kerja)
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 - Fungsi tidak dapat menggunakan const dan widget Kelas dapat menggunakan const untuk konstruktornya. (yang mempengaruhi kinerja utas utama)
5 - Anda dapat membuat sejumlah widget independen menggunakan kelas yang sama (instance dari kelas / objek) Tetapi fungsi tidak dapat membuat widget independen (instance), tetapi dapat menggunakan kembali.
[setiap instance memiliki variabel instance sendiri-sendiri dan yang sepenuhnya independen dari widget (objek) lain, Tetapi variabel lokal fungsi bergantung pada setiap pemanggilan fungsi * (yang berarti, ketika Anda mengubah nilai variabel lokal, itu mempengaruhi semua bagian lain dari aplikasi yang menggunakan fungsi ini)]
Ada banyak Keuntungan di kelas dibandingkan fungsi .. (di atas hanya beberapa kasus penggunaan)
🤯 Pikiran Terakhir Saya
Jadi jangan gunakan Functions sebagai blok penyusun aplikasi Anda, gunakan hanya untuk melakukan Operasi. Jika tidak, ini menyebabkan banyak masalah yang tidak dapat ditangani saat aplikasi Anda menjadi skalabel .
- Gunakan fungsi untuk melakukan sebagian kecil tugas
- Gunakan kelas sebagai blok penyusun aplikasi (Mengelola aplikasi)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
ANDA TIDAK DAPAT MENGUKUR KUALITAS PROGRAM DENGAN JUMLAH LAPORAN (atau baris) YANG DIGUNAKAN OLEHnya
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
Terima kasih sudah membaca