閑云無衣
          無衣的筆記
          語句定界符

          有些語言需要一定類型的標(biāo)點,一般會是分號(;)來結(jié)束程序的每一語句.Ruby卻采用了shell里的sh和csh的方便做法.一行中的多個語句由分號分開,但在行尾分號卻并不需要;一個換行被看作一個分號.如果行以反斜杠(\)結(jié)束,隨后的換行將忽略;這就允許你的單個邏輯行可以跨越數(shù)行.

          注釋

          為什么寫注釋?雖然良好的代碼可自成文檔,但那種自以為別人能看懂并按你的方式很快去理解的想法是錯誤的.除此之外,你自己在離開數(shù)天后也會是另一個人;一段時間后我們忘了我們還未修補或增強程序中的哪些部分,你會說,我知道我寫了這個的,但我究竟寫的是些什么?

          一些有經(jīng)驗的程序員會相當(dāng)正確地指出,矛盾的和過期的注釋比沒有強.當(dāng)然,有了注釋并不意味著代碼的可讀性;如果你的代碼不清晰,它也許是多蟲的.當(dāng)你學(xué)習(xí)Ruby的時候,你會發(fā)現(xiàn)自己需要更多的注釋;然后當(dāng)你可以通過更簡單,優(yōu)雅,可讀的代碼來表達(dá)思想時,它們就會減少.

          Ruby遵從一些普遍的書寫習(xí)慣,用井號(#)表示注釋的開始.跟在#號后面直到#號這行結(jié)束為止的代碼都將被解釋器忽略.

          同時,為了方便寫大塊的注釋,?Ruby解釋器省略以"=begin"和"=end"開始的行中間的一切.

          #!/usr/bin/env?ruby
          =begin
          **********************************************************************
          ??This?is?a?comment?block,?something?you?write?for?the?benefit?of
          ??human?readers?(including?yourself).??The?interpreter?ignores?it.
          ??There?is?no?need?for?a?'#'?at?the?start?of?every?line.
          **********************************************************************
          =end?


          組織你的代碼

          Ruby讀到什么就處理什么.沒有編譯處理;如果有什么還沒讀到,就被簡單地認(rèn)為未定義.

          #?this?results?in?an?"undefined?method"?error:
          print?successor(3),"\n"
          def?successor(x)
          ??x?+?1
          end?


          這并不是像一開始認(rèn)為的那樣,強迫你以從上至下的方式組織你的代碼.只要你確保其在調(diào)用前將被定義,當(dāng)解釋器遇到一個方法定義時,它能安全地接受暫未定義的引用.

          #?Conversion?of?fahrenheit?to?celsius,?broken
          #?down?into?two?steps.
          def?f_to_c(f)
          ??scale(f?-?32.0)??#?This?is?a?forward?reference,?but?it's?okay.
          end
          def?scale(x)
          ??x?*?5.0?/?9.0
          end
          printf?"%.1f?is?a?comfortable?temperature.\n",?f_to_c(72.3)?


          所以,一方面看起來比使用Perl或Java要稍稍不方便一些,但卻沒有寫C那么嚴(yán)格(要求你永遠(yuǎn)維持所指的部分排序).將最高層的代碼放在源文件的最后總是可行的.即使這樣也比看見時要好的多.一個明智而無痛苦的好辦法是將main定義在文件頂端,再在底端調(diào)用它.

          #!/usr/bin/env?ruby
          def?main
          ??#?Express?the?top?level?logic?here...
          end
          #?...?put?support?code?here,?organized?as?you?see?fit?...
          main?#?...?and?start?execution?here.?


          Ruby也提供了將復(fù)雜程序分割為可讀,可重用,邏輯相關(guān)的大塊的工具.我們已看到用?include?來訪問模塊.你將發(fā)現(xiàn)?load?和?require?也很有用.load的作用類似于文件的復(fù)制加粘貼(和C的#include處理器指令相似).require更復(fù)雜,僅在需要時才加載,而且最多加載一次.load和require還有其它一些區(qū)別;在語言手冊,FAQ中可找到更多信息.
          posted on 2007-02-08 17:06 無衣 閱讀(804) 評論(0)  編輯  收藏 所屬分類: rails
           
          主站蜘蛛池模板: 西宁市| 历史| 当阳市| 宣武区| 临猗县| 六枝特区| 玉山县| 康乐县| 广宗县| 南城县| 娄底市| 广水市| 尉氏县| 白城市| 泰来县| 平安县| 咸阳市| 临澧县| 桐城市| 逊克县| 碌曲县| 永新县| 定远县| 容城县| 台山市| 海安县| 澄迈县| 阳泉市| 炎陵县| 武山县| 清远市| 永靖县| 西青区| 珲春市| 铜山县| 泰宁县| 砀山县| 屏南县| 苏尼特左旗| 韶山市| 清丰县|