2009-11-28 17 views
12

मैं पिछले कुछ दिनों में रूबी के बारे में बहुत कुछ पढ़ रहा हूं। मैं जो भी पोस्ट करता हूं, मैं सुनता हूं कि रूबी एक सुरुचिपूर्ण भाषा है। क्या आप लोग एक उदाहरण दे सकते हैं कि क्यों रूबी एक और भाषा की तुलना में सुरुचिपूर्ण है?रूबी एक सुरुचिपूर्ण भाषा क्या बनाता है?

+0

इसी प्रकार: http://stackoverflow.com/questions/1589841/what-does-it-mean-when-someone-says-that-perl-is-more-expressive-lanaguage –

उत्तर

17

यह सुंदर माना जाता है क्योंकि यह ओर्थोगोनल है है। यह कहने का एक शानदार तरीका है कि समान ऑपरेशन समान ऑपरेशंस पर लागू होते हैं।

सरल उदाहरण: + पूर्णांक पर उन्हें जोड़ता है; फ्लोटिंग पॉइंट नंबर पर, ditto। बड़े पूर्णांक पर भी। तारों पर, यह उन्हें जोड़ता है (जिसे आप भी उम्मीद करते हैं)। अब यह + के लिए एक बड़ा सौदा नहीं है, आप किसी भी सभ्य प्रोग्रामिंग भाषा से इसकी अपेक्षा करते हैं। लेकिन map या filter जैसे ऑपरेशन हैं, वे सूचियों पर काम करते हैं (उन्हें चाहिए!) लेकिन वे सरणी पर भी काम करते हैं और वास्तव में किसी भी चीज पर काम करते हैं या इसके माध्यम से पुनरावृत्त किया जा सकता है।

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

रूबी के लेखक ने उपयोगकर्ता (यानी प्रोग्रामर की) उम्मीदों को संतुष्ट करने के मामले में यह व्यक्त किया: जितना संभव हो उतना आश्चर्य होना चाहिए, जब भी सामान्य ज्ञान आपको उम्मीद करता है कि कुछ निश्चित तरीके से काम करता है, तो यह बस ऐसा करना चाहिए। उन्होंने इस आवश्यकता को पूरा करने के लिए बहुत मेहनत की। इसके अलावा, रूबी पर्ल से थोड़ा सा उधार लेते हैं, लेखक पर्ल के जेन के पक्ष में पर्ल के TMTOWTDI सिद्धांत से असहमत हैं: "एक – होना चाहिए और अधिमानतः केवल – इसे करने का स्पष्ट तरीका होना चाहिए।"

यह भी अच्छा है कि रूबी बंद हो जाता है (= कोड ब्लॉक) ताकि आप ब्रेसिज़ की एक जोड़ी में इसे लपेटकर बस एक फ़ंक्शन निर्दिष्ट कर सकें। ऐसे स्थान हैं जहां फ़ंक्शन इनलाइन निर्दिष्ट करना उचित है, और रूबी आपको इसे आसानी से करने देता है।

रूबी आपको कोडिंग की एक छोटी राशि के साथ चीजें करने देता है क्योंकि इसकी रचना शक्तिशाली तरीकों से एक साथ फिट होती है। मैं Project Euler में डबिल करता हूं और मुझे लगता है कि रूबी में सबसे कम सुगम और समझने योग्य समाधान किए गए थे।जे में सबसे छोटा है, लेकिन यह एक एपीएल बोली है और अनियमित के लिए यह लाइन शोर की तरह दिखता है।

मेरा व्यक्तिगत अनुभव यह बताता है: मैंने खुद को रूबी और रेल सिखाया और एक सप्ताह में मध्यम-जटिल डेटा विश्लेषण के साथ एक वेब अनुप्रयोग लिखा। मैंने जो भी सिद्धांत सीखा, मैं अलग-अलग स्थानों पर विभिन्न डेटा – के साथ आवेदन कर सकता हूं यह सिर्फ ™ काम करता है!

+0

