2010-03-11 73 views
5

我來自C,php和bash背景,很容易學習,因爲它們都具有相同的C結構,我可以將其與我已知的相關聯。這個C和PHP程序員如何學習Ruby和Rails?

然後2年前我學會了Python,並且我學得很好,Python比Ruby更容易學習。然後從去年開始,我試圖學習Ruby,然後Rails,並且我承認,直到現在,我仍然無法得到它,具有諷刺意味的是,這些標籤容易學習,但對於像我這樣經驗豐富的程序員來說,我只是不能將它與我以前學過的東西聯繫起來,我有兩本關於Ruby和Rails的書,而當我讀它時,沒有什麼會被吸收到我的腦海中,而我正在接近放棄......

在ruby中,我很難理解塊的概念,爲什麼存在可以被其他函數訪問的@變量,以及$ variable和:variable是做什麼的?在Rails中,爲什麼會有像this_is_another_function_that_do_this這樣的函數,因此ruby,它只是一個命名約定,或者它是用這個變量_can_do_this_function自動生成的。我仍然感到困惑,所有這些神奇的概念和事物都來自哪裏?而現在,1年的努力,吸收,但仍然沒有進展......

編輯: 總結:

  1. 我如何瞭解塊,怎麼能涉及到的概念來自PHP/C?
  2. 變量,什麼是它的意思是當一個變量與前綴:
    • @
    • $
  3. 「魔術概念」,suchs作爲軌道記錄的聲明,是什麼當我寫在幕後發生has_one X

好吧,承受我的困惑,至少我「M誠實面對自己,現在超過一年,因爲我第一次嘗試學習Ruby和我不再年輕..

所以

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); 
    } 
} 

而現在,我只是無法連接Ruby,| b | {blocks},使用@variables,變量和variables_with_this_things。

回答

6

你說,你正在閱讀的書,所以也許你需要的是:

少讀,多寫

我也是來自C背景,很多ruby的概念對我來說完全是外星人,我仍然不能理解他們。但不是隻讀,我決定寫,現在我有幾個程序/腳本和網頁(甚至相當大),我真的很喜歡紅寶石。當你寫作時,你會開始「感受」所有這些概念。使用irb測試您從書中讀取的內容。即使你不理解它們並使用它,也要用塊寫一些方法。

1

也許你應該將一些特定的問題分解成問題?

例如:

@variables是對象的實例變量 - 值是本地的一個對象的特定實例,因此從所有的方法訪問。

1

你真的應該讀一本關於Ruby的好書。最好的,也被認爲是Ruby社區的參考書是PickAxe書: http://www.pragprog.com/titles/ruby3/programming-ruby-1-9

這是Programming Ruby的第三版,涵蓋了Ruby 1.9。本書的第二版涵蓋了Ruby 1.8。第一版涵蓋Ruby 1.6。第一版可以在網上免費獲得: http://www.ruby-doc.org/docs/ProgrammingRuby/

讀這樣一本書將教你基本知識。也許很多你已經知道的東西,但是因爲你問了這樣一些基本的東西:變量(以「:」開頭的是一個文字,而不是一個變量)和@variable,我真的希望你讀一本書。

3

除了到目前爲止給出的其他答案之外,您可能還想要學習基本的面向對象編程。 「實例變量」的概念在一切都是對象的語言(如Ruby)中非常重要。然後,你可能想要尋找函數式編程,其中函數作爲值的想法找到它的根源,並意識到塊只不過是一塊可以任意和不同參數執行的代碼塊,但是,還可以通過稱爲「封閉」的東西來訪問在其外部定義的變量。

維基百科不是一個不好的地方開始; object-oriented programmingfirst-class functions上的文章將會介紹這些概念。

3

瞭解Ruby和Rails有幾個步驟,你可以採取措施,例如:

  • 閱讀這是有據可查的Rails Guides並覆蓋框架結構的要領和細節。試用包含的例子。
  • 有便利的Rails Framework文檔,其中還包含許多頁面的自述部分或標題部分中的大量信息。 找到當瀏覽文檔中存儲的所有信息時,瀏覽器的功能將成爲您的朋友。這也可以通過學習如何使用gem服務器命令來啓動本地工作站上的文檔來補充。
  • Ruby API語言指南(Core和圖書館)

現在,這會給你一套良好的參考材料。就學習任何新的語言或框架而言,最大的問題是知道信息的位置。而當你在構建應用程序時遇到問題時,你不需要爲這個問題摔跤我在哪裏閱讀,請參閱,找到那些我需要的信息

