2010-03-11 5 views
5

मैं सी, पीएचपी और बैश पृष्ठभूमि से आया था, यह सीखना आसान था क्योंकि उनके पास एक ही सी संरचना है, जिसे मैं पहले से ही जानता हूं।यह सी और PHP प्रोग्रामर रूबी और रेल कैसे सीख सकता है?

फिर 2 साल पहले मैंने पाइथन सीखा और मैंने इसे अच्छी तरह से सीखा, रूबी की तुलना में पाइथन सीखना मेरे लिए आसान है। फिर पिछले साल से, मैं रुबी सीखने की कोशिश कर रहा था, फिर रेल, और मैं मानता हूं, अब तक मुझे यह नहीं मिल सका, विडंबना यह है कि उन्हें सीखने में आसान ब्रांडेड किया जाता है, लेकिन मेरे जैसे अनुभवी प्रोग्रामर के लिए, मैं बस इससे पहले जो मैंने सीखा था, उससे जुड़ा नहीं था, मेरे पास रूबी और रेल दोनों पर 2 किताबें हैं, और जब मैं इसे पढ़ रहा हूं, तो मेरे दिमाग में कुछ भी अवशोषित नहीं होता है, और मैं छोड़ने के करीब हूं ...

रूबी में, मुझे ब्लॉकों की अवधारणाओं को समझने में कठिनाई हो रही है, और क्यों @ variables हैं जिन्हें अन्य कार्यों द्वारा एक्सेस किया जा सकता है, और $ चर क्या है और: चर करते हैं? और रेल में, इस_is_another_function_that_do_this जैसे फ़ंक्शन क्यों हैं, इसलिए इस प्रकार रूबी है, क्या यह सिर्फ एक नामकरण सम्मेलन है या यह इस उपलब्ध _can_do_this_function के साथ स्वतः उत्पन्न हुआ है। मैं अभी भी परेशान हूं कि उन सभी जादू अवधारणाओं और चीजें कहाँ से आईं? और अब, कोशिश कर रहा है और अवशोषित, लेकिन अभी भी कोई प्रगति नहीं की 1 साल ...

संपादित करें: संक्षेप में:

  1. मैं ब्लॉक के बारे में कैसे पता चल सकता, और यह कैसे अवधारणाओं से संबंधित हो सकता PHP/सी से?
  2. चर, यह क्या करता है मतलब है जब एक चर के साथ उपसर्ग है:
    • @
    • $
    • :
  3. "मैजिक अवधारणाओं", suchs रिकॉर्ड्स की घोषणाओं रेल के रूप में, क्या दृश्यों के पीछे होता है जब मैं has_one X

ठीक है, तो मेरे भ्रम के साथ मेरे साथ भालू, कम से कम मैं 'अपने आप के साथ ईमानदार हूँ, और यह के बाद से मैं पहली बार माणिक जानने की कोशिश कर अब एक वर्ष से अधिक है, और मैं युवा नहीं मिल रहा है ..

तो

I learned this in Bash/C/PHP 