अस्वीकरण: मैं अपने ऊपर जवाब में विवरण पर फजी हो सकता है के रूप में मैं कर रहा हूँ नहीं सक्रिय रूप से रूबी इस समय का उपयोग कर। अगर मुझे कुछ गड़बड़ है, तो मुझे बताएं और मैं ठीक कर दूंगा। मुझे रूबी ने कुछ साल पहले लालित्य के लिए प्यार किया था लेकिन बंद कर दिया गया था क्योंकि संदर्भ कार्यान्वयन कुत्ता धीमा था। इस बीच जावा के जितना तेज़ JRuby है, और मैं इसे अपने अगले प्रोजेक्ट के लिए मानता हूं। –

+4

कंप्यूटिंग संदर्भ में ऑर्थोगोनल का अर्थ साइड इफेक्ट्स से मुक्त है, उदाहरण के लिए, एक घटक को संशोधित करने से निर्भर घटक प्रभावित नहीं होते हैं। –

+1

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

1

प्रत्येक भाग को एक वस्तु (ps smalltalk में की तरह ..।) है:

3.times { p "olleh" } 

एक्स्टेंसिबल/खुला वर्गों (रेल से जैसे):

10.days_ago 

.. और अधिक पर गहरे लाल रंग का लालित्य: http://www.benhughes.name/files/presentations/ruby_elegance.pdf

+0

हमम..मुझे आश्चर्य है कि यह क्या है कोड की शांति करता है? – Luke101

+2

इसलिए स्मॉलटॉक भी सुरुचिपूर्ण है? –

+0

@ ल्यूक 101: यह "olleh" 3 बार प्रिंट करता है। – sepp2k

4

रूबी और DSLs discussedalot किया गया है। sinatra से

उदाहरण:

get '/' do 
    'Hello world!' 
end 

या इस blog से:

ChessGame.new do |move| 
    move.black_pawn(forward) 
    move.white_pawn(forward) 
    #… 
    move.white_queen(pwn_king) 
end 
5
  • खुला वर्गों होने यानी आप वर्गों के लिए विधियां जोड़ सकते हैं के बाद वे परिभाषित कर रहे हैं
  • मामलों से निपटने की संभावना है जहाँ आप एक संदेश भेजने कर रहे हैं यानी method_missing होने आप एक विधि निर्धारित नहीं किया है के लिये। फिर यह आपको कोड लिखने की अनुमति देता है जो केवल क्रैश होने की बजाय अनुकूल है।
  • एक स्मॉलटाक-जैसे, संगत ओओ मॉडल उदा। आप 1.class 1. टाइम्स {} जैसी चीजें कर सकते हैं। इससे बहुत सारे डीएसएल समर्थन संभव हो जाते हैं।
  • यह है ब्लॉक/बंद - बनाता है यह बहुत आसान लचीला कोड लिखने के लिए
  • यह स्थिर प्रत्येक चर की (यानी टाइपिंग है कि अगर महत्वपूर्ण नहीं हैं समस्याओं को हल करने की कोशिश कर के साथ अपना समय बर्बाद नहीं करता है आप TDD करते हैं)
  • आप वर्ग आधारित OO यानी इसका समर्थन करता है प्रोटोटाइप आधारित OO प्रोग्रामिंग
2

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

आप प्रोग्रामिंग भाषा शूटआउट here के परिणाम देख सकते हैं। आप देखेंगे कि रूबी 1.9 बाईं तरफ फ्लैट को धक्का दे रहा है जिसका अर्थ है कि यह बहुत संक्षिप्त है। मैं डरता हूं कि कोई भी ऐसी भाषा के बारे में बात कर रहा है जो सुरुचिपूर्ण है, वह उस भाषा के बारे में बात कर रहा है जो या तो बाईं ओर या करीब है। हास्केल एकमात्र उल्लेखनीय अपवादों में से एक है जो मुझे पता है जो कुछ चीजों को पूरा करने के लिए बहुत मेहनत करता है लेकिन फिर भी यह बहुत ही शानदार लगता है।

+1

यदि आप केवल कोड-इस्तेमाल पर ध्यान केंद्रित करना चाहते हैं तो आप इस तरह की रैंकिंग के लिए अपने पैरामीटर सेट करें - http://shootout.alioth.debian.org/u32/fun.php?d=data&calc=calculate&xfullcpu=0&xmem=0&xloc= 1 & binarytrees = 1 & chameneosredux = 1 & fannkuch = 1 & fasta = 1 & knucleotide = 1 & मैंडलब्रॉट = 1 & उल्का = 0 और Nbody = 1 & pidigits = 1 & regexdna = 1 & revcomp = 1 & spectralnorm = 1 & threadring = 0 – igouy

