ruby-菜鳥入門教程

開發(fā)ruby的工具<a >Atom</a> for mac

運行ruby程序在Atom中的話镜盯,安裝package Script,然后重啟Atom
然后再Command + I 運行.注意一定要重啟.

1. Click on Packages --> Commmand Palette --> Select Toggle.
2. Type Install Packages and Themes.
3. Search for Script and then install it.
4. Press Command + I to run the code (on Mac)

創(chuàng)造者:松本行弘

Ruby 是"程序員的最佳朋友"。
方便程序員换衬,性能沒有Java好

是開源的豆励,在 Web 上免費提供拗踢,但需要一個許可證尔觉。
通用的环戈、解釋的編程語言设易。
真正的面向?qū)ο缶幊陶Z言逗柴。
可以用來編寫通用網(wǎng)關接口(CGI)腳本。
可以被嵌入到超文本標記語言(HTML)顿肺。
可用于開發(fā)的 Internet 和 Intranet 應用程序戏溺。
可以安裝在 Windows 和 POSIX 環(huán)境中。
可以很容易地連接到 DB2屠尊、MySQL旷祸、Oracle 和 Sybase。

1.編譯/執(zhí)行 Ruby 程序

puts "Hello World!";

2.Ruby 中文編碼

puts "你好讼昆,世界托享!";
輸出: invalid multibyte char (US-ASCII) 

Ruby 使用用 ASCII 編碼來讀源碼,中文會出現(xiàn)亂碼
解決方法:
#!/usr/bin/ruby -w
# -- coding: UTF-8 -
- puts "你好浸赫,世界闰围!";

3.Ruby的命令行選項

4.Ruby 語法

所有的 Ruby 文件擴展名都是 .rb

Ruby 程序中的空白

a + b 被解釋為 a+b (這是一個局部變量)
a +b 被解釋為 a(+b) (這是一個方法調(diào)用)

Ruby 程序中的行尾

Ruby 把分號和換行符解釋為語句的結(jié)尾。但是既峡,如果 Ruby 在行尾遇到運算符羡榴,比如 +-\运敢,它們表示一個語句的延續(xù)校仑。

Ruby 標識符

標識符是變量、常量和方法的名稱传惠。Ruby標識符是大小寫敏感的迄沫。這意味著 RamRAMRuby 中是兩個不同的標識符。

保留字

Ruby 中的 Here Document

"Here Document" 是指建立多行字符串涉枫。
<<之后邢滑,您可以指定一個字符串或標識符來終止字符串,且當前行之后直到終止符為止的所有行是字符串的值。

print <<EOF 這是第一種方式創(chuàng)建here document 困后。 
多行字符串乐纸。
EOF 
print <<"EOF"; # 與上面相同 
這是第二種方式創(chuàng)建here document 。 
多行字符串摇予。
EOF 
print <<`EOC` # 執(zhí)行命令 
echo hi there 
echo lo there
EOC 
print <<"foo", <<"bar" # 您可以把它們進行堆疊 
I said foo.
foo 
I said bar.
bar

Ruby BEGIN語句

puts "這是主 Ruby 程序" 
BEGIN { 
    puts "初始化 Ruby 程序"
}
// 先打印"初始化 Ruby 程序"

Ruby END語句

最后執(zhí)行

Ruby 注釋

單行注釋:

#單行注釋

多行注釋:

=begin
多行注釋
多行注釋
=end

數(shù)據(jù)類型

Ruby支持Number,String,Ranges,Symbols數(shù)據(jù)類型汽绢,以及true,falsenil這幾個特殊值

Number數(shù)值類型

  1. 整形Integer
    整形分為2種,31位以內(nèi)Fixnum
    超過為Bignum
  2. 浮點型
    浮點數(shù)是Float類的對象.

算數(shù)操作

加減乘除指數(shù): + - * / **

字符串類型

Ruby字符串簡單地說是一個8位字節(jié)的序列侧戴,它們是String類的對象.
雙引號標記的字符串允許替換和使用反斜線符號宁昭,單引號標記的字符串不允許替換,且只允許使用 \\\'兩個反斜線符號.

轉(zhuǎn)義符酗宋,\

Ruby表達式

#{expr}
i.e. 
puts "相乘 : #{24*60*60}"
// 結(jié)果為: 相乘 : 86400

字符串可以相加:

name = "Liao Maer"
puts name + ", Loving"
// -> Liao Maer Loving

數(shù)組