下一組有用的信息更多的是我稱之爲應用程序和物流信息的類型。這包括;

  • 閱讀Programming Ruby指南,以便了解用於編寫Rails框架的語言的基礎知識。
  • 閱讀Agile Web Development它不僅給你提供了對框架的深入瞭解,還讓你瞭解了以非常敏捷的方式構建應用程序的過程。
  • 看看Advanced Rails Recipes,然後將擴展你的知識。
  • 瞭解附帶的框架,如控制檯寶石擴展
  • 最後找到一個小項目,或許真的在GitHub上,你可以查看代碼的工具。它應該是一個不太大的應用程序,因此您不會陷入細節之中,但卻具有足夠的尺寸,以便您可以看到所有部件如何協同工作。

希望有幫助。

3

閱讀這些書籍,並且當您無法獨立地理解概念時,

Ruby編程語言:http://oreilly.com/catalog/9780596516178
Ruby之道:http://rubyhacker.com/toc.html
紅寶石Rails的:http://www.manning.com/black

我會回答的問題沒有2其他兩個是模糊的,可能他們會需要幾章
VARS:紅寶石對C++

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

一個:符號在紅寶石是一個唯一的數字標識符,解釋器轉換的所有符號在你的程序爲獨特的整數。他們是(不是整數比字符串更快,更可讀的)有用指標:hash[:user_name]

+0

C沒有全局性 – horseyguy 2010-03-11 12:24:33

+0

Thei're全球性在「外部」的意義上,許多脂肪酶稱他們爲「全球」。 http://en.wikipedia.org/wiki/Global_variable – clyfe 2010-03-11 15:10:54

+0

它有文件範圍,當然,但不是'全球範圍'。不能從其他翻譯單元訪問,例如 – horseyguy 2010-03-12 13:55:05

1

不要試圖在同一時間學習一切。集中您的努力並逐步構建。通過在一個時間執行下列一個步驟最小化混淆:的面向對象編程

  1. Master中的[基本]概念。
  2. 掌握紅寶石的基本概念和語法。現階段甚至不用擔心Rails。
  3. 掌握模型 - 視圖 - 控制器(MVC)體系結構的[基本]概念。
  4. 可選)使用MVC框架,PHP建立的東西(如cakePHPCodeIgniter)。通過這種方式,您將看到MVC概念在行動中以及您已經知道的語言。
  5. Rails time!有很多關於Rails的書籍,指南,教程,播客和截屏視頻,包括免費和付費。看看你最喜歡的類型的推薦資源,並用它來學習Rails。

在一個側面說明,我個人不認爲Rails的是易學(這是一個主觀的問題,反正)。恕我直言,它有一個相當大的學習曲線,但一旦你克服它,你可以可能很好發現自己更高效的網頁開發。也就是,你可能很好找Rails是易於使用

的一般提示:

  • 獨自閱讀是不夠的,真正掌握一門編程語言/框架。你必須編寫代碼..很多代碼。不要僅僅按照您選擇的學習資源的示例應用程序。看看Project Euler和類似的網站,可能會有更多不同的挑戰。
  • irb是你的朋友。儘可能多地使用它。
  • 如果你無法弄清楚什麼,請搜索。如果仍然無法解決問題,請在Stack Overflow或Ruby Forum上發佈問題。只是讓你的問題具體。
  • 學習需要時間。不要感到沮喪,要輕鬆一點。
1
  1. 不要試圖學習Rails,請先嚐試學習Ruby。
  2. 有一個在PHP或C無塊,但我要在這裏解釋一點點:

    您可以認爲塊就像名字少的功能,即。

     
         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> 
    

    塊背後的真正概念是特效,做研究它們。

  3. 學習面向對象編程,也許這篇文章可以幫助你=>http://raflabs.com/blogs/silence-is-foo/2009/12/13/the-ruby-object-model/

0

我如何瞭解塊,以及如何 能不能從 PHP/C相關概念?

塊可以被看作是lambda函數(正如你注意到你有一些Python體驗),它們有點匿名。

@

這是一個本地實例變量。如果你使用@@,你會得到一個類的變量。對於即@@ number_of_all_created_classes和@my_var_that_is_for_this_instance_only

$

這是一個全局變量。

啊,人家會火焰我這個:這是怎樣的一個指針。 :運算符允許您使用字符串引用來指向對象。

「魔術概念」,suchs作爲軌道記錄的聲明,在幕後發生了什麼,當我寫HAS_ONE X

HAS_ONE,belongs_to的,等等,都是相對的職能交叉參考。它們不會涉及C或PHP,但是如果你已經完成了一些嚴格的PHP/MySQL編程並做了一些關係映射,它就會彈出來。您可能想了解ORM。

目前我在閱讀「Agile Web Development with Rails 2.0」,這很棒。此外,由Neighborly's Humble Little Ruby Book(可在線獲得)編寫的指南是快速且適合您閱讀的內容。

我想我會更直接地回答你的問題。