5

मेरे अनुभव ब्लॉक में रूबी सुरुचिपूर्ण बनाने का सबसे बड़ा योगदान कारक है। क्या प्रत्येक लेखन सरणियों/हैश/आदि से अधिक पुनरावृति करने के लिए की तुलना में अधिक सुंदर है ...

arr = ["one", "two", "three"] 
arr.each { |e| 
    puts e 
} 

हालांकि मेरा मानना ​​है कि यह इस से भी अधिक है, रूबी भाषा की शान भी पुस्तकालयों से आता है। अधिकांश पुस्तकालयों ने फ़ंक्शन नामों के लिए अद्वितीय रूबी 'शैली' का उपयोग करना जारी रखा है, जैसे कि 'प्रत्येक' पुनरावृत्ति के लिए या '!' तथा '?' विनाशकारी/बुलियन लौटने वाले कार्यों के लिए फ़ंक्शन नामों के अंत में, यह वास्तव में रूबी 'सुरुचिपूर्ण' रखता है।

4

रूबी है सभी उत्पादकता और प्रोग्रामिंग मज़ा के बारे में, लेकिन वहाँ कई कारण हैं रूबी सुरुचिपूर्ण है:

  • शुद्ध OOP: सब कुछ, एक वस्तु है, इसलिए आप आदिम के बीच भेद और प्रकार वस्तु की जरूरत नहीं है ।
  • यह कार्यात्मक और प्रभावशाली प्रोग्रामिंग प्रतिमान दोनों का समर्थन करता है: जो संक्षिप्त और पठनीय कोड दोनों की ओर जाता है।
  • यह Principle of Least Surprise का समर्थन करता है: जो पठनीयता का समर्थन करता है।जो वास्तव में Internal DSLs करने के लिए अच्छा है:
  • यह बंद और ब्लॉक है।
  • यह एक मजबूत Metaprogramming API है: जो आंतरिक DSLs लिखने के रूप में अच्छी तरह शक्ति देता है।
  • यह पटकथा कार्यों में बहुत अच्छा है: पाठ व एक्सएमएल फ़ाइलें हैंडलिंग और प्रशासन से संबंधित कोई काम कर (अब यह प्रणाली व्यवस्थापक एक दिन से व्यापक रूप से इस्तेमाल किया जा रहा है)।
  • यह एक बहुत ही शांत और सहायक समुदाय है: आप समर्थन खोजने के लिए और मदद जो कुछ भी तुम्हारी समस्या क्या है जाएगा। यह समुदाय आधुनिक और फैशन कोडिंग तकनीकों का समर्थन करता है साथ ही TDD और BDD का समर्थन करता है।

सब से ऊपर की राशि आप हो सकता है रूबी का उपयोग कर है जो:

  • संक्षिप्त कोड: जावा और सी ++ की तुलना में, कम से कम आप अपने आप को कोड टाइपिंग का 50% बचा सकता है।
  • रीडब्बिलिटी। > कम कोड लिखने के लिए - ->उत्पादकता - परीक्षण करने और बनाए रखने के करने के लिए> कम कोड

इस प्रकार पठनीय और संक्षिप्त कोड रही है।

मैं भूल रूबी के पीछे महान सहायक समुदाय का उल्लेख नहीं करना चाहिए।

0

बस एक मनोरंजक पक्ष नोट: this feels like php अभी तक रूबी (पहले से ही) है, लेकिन पहला जवाब सुरुचिपूर्ण रूबी जैसा लगता है। PHP में मैंने छोटी चीजें करने के लिए लिंक किए गए पोस्ट की तरह बेवकूफ लंबा कोड लिखना समाप्त कर दिया। कुछ हद तक क्योंकि भेड़ का बच्चा मूल रूप से nonexistent हैं। तो मुझे यह कहना होगा कि रुबी का लैम्ब्डा नक्शा/कम करने के साथ मिलकर समर्थन करता है जो इसे मेरे लिए सुरुचिपूर्ण बनाता है।

संबंधित मुद्दे