Hangi fonksiyonların yaptığı ve hangi sınıfın yaptığı arasında büyük bir fark vardı.
Bunu en baştan açıklayayım. Only (sadece emir ile ilgili)
Programlama geçmişi, hepimizin bildiği gibi düz temel komutlarla başladık (örneğin: Assembly).
Sonraki Yapılandırılmış programlama Akış kontrolleri ile geldi (örneğin: if, switch, while, for vb.) Bu paradigma, programcılara program akışını etkili bir şekilde kontrol etme ve ayrıca döngülerle kod satırı sayısını en aza indirme olanağı sağlar.
Sonraki Prosedürel programlama geldi ve hangi komutları prosedürler (işlevler) halinde grupladı. Bu, programcılar için iki büyük fayda sağladı.
1. Grup deyimleri (işlemler) ayrı bloklar halinde.
2. Bu blokları yeniden kullanabilir. (Fonksiyonlar)
Ama bütün paradigmaların şeyden vermedi değil uygulamaları yönetme için bir çözüm sağlar. Prosedürel programlama da yalnızca küçük ölçekli uygulamalar için kullanılabilir. Bu, büyük web uygulamaları geliştirmek için kullanılamaz (örn: bankacılık, google, youtube, facebook, stackoverflow vb.), Android sdk, flutter sdk ve çok daha fazlası gibi çerçeveler oluşturamaz ......
Bu nedenle mühendisler, programları doğru şekilde yönetmek için çok daha fazla araştırma yapar.
Son olarak, Nesneye Yönelik Programlama , her ölçekte uygulamaları yönetmek için tüm çözümlerle birlikte gelir (merhaba dünyasından Trilyonlarca insana, örneğin google, amazon ve bugün uygulamaların% 90'ı gibi sistem oluşturmayı kullanan).
Oop'ta tüm uygulamalar Nesneler etrafında oluşturulur. Bu, uygulamanın bu nesnelerin bir koleksiyonu olduğu anlamına gelir.
yani nesneler herhangi bir uygulama için temel yapıdır.
sınıf (çalışma zamanında nesne) grup verileri ve bu değişkenlerle (veriler) ilgili işlevler. böylece nesne verilerden ve bunlarla ilgili işlemlerden oluşur.
[Burada oop hakkında açıklama yapmayacağım]
Tamam Şimdi flutter çerçevesi için gelelim.
-Dart hem yordamsal hem de oop'u destekler. Ancak, Flutter çerçevesi, sınıfları (oop) kullanarak tamamen oluşturulur. (Çünkü büyük yönetilebilir çerçeve prosedür kullanarak oluşturamaz)
Burada, widget yapmak için işlevler yerine sınıfları kullanmalarının nedenlerinin bir listesini oluşturacağım.
1 - Çoğu zaman build yöntemi (alt pencere öğesi) senkron ve asenkron işlevlerin numarasını çağırır .
Ör:
- Ağ görüntüsünü indirmek için
- kullanıcıdan girdi al vb.
bu nedenle derleme yönteminin ayrı bir sınıf parçacığında tutulması gerekir (çünkü diğer tüm yöntemler build () yöntemiyle çağrılar tek bir sınıfta tutabilir)
2 - Widget sınıfını kullanarak, aynı kodu tekrar tekrar yazmadan başka bir sınıfın sayısını oluşturabilirsiniz (** Kalıtımın Kullanımı ** (genişler)).
Ayrıca kalıtım (genişletme) ve çok biçimlilik (geçersiz kılma) kullanarak kendi özel sınıfınızı oluşturabilirsiniz. (Aşağıda, aşağıda, orada, MaterialPageRoute'u genişleterek animasyonu özelleştireceğim (Geçersiz kılacağım) (çünkü varsayılan geçişini özelleştirmek istiyorum).
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 - Fonksiyonlar, parametreleri için koşullar ekleyemez, Ancak sınıf parçacığının yapıcısını kullanarak bunu yapabilirsiniz.
Aşağıda Kod örneği👇 (bu özellik ağırlıklı olarak çerçeve widget'ları tarafından kullanılmaktadır)
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 - Fonksiyonlar const kullanamaz ve Sınıf widget'ı oluşturucuları için const'ı kullanabilir. (ana iş parçacığının performansını etkileyen)
5 - Aynı sınıfı (bir sınıfın / nesnelerin örneklerini) kullanarak istediğiniz sayıda bağımsız pencere öğesi oluşturabilirsiniz, ancak işlev bağımsız parçacıklar (örnek) oluşturamaz, ancak yeniden kullanarak yapabilir.
[her örneğin kendi örnek değişkeni vardır ve bu diğer widget'lardan (nesne) tamamen bağımsızdır, ancak işlevin yerel değişkeni her işlev çağrısına bağlıdır * (bu, yerel bir değişkenin bir değerini değiştirdiğinizde, diğer tüm parçaları bu işlevi kullanan uygulama)]
İşlevlere göre sınıfta birçok Avantaj vardı. (Yukarıda yalnızca birkaç kullanım durumu vardır)
🤯 Son Düşüncem
Bu nedenle, İşlevleri uygulamanızın yapı taşı olarak kullanmayın, yalnızca İşlemler yapmak için kullanın. Aksi takdirde, uygulamanız ölçeklenebilir hale geldiğinde birçok yönetilemeyen soruna neden olur .
- Görevin küçük bir bölümünü yapmak için işlevleri kullanın
- Sınıfı bir uygulamanın yapı taşı olarak kullanın (Uygulamayı yönetme)
📍📍📍📍📍📍📍📍Temel 📍📍📍📍📍📍
PROGRAMIN KALİTESİNİ KULLANIMIYLA BEYAN SAYISI (veya satır) İLE ÖLÇEMEZSİNİZ
📍📍📍📍📍📍📍📍Temel 📍📍📍📍📍📍
Okuduğunuz için teşekkürler