Merhaba 👋 , bugün #Flutter’da factory constructor’ları nasıl kullandığımdan bahsetmek istiyorum ⬇️
İlk olarak, constructor çeşitlerinden bahsedelim kısaca. Temelde, generative ve factory olmak üzere iki çeşit constructor vardır. Generative constructor'lar, her zaman ait oldukları sınıfın yeni bir instance’ını döndürürler.
Factory constructor’ların da bir obje döndürmesi gerekmektedir. Ancak döndürülecek obje bir generative constructor'a göre daha esnektir.
Bir generative constructor'da döndürülecek obje, initializer listesinden sonra kesinleşmiş olur. Ancak factory constructor, bize döndürülecek objeye body içerisinde karar verebilmemizi sağlar.
Obje, body içerisinde belirlendiği için oluşturulan objeyi döndürmek için ‘return’ kullanmamız gerekmektedir. Peki hangi durumlarda factory kullanmak işimize yarayabilir:
1. #Dart dokümantasyonu, her zaman yeni bir objeye ihtiyacımız olmadığında factory kullanabileceğimizi söylüyor. Örneğin, yeni bir obje oluşturmanın masraflı olduğu durumlarda, eldeki objeyi kullanmak için (caching gibi). Bu durumda factory kullanmak daha verimli olabilir. Image
2. Objenin field’larına atanacak değer kompleks bir logic içeriyorsa ve bunu initializer listesinde halletmek zorsa/mümkün değilse. Örneğin, json'dan objeye çevirirken karışık logicleri halletmek için. Asagida, json’dan gelen değerler, direkt olarak parse edilmiş. Image
Burada ise, json’dan gelen değerler üzerinde işlem yapıldıktan sonra obje yaratılmış. Bu sekilde kod, hem daha okunaklı olmuş hem de initializer listesinde halledilemeyecek logicler halledilmiş. Image
3. Sınıfın bir instance’ini döndürmek yerine subclass’ını döndürmek istediğinizde (factory pattern gibi). Her metodun döndürdüğü bir tür vardır, constructor’ın return türü de sınıfın türüdür.
Bir metoddan, o metodun return türünü sağlayan herhangi bir tür döndürülebileceği gibi, factory constructor'dan da sınıfın türüne uyan herhangi bir obje döndürülebilir. Bu obje, sınıfa ait bir instance olabileceği gibi, subclass'a ait bir instance da olabilir. Image
4. Singleton pattern kullanmak istediğimizde. Her zaman yeni bir objeye ihtiyaç duymadığımız da factory kullanabiliriz demiştik. Factory constructor'lar, döndürülecek objeyi body'de oluşturdukları için, kontrol akışlarını kullanarak singleton pattern'i implement edebiliriz.
Böylece, sadece ilk seferde yeni bir obje yaratıp, diğer seferlerde aynı objeyi döndürebiliriz. Ayrıca bu yolla, singleton pattern implementasyonunu da gizlemiş oluruz.
Yani normalde, StorageRepository.instance yada StorageRepository.getInstance() diyerek ulaştığımız singleton instance'ına artık StorageRepository() diyerek ulaşabiliriz. Image
Son olarak, factory constructor icinde ‘this’ keyword’üne erişim yoktur. Bu nedenle sınıfın instance memberlarına (metod ve değişkenlere) erişilemez. Ancak, constructor içerisinde bir obje yaratılıp bu şekilde member’lara erişim sağlanabilir.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Yunus Emre Bakır

Yunus Emre Bakır Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(