क्या यह ठीक होगा यदि मैं अपनी सभी रूबी को लिखने का फैसला करता हूं जैसे कि यह हास्केल था?


10

यह देखते हुए कि रूबी में अच्छी सूची संचालन क्षमताएं हैं, इन-बिल्ट, मैप, सेलेक्ट, कलेक्ट आदि हैं। इसमें प्रोक्स, ब्लॉक और लैंबडास हैं, और इसमें अच्छा पुनरावृत्ति समर्थन ( eachपरिवार) है, क्या यह एक बुरा डिज़ाइन निर्णय होगा यदि मैं प्रयास करूं मेरे सभी रूबी सामान को सबसे शुद्ध-कार्यात्मक तरीके से लिखना संभव है? कोड के लिए Escpatically जो थोड़ा या कोई I / O है (इस प्रकार कम स्पष्ट दुष्प्रभाव)?

मैं हास्केल सीख रहा हूं (जिसे 'असली' हैकर की भाषा कहा जाता है), और यह काम करने के तरीके के साथ प्यार में है - मैं रूबी से प्यार करता हूं, लेकिन लगता है कि यह और भी मजेदार हो सकता है जब अधिक हास्केल आत्मा इसमें बहती है (अच्छी तरह से, didn 'टी रूबी उधार / पहले से बहुत कुछ सीखना है?'

रचनात्मक मार्गदर्शन का स्वागत है ...


13
सिर्फ हास्केल में क्यों नहीं लिखा?

1
मैं अकेले हास्केल में लिखूंगा, लेकिन रूबी इतनी बुरी नहीं है कि पूरी तरह से फेंक दिए जाने के लायक हो। मुझे यह तथ्य पसंद है कि मैं इसे स्क्रिप्टिंग के समय उपयोग कर सकता हूं, और कई त्वरित प्रयोगों के लिए मुझे एआई सामान सीखते समय एक साथ हैक करना पसंद है। लेकिन शायद इसलिए भी कि मैंने सिर्फ हास्केल सीखना शुरू कर दिया है, आप अंततः सलाह का पालन कर सकते हैं :-)
nemesisfixx

2
मुझे समझ नहीं आता कि आप स्टैक ओवरफ्लो की अनुमति क्यों मांग रहे हैं। यदि आप ऐसा कोड लिख रहे हैं जिसे आप किसी टीम में दूसरों के साथ साझा करने जा रहे हैं, तो आपको अपनी कोडिंग शैलियों को किसी भी तरह समन्वयित करना होगा। नहीं तो क्या फर्क पड़ता है?
माइक डेनियल

एसओ से क्यों पूछ रहा हूं? क्योंकि मैं अनुभवी हैकर्स और प्रोग्रामर की ईमानदार राय का सम्मान करता हूं। प्रोग्रामिंग के लिए शुद्ध-कार्यात्मक दृष्टिकोण का उपयोग करने में लाभ हो सकता है कि अनुभवी दिमाग मेरे साथ (और मेरे जैसे अन्य) साझा करने में सक्षम हो सकते हैं।
nemesisfixx

यह देखते हुए कि "नहीं" के लिए वस्तुनिष्ठ कारण हैं, यह एक वैध प्रश्न है।
एंड्रयू ग्रिम

जवाबों:


16

मैं अजगर के साथ ऐसा कर रहा हूं। मुझे लगता है कि यह एक भाषा में आनुवंशिक रूप से शुद्ध कार्यात्मक शैली में लिखना बोझिल है जो इसके लिए डिज़ाइन नहीं किया गया था। उदाहरण के लिए, in_order की दो परिभाषाओं के विपरीत :

def in_order(xs):
    for i in range(1,len(xs)):
        if xs[i] > xs[i+1]:
            return False
    return True

inOrder :: (Ord a) => [a] -> Bool
inOrder xs = and $ zipWith (<=) xs (tail xs)

in_orderअजगर में हस्केल का तरीका लिखना दोनों ही क्रिया है (क्योंकि अजगर आवश्यक मुहावरों का अच्छी तरह से समर्थन नहीं करता है) और धीमे (आलस के कारण हास्केल के स्थिर स्थान के बजाय रैखिक स्थान)।

हालाँकि, मुझे कार्यात्मक संगठन के साथ अजगर कार्यक्रम बनाने में सफलता मिली है , और प्रत्येक फ़ंक्शन का एक मुहावरेदार कार्यान्वयन। यह विचार कि यह कार्यक्रम का एक अच्छा तरीका है, वास्तव में मेरे कोडेक प्रोजेक्ट के पीछे थीसिस है । तो, मेरी घटकों कपोल-कल्पना और कार्यों (शुद्ध के साथ चारों ओर उन्मुख होते हैं इंटरफेस ) के बजाय राज्य के साथ वर्गों की तुलना में, उन पर कार्य कर रहा है, और यह एक साथ अच्छी तरह से आ रहा है। वास्तव में, इस तरह से आयोजित कोड, कक्षाओं के साथ आयोजित कोड की तुलना में पुन: उपयोग करने के लिए अधिक लचीला प्रतीत होता है। हालांकि, यह एक व्यक्तिगत पूर्वाग्रह हो सकता है, क्योंकि मैं अभी भी हास्केल भक्त हूं।

तो मैं कहूंगा कि आपके प्रश्न का उत्तर थोड़े है । आपको सोचने में मदद करने के लिए अपनी कार्यात्मक जड़ों का उपयोग करें, लेकिन इसे ज़्यादा मत करो। उदाहरण के लिए। रूबी में आलसी सूचियों का अनुकरण सिर्फ मुहावरे के लिए करना संभवत: इसके लायक होने की तुलना में अधिक परेशानी वाला होगा।


