Ruby第二課

寫(xiě)出了helloWorld是一個(gè)成功開(kāi)始,讓我們深入學(xué)習(xí)一些相關(guān)信息吧

鍵盤輸入,屏幕輸出

鍵盤輸入

  • 我們通常使用gets方法獲取鍵盤輸入的值
name=gets   #我們定義一個(gè)變量name,把鍵盤輸入的值賦給name
puts "#{name}好漂亮" 
  • 發(fā)現(xiàn)嘗試之后,只有回車才能停止輸入,并且換行也被讀入到name中
  • 讀入的數(shù)據(jù)類型我猜想是字符串,但是還是要驗(yàn)證一下的
puts "輸入數(shù)據(jù)類型#{name.class}"   #.class方法用來(lái)驗(yàn)證數(shù)據(jù)類型
  • 但是如果我不想把換行讀入,但是輸入又沒(méi)辦法停止該怎么辦?
name=gets.chomp  #使用chomp方法去掉結(jié)尾換行符號(hào)
print("#{$name2},你好漂亮!")  

這時(shí)候我們就是用的字符串的.chomp方法:chomp方法是移除字符串尾部的分離符,例如\n,\r等...而gets默認(rèn)的分離符是\n

  • 我么還可以使用ARGV數(shù)組獲取數(shù)據(jù)
  • 1.ARGV:其實(shí)只是一個(gè)ruby定義好的一個(gè)數(shù)組,和java中的args類似,在你使用ruby 文件名 運(yùn)行文件時(shí),在后面加上用空格分隔的幾個(gè)字符串這幾個(gè)字符串就被放進(jìn)了ARGV數(shù)組
  • 2.在代碼中你可以不用定義直接使用,和一般數(shù)組使用的方式完全一致
  • 屏幕輸出

我們通常使用print和puts輸出數(shù)據(jù),然而他們之間區(qū)別是什么呢?

puts "zhangpei"
puts "很漂亮···"  #第一種方式
print "zhangpei"  
print "很漂亮···"  #第二種方式
print <<EOF
zhangpei
很漂亮...
EOF        #第三種方式

區(qū)別

ps:請(qǐng)?jiān)徫业淖詰佟ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ?/em>

區(qū)別是:puts會(huì)在打完內(nèi)容后自動(dòng)換行,而print不會(huì),但是當(dāng)print使用第三種方式打印,就可以保留兩個(gè)EOF之間的所有空格空行

相關(guān)Demo查看鏈接的inputAndOutputDemo.rb Demo,使用ruby 該文件路徑即可運(yùn)行
請(qǐng)注意,print是一個(gè)方法,但是對(duì)于ruby而言,是否給他方法的參數(shù)添加括號(hào)并沒(méi)有什么影響,但是參數(shù)最好使用括號(hào)括起來(lái)的

  • 其實(shí)我們還有p這個(gè)輸出方法

這種輸出方法和print這種輸出方式類似,但是還是有大概兩種區(qū)別
1.p只會(huì)轉(zhuǎn)義'別的符號(hào)他都不會(huì)轉(zhuǎn)義

p("\n我是張培\t你是誰(shuí)")
puts("\n我是張培\t你是誰(shuí)")
Paste_Image.png

2.他會(huì)把所有要輸出數(shù)據(jù)都按照原來(lái)的類型輸出

  • ruby有一種比較方便的輸出方式是js沒(méi)有的

print "請(qǐng)輸入你的名字:"
name=gets
puts name,"shi","haoren"
print name,"shi","haoren" <=> print "#{name}shihaoren"

我們可以在同一行采用逗號(hào)分隔每一個(gè)逗號(hào)代表對(duì)puts或者print的一次調(diào)用,后兩中方式體現(xiàn)了**引入變量的方式**:
 - 1.采用逗號(hào)分隔字符串與變量
 - 2.直接在字符創(chuàng)中`#{變量名}`此方式類似于js中
