Arka plan: Geçerli zihinsel modelin zorunlu programlama olduğu bir VB.NET mağazasında çalışan fonksiyonel programlamanın savunucusuyum. Sistemimizin bu temeli WinForms olduğundan, zorunlu programlamadan tamamen uzaklaşmayacağımızı anlayabiliyorum, ancak yine de FP'yi (öncelikle Linq aracılığıyla) mümkün olan her yerde kullanmaya çalışıyorum çünkü onun özelliklerine inanıyorum.
FP'ye karşı argümanlar ve karşı argümanlar
Akıcı Linq'in zorunlu karşıtlığından daha az verimli olduğu fark edilebilir, çünkü bu tarz bir sekansı başka bir sekansa indirir ve tekrarlar. Genel olarak, bir dizi üzerinden tekrar geçişlerini önlemek için daha iyi optimize edilebilen zorunlu yaklaşımdan birkaç geçiş daha alacaktır. Bu nedenle, lider neden açıkça "daha az verimli" işlevsel bir yaklaşım seçeceğimi anlayamadı.
- Karşı argüman : CPU döngüleri açısından bazen daha az verimli olsa da, her satırın sekans üzerinden geçişinde sadece bir şey yaptığı için insanca anlaşılır ve takip edilmesi kolay olduğunu düşündüm. Bana göre bu, istasyonundaki herkesin yapacak tek bir işi olduğu bir montaj hattına sahip olmak gibi. Verimlilik ihmal edilebilir ticaret kaygıları düzgün ayrılmış kod tarafından telafi hissediyorum.
Dükkanımda duyduğum FP'ye karşı bir sonraki argüman, hata ayıklamanın daha zor olduğu - ki bu doğru. Linq kodunun üzerinden geçmek kolay değil. Ve bazen hemen tespit edemediğim sorunları daha iyi takip etmek ve incelemek için bir yöntem zincirini çözmek zorundayım.
- _Counter-argüman: Çoğunlukla bununla ilgili bir sorunum olmasa da, işlevsel stilin nasıl okunduğunda daha açıklayıcı olduğunu ve bir fonksiyonel zincir içinde bir hata atıldığında, genellikle sorunu hemen tespit edebileceğimi düşünüyorum.
Benim sorum
Dükkanımızda fonksiyonel stili tanıtmaya çalışıyorum ve ilerleme kaydettiğimi hissetmiyorum. Her iki programlama tarzını da yaptım ve Haskell'de son zamanlarda göz gezdirdim. Yıllarca süren zorunlu deneyime rağmen, şimdi JavaScript'te FP'yi rutin olarak kullandığım için, bu benim üzerimde büyüdü. Zorunlu bir stile yapışırsam çekirdiklerimle karşılaştırdığımda çekirdeğimde bir doğruluk notu çalar. Beynimi işlevsel düşünceye, işlevsel bileşime doğru yeniden eğittim.
Anlayamadığım şey, FP'nin değerlerini başkalarına ikna etmenin ne kadar zor olduğudur.
Örneğin, mağazamdaki geliştiriciler Linq kullanıyorlar, ancak genellikle etki alanı verileriyle ilgilenmek bağlamında kullandıklarını düşünüyorum. Daha genel anlamda kullanıyorum ve diziler / listeler veya kalıcı veri yapıları ile uğraştığımda her zaman tercih ediyorum. Takım arkadaşlarımı Linq kullanımını genişletmeye ikna edemedim.
Anlamaya çalıştığım şey, bir geliştiricinin FP'yi sevmemesine neden olan şey.
FP ile iyi deneyime sahip ancak zorunlu stil lehine karar veren birinden bir cevap görmek istiyorum. İşlevsel kullanmak yerine zorunlu olarak kalma kararını ne çekti?
Zorunlu ve fonksiyonel programlama arasındaki farkları vurgulayan ek bir örnek.
SelectedRows
Linq ızgaramızın yöntemini şöyle yazdım :
Public Property SelectedRows() As DataRow() Implements IDataSourceControl.SelectedRows
Get
Return Me.ugrBase.Selected.Rows.
OfType(Of Infragistics.Win.UltraWinGrid.UltraGridRow)().
Select(Function(ugr) ugr.ListObject).
OfType(Of DataRowView)().
Select(Function(drv) drv.Row).
ToArray
End Get
Ancak, bu kod stili bazı geliştiricilerimizi rahatsız ediyor ve bu nedenle liderimiz bunu daha tanıdık olarak yeniden yazdı:
Public Property SelectedRows() As DataRow() Implements IDataSourceControl.SelectedRows
Get
Dim plstRows As New List(Of DataRow)
For Each bugrLoop As Infragistics.Win.UltraWinGrid.UltraGridRow In Me.ugrBase.Selected.Rows
If bugrLoop.ListObject IsNot Nothing Then
plstRows.Add(CType(bugrLoop.ListObject, DataRowView).Row)
End If
Next
Return plstRows.ToArray()
End Get