數(shù)組字面量通過[]中以逗號分隔定義积仗,且支持range定義.

  1. 數(shù)組通過[]索引訪問
  2. 通過賦值操作插入,刪除蜕猫,替換元素
  3. 通過+寂曹,號進行合并和刪除元素,且集合做為新集合出現(xiàn)
  4. 通過<<號向原數(shù)據(jù)追加元素
  5. 通過*號重復數(shù)組元素
  6. 通過&符號做并集和交集操作(注意順序)
i.e.
ary = ["fred", 10, 10.2, "this can be help", "last element"]
ary.each do |i|
    puts i
end

哈希類型

哈希是在大括號內(nèi)放置一系列鍵/值對回右,鍵和值之間使用逗號和序列=>分隔隆圆。尾部的逗號會被忽略。

hashs = colors = {"red"=> 0xf00, "green"=>0x0f0, "blue"=>0x00f}

colors.each do |key, value|
   print key, " is ", value, "\n"
end  

范圍類型

一個范圍表示一個區(qū)間.
范圍(1..3)表示 1,2,3
范圍(1...3)表示1,2

(10..15).each do |n|
    print n, ' '
end

類和對象

Ruby是一種完美的面向?qū)ο蟮木幊陶Z言.

  • 數(shù)據(jù)封裝
  • 數(shù)據(jù)抽象
  • 多態(tài)性
  • 繼承

定義類:

class Customer
end

使用關鍵字 end 終止一個類翔烁。 中的所有數(shù)據(jù)成員都是介于類定義和 end 關鍵字之間.

Ruby類中的變量

  • 局部變量
    方法中定義的變量渺氧,局部變量在方法外是不可用的。局部變量以小寫字母_開始.
  • 實例變量
    實例變量可以跨任何特定的實例或?qū)ο笾械姆椒ㄊ褂?實例變量可以從對象到對象的改變蹬屹。實例變量在變量名之前放置符號(@).
  • 類變量
    類變量可以跨不同的對象使用.類變量屬于類侣背,且是類的一個屬性。類變量在變量名之前放置符號(@@)哩治。
  • 全局變量
    類變量不能跨類使用.如果您想要有一個可以跨類使用的變量.您需要定義全局變量秃踩。全局變量總是以美元符號($)開始.
i.e.
class Customer
    @@no_of_customers=0
end

我們?nèi)绻看蝿?chuàng)建Customer的instance,可以讓@@no_of_customers + 1
我們就可以統(tǒng)計有多少個Customer類的實例了

在Ruby中使用new方法創(chuàng)建對象

cust1 = Customer. new  // .后面有沒有space效果都一樣

自定義方法來創(chuàng)建Ruby對象

Ruby類中的成員函數(shù)

在ruby中业筏,函數(shù)被稱之為方法.類中的每個方法以關鍵字def開始憔杨,后面跟著方法名.
方法名總是以小寫字符開頭。在ruby中蒜胖,可以用關鍵字end來結(jié)束一個方法.

class Sample
  def hello
    puts "hello, world"
  end
end

sample = Sample.new
sample.hello

Ruby類案例

class Customer
  @@no_of_customers=0
  def initialize(id, name, addr)
    @cust_id = id
    @cust_name = name
    @cust_addr = addr
  end
  def display_details()
    puts "Customer id #@cust_id"
    puts "Customer name #{@cust_name}"
    puts "Customer addr #{@cust_addr}"
  end
  def total_no_of_customeers()
    @@no_of_customers += 1
    puts "Total number of customers:#{@@no_of_customers}"
  end
end

cust1 = Customer.new("1", "jack", "beijing")
puts cust1.display_details  // 可以省略`()`,也可以加上消别,一樣的,為了簡單便捷台谢,可以不加

Ruby變量

變量是持有可被任何程序使用的任何數(shù)據(jù)的存儲文位置.
Ruby支持5中類型的變量.

  • 一般以小寫字符寻狂,下劃線開頭。變量
  • $ 開頭朋沮,全局變量
  • @開頭蛇券,實例變量
  • @@開頭,類變量,類變量被貢獻剛在整個繼承鏈中
  • 大寫字母開頭:常數(shù)

Ruby全局變量

全局變量以$開頭纠亚。未初始化的全局變量的值為nil塘慕。在是永久-w選項后,會發(fā)生警告.

Ruby的實例變量

實例變量以@開頭

Ruby的類變量