```javascript
var name = "zhangpei"
console.log(`${name}`,shihaoren)

''和“”區(qū)別

都是字符串前者不會(huì)解析轉(zhuǎn)義字符串,后者會(huì)解析

puts "zhangpei \n 乖孩子"
puts 'zhangpei \n 乖孩子'
Paste_Image.png

條件判斷語(yǔ)句和循環(huán)語(yǔ)句

  • 條件判斷語(yǔ)句:

1.if語(yǔ)句和js類似不過(guò)沒(méi)有{}來(lái)限定邊界,而是使用end結(jié)束內(nèi)容

puts "請(qǐng)輸入num1:"
num1=gets.chomp
puts "請(qǐng)輸入num2:"
num2=gets.chomp 
 if num1>num2    
puts "the bigger number is #{num1}"  
elsif num1 == num2    
puts "the two number is equal,all is #{num1}"  
else    
puts "the bigger number is #{num2}"  
end  #這個(gè)是循環(huán)的結(jié)束end
Paste_Image.png
  • 2.并且使用elsif 條件 代替了js中的 else if 條件
  • 我們還有unless和case作為條件控制語(yǔ)句,以后再慢慢填充

數(shù)組

  • 你可以直接用array=[]創(chuàng)建一個(gè)空的數(shù)組對(duì)象
  • 也可以直接用 一個(gè)不存在的index運(yùn)行array[index]=5給這個(gè)數(shù)組創(chuàng)造一個(gè)新的元素
  • 你可以直接使用array.size方法獲取數(shù)組大小
  • 數(shù)組的循環(huán)
數(shù)組.each do |n|  #一定要知道,這里的n是數(shù)組中的元素不是index
塊內(nèi)容
end

散列

  • Symbol和String的異同
    感覺(jué)String和Symbol及其相似,這時(shí)我們采取對(duì)比學(xué)習(xí)法
  • 1.形態(tài)
  • String的對(duì)象通常采用""或者''來(lái)包住一些字符,這個(gè)整體是一個(gè)字符串,也就是說(shuō)當(dāng)你看到雙引號(hào)或者單引號(hào)就直到是字符串
  • Symbol的對(duì)象通常采用:來(lái)引出一些字符,這個(gè)整體是一個(gè)Symbol,當(dāng)你看到:就只到他是Symbol
  • 2.用法
    • String使用廣泛(一般可以代替Symbol)
    • Symbol通長(zhǎng)都用于表示符號(hào)之類的,比如函數(shù)的名字你可以使用Symbol,強(qiáng)調(diào)的是名稱,也就是說(shuō)同樣的名字,對(duì)應(yīng)同樣的數(shù)據(jù)
  • 3.占用內(nèi)存的區(qū)別
  • String即便內(nèi)容相同,只要申明就會(huì)創(chuàng)建不同的內(nèi)存空間
  • Symbol只要相同只占用同一個(gè)內(nèi)存空間
    Paste_Image.png

    Paste_Image.png

    代碼中的.object_id可以獲取這個(gè)對(duì)象所占用的內(nèi)存空間地址
    我覺(jué)得之所以使用symbol就是為了可以省一點(diǎn)內(nèi)存空間吧
  • 散列的定義
  • 你可以把散列完全理解成js中的json對(duì)象(都是使用{}包住,內(nèi)容是key:value形式),
  • 他們的區(qū)別定義創(chuàng)建方式不相同,js中的json通常采用String作為key,但是散列采用String或者Symbol作為key
  • 獲取散列中某個(gè)值的方式有一點(diǎn)不一樣,json可以采用對(duì)象.key或者對(duì)象.
  • 散列創(chuàng)建

hash1={name:"zhangpei",age:20}
hash2={:name=>"zhangpei",:age=>20} #hash1和hash2完全一樣

hash1和hash2都是使用Symbol作為key的

hash3={"name"=>"zhangpei","age"=>20}

hash3采用字符串作為key

hash1[:name] #值是zhangpei
hash2[:name] #值是zhangpei
hash3["name"] #值是zhangpei

 - 因此要注意:就算是第一種創(chuàng)建方法,也要通過(guò):name訪問(wèn),可見(jiàn),我們一般支持Symbol類型作為key
- 散列循環(huán)
```ruby
hash1={name:"zhangpei",age:20}
hash1.each do |key,value|
puts "#{key}:#{value}"
Paste_Image.png

先總結(jié)這么多,在接下來(lái)的簡(jiǎn)書(shū)中我可能會(huì)再細(xì)致的講些基礎(chǔ)語(yǔ)法,你可以訪問(wèn)我的github 里面有許多RubyDemo,可以進(jìn)行進(jìn)一步學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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