solve_problem($problem) 
{ 
    if [ -e $problem == "trivial" ]; 
    then 
     write_solution(); 
    else 
     breakdown_problem_into_N_subproblems(\; 
     define_relationship_between_subproblems; 
     for i in $(command $each_subproblem); 
     do 
      solve_problem $i 
     done 
    fi 
} 

write_solution(problem) { 
    some_solution=$(command <parameters> "input" | command); 
    command | command $some_solution > output_solved_problem_to_file 
} 

breakdown_problem_into_N_subproblems($problems) { 
    for i in $problems; 
    do 
     command $i | command > i_can_output_a_file_right_away 
    done 
} 

define_relationship_between_subproblems($problems) { 
    if [ -e $problem == "relationship" ]; 
    then 
     relationship=$(command; command | command; command;) 
    elsif [ -e $problem == "another_relationship" ]; 
     relationship=$(command; command | command; command;) 
    fi 
} 


In C/PHP is something like this 

solve_problem(problem) 
{ 
    if (problem == trivial) write_solution; 
    else { 
     breakdown_problem_into_N_subproblems; 
     define_relationship_between_subproblems; 
     for (each_subproblem) solve_problems(subproblem); 
    } 
} 

और अब, मैं सिर्फ कनेक्ट नहीं हो सका रुबी के साथ बिंदु, | बी | {ब्लॉक}, @ variables का उपयोग करके, चर, और variables_with_this_things ..

उत्तर

6

आपने कहा कि आप किताबें पढ़ रहे हैं, तो शायद आप क्या जरूरत है।

मैं सी पृष्ठभूमि से भी हूं और रूबी की कई अवधारणाएं मेरे लिए पूरी तरह से विदेशी थीं और फिर भी मैं उन सभी को समझ नहीं पा रहा हूं। लेकिन केवल पढ़ने के बजाय मैंने लिखने का फैसला किया और अब मेरे पास कुछ प्रोग्राम/स्क्रिप्ट और वेबपृष्ठ हैं (यहां तक ​​कि काफी बड़ा) और मुझे वास्तव में रूबी पसंद है। जब आप लिखते हैं तो आप इन सभी अवधारणाओं को "महसूस" करना शुरू कर देंगे। किताबों से जो पढ़ते हैं उसका परीक्षण करने के लिए irb का उपयोग करें। ब्लॉक के साथ कुछ विधियां लिखें, भले ही आप उन्हें समझ न सकें और इसके साथ खेलें।

1

शायद आपको कुछ विशिष्ट चिंताओं को प्रश्नों में तोड़ना चाहिए?

उदाहरण के लिए:

@variables वस्तु उदाहरण चर रहे हैं - मूल्यों एक वस्तु के विशिष्ट उदाहरण के लिए स्थानीय और सभी तरीकों से इसलिए सुलभ हैं।

1

आपको वास्तव में रूबी पर एक सभ्य पुस्तक पढ़नी चाहिए। रूबी समुदाय में संदर्भ पुस्तक के रूप में भी सबसे अच्छा माना जाता है, जिसे पिकएक्स पुस्तक है: http://www.pragprog.com/titles/ruby3/programming-ruby-1-9

यह प्रोग्रामिंग रूबी का तीसरा संस्करण है और रूबी 1.9 को कवर करता है। पुस्तक के दूसरे संस्करण में रूबी 1.8 शामिल हैं। पहले संस्करण में रूबी 1.6 शामिल हैं।और पहला संस्करण मुफ्त में ऑनलाइन उपलब्ध है: http://www.ruby-doc.org/docs/ProgrammingRuby/

ऐसी पुस्तक पढ़ना आपको मूल बातें सिखाएगा। हो सकता है कि आप बहुत सारी चीजें पहले से ही जान सकें, लेकिन चूंकि आप इस तरह की मूल बातें पूछते हैं: चर (कुछ "जो" से शुरू होता है, एक शाब्दिक है, एक परिवर्तनीय नहीं है) और @ वैरिबल, मैं वास्तव में आपको एक पुस्तक पढ़ने के लिए आग्रह करता हूं।

3

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

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

विकिपीडिया शुरू करने के लिए एक खराब जगह नहीं है; object-oriented programming और first-class functions पर लेख इन अवधारणाओं को पेश करेंगे।

3

रूबी और रेल को समझने के लिए कदम के एक जोड़े के लिए ले सकता है जैसे:

  • Rails Guides जो अच्छी तरह से प्रलेखित रहे हैं पढ़ें और अनिवार्य और ढांचे की वास्तुकला के विवरण को कवर किया। उदाहरणों के साथ प्रयोग शामिल हैं।
  • Rails Framework दस्तावेज़ीकरण को आसान बनाएं, जिसमें रीडमे भागों या कई पृष्ठों के शीर्षलेख भागों में बहुत सारी जानकारी शामिल है। प्रलेखन में संग्रहीत सभी जानकारी को नेविगेट करते समय आपके ब्राउज़र की सुविधा आपके मित्र बन जाएगी। इसे मणि सर्वर कमांड का उपयोग अपने स्थानीय वर्कस्टेशन पर दस्तावेज़ को फायर करने के लिए सीखने के साथ भी पूरक किया जा सकता है।
  • Ruby API भाषा गाइड (कोर और पुस्तकालय)

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

उपयोगी जानकारी का अगला सेट अधिक है जो मैं एप्लिकेशन और रसद प्रकार की जानकारी कहूंगा। यह भी शामिल है;

  • Programming Ruby मार्गदर्शिका पढ़ें ताकि आप रेल फ्रेमवर्क लिखने के लिए उपयोग की जाने वाली भाषा की मूल बातें जान सकें।
  • Agile Web Development पढ़ें जो आपको न केवल ढांचे में अंतर्दृष्टि देता है बल्कि आपको एक बहुत ही चुस्त दृष्टिकोण में एक आवेदन बनाने की प्रक्रिया के माध्यम से ले जाता है।
  • Advanced Rails Recipes पर एक नज़र डालें जो आपके ज्ञान को बढ़ाएगा।
  • उपकरण है कि इस तरह के सांत्वना, रेक, जवाहरात और एक्सटेंशन
  • अन्त में एक छोटी परियोजना है, शायद GitHub पर कुछ मिल जाए, आप कोड की समीक्षा कर सकते हैं कि के रूप में ढांचे के साथ आते हैं जानें। यह एक ऐसा एप्लीकेशन होना चाहिए जो बहुत बड़ा न हो ताकि आप विस्तार से न हो जाएं, फिर भी पर्याप्त आकार ताकि आप देख सकें कि सभी भाग एक साथ कैसे काम करते हैं।

आशा है कि मदद करता है।

3

इन पुस्तकों को पढ़ें, और जब आपको एक अवधारणा को समझने में परेशानी होती है तो व्यक्तिगत रूप से पूछें।

रूबी प्रोग्रामिंग भाषा: http://oreilly.com/catalog/9780596516178
रूबी रास्ता: रेल के लिए http://rubyhacker.com/toc.html
रूबी: http://www.manning.com/black

मैं प्रश्न के रूप में अन्य दो नहीं 2 अस्पष्ट हैं और शायद वे कुछ अध्यायों की आवश्यकता होगी जवाब देंगे
वार्स: रूबी बनाम सी ++

@var similar to this->var 
@@var similar to SomeClass::var (static) 
$var similar to global in c 

एक: माणिक में प्रतीक एक अद्वितीय संख्यात्मक पहचानकर्ता है, दुभाषिया सभी प्रतीकों में धर्मान्तरित अद्वितीय कार्यक्रम के लिए आपका कार्यक्रम। वे (पूर्णांकों से तार से तेजी से और अधिक पठनीय) अनुक्रमित के रूप में उपयोगी होते हैं:,

कम और पढ़ें लिखें: hash[:user_name]

+0

सी में ग्लोबल्स नहीं हैं – horseyguy

+0

वे "बाहरी" अर्थ में वैश्विक हैं, कई पीपीएल उन्हें "वैश्विक" कहते हैं। http://en.wikipedia.org/wiki/Global_variable – clyfe

+0

इसमें फ़ाइल-स्कोप है, निश्चित है, लेकिन 'वैश्विक दायरा' नहीं है। यह अन्य अनुवाद इकाइयों के भीतर से उपलब्ध नहीं है उदाहरण के लिए – horseyguy

1

एक ही समय में सब कुछ सीखने की कोशिश मत करो। अपने प्रयासों पर ध्यान केंद्रित करें और वृद्धिशील रूप से निर्माण करें। एक समय में एक कदम निम्न कार्य करके भ्रम को कम:

  1. मास्टर [मूल] ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की अवधारणाओं।
  2. रूबी की [मूल] अवधारणाओं और वाक्यविन्यास मास्टर। इस चरण में रेल के बारे में भी चिंता न करें।
  3. मॉडल-व्यू-कंट्रोलर (एमवीसी) आर्किटेक्चर की [मूलभूत] अवधारणाओं को मास्टर करें।
  4. (वैकल्पिक) पीएचपी के लिए एक MVC ढांचे का उपयोग कर कुछ निर्माण (जैसे cakePHP या CodeIgniter)। इस तरह, आप कार्रवाई में और एक ऐसी भाषा में एमवीसी अवधारणाओं को देखेंगे जिन्हें आप पहले ही जानते हैं।
  5. रेल समय! रेल और गाइड दोनों के बारे में बहुत सारी किताबें, मार्गदर्शिकाएं, ट्यूटोरियल, पॉडकास्ट और स्क्रीनकास्ट हैं।अपने पसंदीदा प्रकार के एक अनुशंसित संसाधन के लिए चारों ओर देखो और रेल सीखने के लिए इसका इस्तेमाल करें।

एक तरफ ध्यान दें पर, मैं व्यक्तिगत रूप से नहीं लगता है कि रेल कि आसान जानने के लिए (जो एक व्यक्तिपरक बात वैसे भी है) है। आईएमएचओ, इसमें काफी सीखने की वक्र है, लेकिन एक बार जब आप इसे प्राप्त कर लेते हैं, तो आप वेब विकास पर अपने आप को अधिक उत्पादक पाते हैं। यही है, आप अच्छी तरह से का उपयोग करने के लिए रेल ढूंढें।

कुछ सामान्य टिप्स:

  • अकेले पढ़ना वास्तव में एक प्रोग्रामिंग भाषा/ढांचे में महारत हासिल करने के लिए पर्याप्त नहीं है। आपको कोड लिखना है .. बहुत सारे कोड। पसंद के अपने सीखने संसाधन के उदाहरण आवेदन का पालन न करें। Project Euler और विभिन्न और शायद अधिक मनोरंजक चुनौतियों के लिए समान वेबसाइटें देखें।
  • irb आपका मित्र है। जितना संभव हो उतना प्रयोग करें।
  • यदि आप कुछ समझ नहीं सकते हैं, तो खोज करें। यदि आप अभी भी इसे समझ नहीं सकते हैं, तो स्टैक ओवरफ़्लो या Ruby Forum पर एक प्रश्न पोस्ट करें। बस अपना प्रश्न विशिष्ट बनाएं।
  • सीखने में समय लगता है। निराश न हों और चीजों को आसान बनाएं।
1
  1. रेल सीखने की कोशिश न करें, रूबी को पहले सीखने का प्रयास करें।
  2. PHP या सी में कोई ब्लॉक नहीं है, लेकिन मैं यहाँ एक छोटा सा समझाने हूँ:

    तुम बस नाम-कम काम करता है, यानी की तरह ब्लॉक में सोच सकते हैं।

     
         my_array = [1,2] 
         my_array.each { |parameter| print(parameter) } 
         my_array.each do |parameter| 
          print(parameter) 
         end 
        

    the Array#each method sends, on each iteration, a parameter to the block, 
        in this case is the value of each element on the array. 
    
        the DEFinition of Array#each could be: 
        <pre> 
         def each(&block) 
          block.call(elem_of_the_array) 
          #the block will catch "elem_of_the_array" as "parameter" argument 
         end 
        </pre> 
    
        in PHP you can write this block as function like this: 
        <pre> 
        function name_less_function(parameter){ 
         print(parameter); 
        } 
        </pre> 
    

    ब्लॉक के पीछे की असली अवधारणा Procs कर रहे हैं, उनके बारे में अनुसंधान करने के।

  3. जानें ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग, हो सकता है इस पोस्ट आप मदद कर सकते हैं =>http://raflabs.com/blogs/silence-is-foo/2009/12/13/the-ruby-object-model/

0

मैं ब्लॉक के बारे में कैसे पता चल सकता, और कैसे यह पीएचपी/सी से अवधारणाओं से संबंधित हो सकता ?

ब्लॉक को लैम्ब्डा कार्यों के रूप में देखा जा सकता है (जैसा कि आपने देखा है कि आपको कुछ पायथन अनुभव मिला है), वे गुमनाम हैं।

@

यह एक स्थानीय उदाहरण चर रहा है। यदि आप @@ का उपयोग करेंगे, तो आपको कक्षा-व्यापी चर मिल जाएगा। अर्थात @@ number_of_all_created_classes के लिए और @my_var_that_is_for_this_instance_only

$

यह एक वैश्विक चर रहा है।

:

आह, लोगों को इस के लिए मुझे लौ जाएगा: यह एक सूचक की तरह है। : ऑपरेटर आपको ऑब्जेक्ट को इंगित करने के लिए स्ट्रिंग संदर्भ का उपयोग करने की अनुमति देता है।

"मैजिक अवधारणाओं", suchs रेल रिकॉर्ड्स की घोषणाओं के रूप में, पर्दे के पीछे क्या होता है जब मैं, लिखने has_one एक्स

has_one, belongs_to, आदि रिश्तेदार कार्यों संदर्भ पार करने के लिए कर रहे हैं। वे उस मामले के लिए सी या PHP से संबंधित नहीं होंगे, लेकिन यदि आपने कुछ गंभीर PHP/MySQL प्रोग्रामिंग किया है और कुछ संबंध मैपिंग किया है तो यह वसंत होगा। आप ओआरएम के बारे में पढ़ना चाह सकते हैं।

वर्तमान में मैं "रेल 2.0 के साथ एग्इल वेब विकास" पढ़ रहा हूं, जो असाधारण है। श्री नेबोरली की विनम्र लिटिल रूबी बुक (ऑनलाइन उपलब्ध है) द्वारा लिखी गई मार्गदर्शिका भी आपके लिए पढ़ने के लिए कुछ तेज़ और अच्छी है।

मैंने सोचा कि मैं आपके प्रश्नों का अधिक जवाब दूंगा।

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