類變量以@@開頭蒂胞,并且必須初始化后才能在方法中使用.
引用一個沒有初始化的類變量會發(fā)生錯誤.類變量在他的類或者模塊的子類或者字母快中可以共享使用.
在使用-w選項后图呢,重載類變量會產(chǎn)生警告.

  1. 塊由大量的代碼組成。

  2. 需要給塊取個名稱骗随。

  3. 塊中的代碼總是包含在大括號{}內(nèi)蛤织。

  4. 塊總是從與其具有相同名稱的函數(shù)調(diào)用。這意味著如果您的塊名稱為 test鸿染,那么您要使用函數(shù) test 來調(diào)用這個塊指蚜。

  5. 可以使用 yield 語句來調(diào)用塊。

    block_name{ 
        statement1 
        statement2 
        ..........
    }
    

yield

ie1.

def test
puts "in test method"
yield
puts "you back to test method"
yield
end

test {puts "you are in block"}

result:

in test method
you are in block
you back to test method
you are in block

ie2.

def test1
   yield (5)
   puts "在 test 方法內(nèi)"
   yield (100)
end

test1{
    |i| puts "you are in #{i} block" 
}

result:

you are in 5 block
在 test 方法內(nèi)
you are in 100 block

塊和方法

通常使用 yield語句從與其具有相同名稱的方法調(diào)用塊.

def test 
    yield
end
test{ puts "Hello world"}

如果方法的最后一個參數(shù)前帶有 &牡昆,那么您可以向該方法傳遞一個塊姚炕,且這個塊可被賦給最后一個參數(shù)。如果 *&同時出現(xiàn)在參數(shù)列表中丢烘,&應放在后面。

def test(&block) 
    block.call
end
test { puts "Hello World!"}
#輸出: Hello World!

BEGIN 和 END 塊

每個 Ruby源文件可以聲明當文件被加載時要運行的代碼塊(BEGIN塊)些椒,以及程序完成執(zhí)行后要運行的代碼塊(END塊)

Ruby的模塊

模塊(Module)是一種把方法播瞳、類和常量組合在一起的方式。

  • 模塊提供給了命名可敬避免名字沖突
  • 模塊實現(xiàn)了mixin裝置
  • 模塊不能被實例化
  • 模塊沒有子類
  • 模塊只能被另一個模塊定義

實例:

module Trig 
    PI = 3.141592654 
    def Trig.sin(x) 
    # .. end 
    def Trig.cos(x) 
    # .. end
end

就像類方法免糕,當您在模塊中定義一個方法時赢乓,您可以指定在模塊名稱后跟著一個點號,點號后跟著方法名石窑。

Ruby的require語句

require語句類似于 CC++中的 include 語句以及Java中的 import語句牌芋。

使用 Ruby require 語句來加載模塊文件

文件引用:

$LOAD_PATH << '.'  # 讓ruby知道必須在當前目錄中搜索被引用的文件
require 'trig.rb' 
require 'moral'  # .rb 不是必須的
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市松逊,隨后出現(xiàn)的幾起案子躺屁,更是在濱河造成了極大的恐慌,老刑警劉巖经宏,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犀暑,死亡現(xiàn)場離奇詭異,居然都是意外死亡烁兰,警方通過查閱死者的電腦和手機耐亏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沪斟,“玉大人广辰,你說我怎么就攤上這事。” “怎么了择吊?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵李根,是天一觀的道長。 經(jīng)常有香客問我干发,道長朱巨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任枉长,我火速辦了婚禮冀续,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘必峰。我一直安慰自己洪唐,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布吼蚁。 她就那樣靜靜地躺著凭需,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肝匆。 梳的紋絲不亂的頭發(fā)上粒蜈,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音旗国,去河邊找鬼枯怖。 笑死,一個胖子當著我的面吹牛能曾,可吹牛的內(nèi)容都是我干的度硝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼寿冕,長吁一口氣:“原來是場噩夢啊……” “哼蕊程!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驼唱,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤藻茂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后曙蒸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捌治,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年纽窟,在試婚紗的時候發(fā)現(xiàn)自己被綠了肖油。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡臂港,死狀恐怖森枪,靈堂內(nèi)的尸體忽然破棺而出视搏,到底是詐尸還是另有隱情,我是刑警寧澤县袱,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布浑娜,位于F島的核電站,受9級特大地震影響式散,放射性物質(zhì)發(fā)生泄漏筋遭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一暴拄、第九天 我趴在偏房一處隱蔽的房頂上張望漓滔。 院中可真熱鬧,春花似錦乖篷、人聲如沸响驴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豁鲤。三九已至,卻和暖如春鲸沮,著一層夾襖步出監(jiān)牢的瞬間琳骡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工讼溺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留日熬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓肾胯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耘纱。 傳聞我的和親對象是個殘疾皇子敬肚,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容