किसी तरह आपके वर्णन ने मुझे पास्कल बना दिया।
रसजानी

@ चरसानी, ओह? कोई भी कारण क्यों?

मुझे नहीं पता, हो सकता है कि अंग्रेजी को अच्छी तरह से समझने में इसकी कमी हो या आप किस तरह की फिट (कैसे कम से कम) चीजों का वर्णन करते हों जहां पास्कल इकाइयों में व्यवस्था / संरचना होती है। बस एक प्रकार का मानसिक संबंध, पहला विकल्प होने के कारण आपके पास कोई वास्तविक संबंध नहीं हो सकता है;)
रसजानी

1
"आलसी के कारण हास्केल के निरंतर स्थान के बजाय रैखिक स्थान" कथन सटीक नहीं है। आलस्य अभी भी रैखिक आदेश का तात्पर्य है। मैं आपकी बात समझता हूं।

3
@Aromero, मैं तुम्हारी समझ में नहीं आता, यद्यपि। आदेश का इससे क्या लेना-देना है? निरंतर स्थान हास्केल कचरे से आता है जो andउन्हें खाने के बाद तुलना की सूची के प्रमुखों को इकट्ठा करता है; यह एक पाश की तरह व्यवहार करेगा। जबकि अजगर की तुलना की सूची पूरी तरह से उत्पन्न करनी होगी इससे पहले कि andउनमें से कोई भी एनालॉग देखेगा (जब तक आप जनरेटर का उपयोग नहीं करते ... जो मुझे लगता है कि एक संभावना है)।

7

आप रूबी कोड को कार्यात्मक शैली में लिख सकते हैं जैसे कि यह योजना थी, हास्केल नहीं। इसे लिखने के लिए मानो यह हास्केल था, इसे हास्केल जैसी प्रणाली, और व्यापक आलसी मूल्यांकन की आवश्यकता होगी।


1

मैंने कार्यात्मक प्रोग्रामिंग को समझना पाया है, और विशेष रूप से हास्केल, रूबी में मेरे द्वारा सामना की गई कुछ स्थितियों में मेरे लिए सहायक होना। लेकिन जितना अधिक मैं हास्केल सीखता हूं, उतना ही मुझे एहसास होता है कि रूबी अब तक हास्केल की तरह बिल्कुल सक्षम नहीं है।

मॉड्यूल / कोड लोडिंग की स्थिति एक चीज के लिए संक्षिप्त है। वर्तमान दुभाषिया में टेल कॉल ऑप्टिमाइज़ेशन नहीं है, इसलिए आप रीसर्कशन का उपयोग उस तरह से नहीं कर सकते जैसे आप हास्केल में करते हैं। और एक बार जब आप मोनाड्स में पहुंच जाते हैं, तो वास्तव में एब्सट्रैक्शन के स्तर की कोई तुलना नहीं है जो आप हास्केल बनाम रूबी में प्राप्त कर सकते हैं।

यदि आप रुचि रखते हैं, तो मैं कुछ रूबी / हास्केल तुलना कोड gist.github.com पर पोस्ट कर रहा हूं क्योंकि मैं सीख रहा हूं।

रूबी के लिए मैंने जो तकनीक निकाली है, उसमें जो सबसे अच्छा काम किया है, वह शुद्ध कार्यों को ढूंढ रहा है जहां मैं कर सकता हूं, जो कि ऐसा लगता है जैसे आप करने की कोशिश कर रहे हैं।


मेरे स्मालटाक परीक्षणों में से एक में self assert: ((m >>= f) >>= g) equals: (m >>= [:x | (f value: x) >>= g]):। इसका कोई कारण नहीं है कि आप जानबूझकर भिक्षुओं का उपयोग क्यों नहीं कर सकते हैं , जैसा कि आप उनका उपयोग किए बिना भी जानते हैं कि आप उनका उपयोग कर रहे हैं (सूचियों की तरह)।
फ्रैंक शियरार

0

मैं हाँ कहूँगा"। क्या (मुझे लगता है) कि आप के बारे में बात कर रहे हैं माणिक भाषा में कार्यात्मक प्रोग्रामिंग प्रभाव है। कार्यात्मक प्रतिमान में कुछ वास्तव में अच्छी अवधारणाएं हैं जो वस्तु उन्मुख (विशेष रूप से कोई दुष्प्रभाव नहीं) के साथ प्रशंसा या ओवरलैप करती हैं।

माणिक के बारे में बड़ी बात यह है कि यह आपको एक रेखीय, वस्तु उन्मुख या कार्यात्मक शैली, या इनमें से कुछ मिश्रण में कोड करने की अनुमति देता है। और आपकी सरल, रैखिक लिपि ओओ / कार्यात्मक शैली में रूपांतरित हो सकती है अगर यह जटिलता बढ़ जाती है और जब।


0

यह इस बात पर निर्भर करता है कि आप दूसरों के साथ सहयोग कर रहे हैं या नहीं। यदि आप अपने द्वारा कोड पर काम कर रहे हैं, तो जिस भी शैली में आप सबसे सहज महसूस करते हैं, उसका उपयोग करें। हालाँकि, यदि आप अन्य रूबी प्रोग्रामर के साथ काम कर रहे हैं, तो उनका उपयोग प्रोग्रामिंग की विशुद्ध रूप से कार्यात्मक शैली में नहीं किया जा सकता है और इस प्रकार आपके कोड के साथ भ्रमित हो सकते हैं। फिर, यदि आपके सहयोगी भी हास्केल प्रोग्रामर हैं, जो रूबी में चले गए, तो आपको यह समस्या नहीं हो सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.