पृष्ठभूमि: मैं कार्यात्मक प्रोग्रामिंग का प्रस्तावक हूं जो VB.NET की दुकान पर काम करता है जहां प्रचलित मानसिक मॉडल अनिवार्य प्रोग्रामिंग है। हमारे सिस्टम की नींव होने के नाते WinForms मैं समझ सकता हूं कि हम अनिवार्य प्रोग्रामिंग से पूरी तरह से दूर नहीं होने जा रहे हैं, लेकिन फिर भी मैं एफपी (मुख्य रूप से लिनक के माध्यम से) का उपयोग करने की कोशिश करता हूं जहां भी संभव हो, क्योंकि मुझे इसकी खूबियों पर विश्वास है।
एफपी के खिलाफ तर्क और प्रतिवाद
एक व्यक्ति यह देख सकता है कि धाराप्रवाह लिनाक अपने अनिवार्य समकक्ष की तुलना में कम कुशल है कि यह शैली एक अनुक्रम को दूसरे अनुक्रम में ले जाती है और उसे दोहराती है। आम तौर पर, इसकी अनिवार्यता से कुछ और गुजरने की संभावना होती है जो एक अनुक्रम में दोहराने से बचने के लिए बेहतर अनुकूलित हो सकती है। इस कारण से, लीड समझ नहीं पा रहा था कि मैं एक कार्यात्मक दृष्टिकोण क्यों चुनूंगा जो स्पष्ट रूप से "कम कुशल" है।
- प्रतिवाद : मैंने तर्क दिया कि सीपीयू चक्रों के संदर्भ में कभी-कभी यह कम कुशल होता है, कि मुझे लगा कि यह अधिक मानवीय रूप से समझदार और आसान है क्योंकि प्रत्येक पंक्ति अनुक्रम के ऊपर से गुजरती है। मेरे लिए ऐसा लगता है कि एक असेंबली लाइन है जहाँ उनके स्टेशन के प्रत्येक व्यक्ति के पास बस एक काम है। मुझे लगता है कि दक्षता के नगण्य व्यापार को कोड द्वारा फिर से बनाया गया है, जिनकी चिंताओं को बड़े करीने से अलग किया गया है।
एफपी के खिलाफ अगला तर्क जो मैं अपनी दुकान में सुनता हूं, वह यह है कि डीबग करना कठिन है - जो सच है। लिनक कोड पर कदम रखना आसान नहीं है। और मुझे कभी-कभी बेहतर तरीके से पालन करने और विघटित करने के लिए एक विधि श्रृंखला को खोलना पड़ता है जिसे मैं तुरंत हाजिर नहीं कर सकता।
- _-मुठभेड़-तर्क: हालांकि अधिकांश भाग के लिए मेरे पास यह मुद्दा नहीं है क्योंकि मुझे लगता है कि कार्यात्मक शैली अधिक घोषित है कि यह कैसे पढ़ता है और जब एक कार्यात्मक श्रृंखला के भीतर कोई त्रुटि होती है, तो मैं आमतौर पर इस मुद्दे को तुरंत हल कर सकता हूं।
मेरा प्रश्न
मैं अपनी दुकान में कार्यात्मक शैली को बढ़ावा देने की कोशिश कर रहा हूं और मुझे ऐसा नहीं लगता कि मैं हेडवे बना रहा हूं। मैंने प्रोग्रामिंग की दोनों शैलियों को किया है और हाल ही में हास्केल में डब किया है। वर्षों के अनुभवजन्य अनुभव के बावजूद, अब जब मैं जावास्क्रिप्ट में एफपी का नियमित उपयोग कर रहा हूं, तो यह मुझ पर उगाया जाता है। यह मेरे कोर में सही होने की सूचना देता है जब मैं इसकी तुलना करता हूं कि अगर मैं एक अनिवार्य शैली से जुड़ा हुआ हूं तो मैं क्या कर सकता हूं। मैंने अपने मस्तिष्क को कार्यात्मक सोच की ओर, कार्यात्मक रचना की ओर फिर से पकड़ लिया है।
मैं यह नहीं समझ सकता कि एफपी की खूबियों के बारे में दूसरों को यकीन दिलाना कितना कठिन है।
उदाहरण के लिए, मेरी दुकान के डेवलपर्स Linq का उपयोग करते हैं, लेकिन मुझे लगता है कि वे आम तौर पर डोमेन डेटा से निपटने के संदर्भ में इसका उपयोग करते हैं। मैं इसे और अधिक सामान्य अर्थों में उपयोग करता हूं और इसे कभी भी पसंद करता हूं कि मैं अनुक्रमों / सूचियों या लगातार डेटा संरचनाओं के साथ काम कर रहा हूं। मैं अपने साथियों को लिनक के उपयोग के बारे में समझाने में सक्षम नहीं हुआ।
क्या मैं समझने की कोशिश कर रहा हूं कि क्या एक डेवलपर एफपी को पसंद नहीं करता है।
मैं किसी ऐसे व्यक्ति से जवाब देखना चाहता हूं जिसे एफपी के साथ अच्छा अनुभव है, लेकिन उसने अनिवार्य शैली के पक्ष में फैसला किया। कार्यात्मक का उपयोग करने के बजाय अनिवार्य के साथ रहने का निर्णय क्या है?
यहाँ एक अतिरिक्त उदाहरण अनिवार्य और कार्यात्मक प्रोग्रामिंग के बीच अंतर को उजागर करता है।
मैंने SelectedRows
अपने ग्रिड की विधि इस प्रकार लिखी है :
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
हालांकि, कोड की यह शैली हमारे कुछ डेवलपर्स को असहज बनाती है और इसलिए हमारी लीड इसे और अधिक परिचित बनाती है:
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