iT邦幫忙

DAY 5
0

Ruby on Rails 30天學習筆記系列 第 5

Ruby on Rails 30天學習筆記之5-gets、Prompting、Argument

  • 分享至 

  • xImage
  •  

大家好,我是小K。今天的進度是以下四個習題。

Exercise 11: Asking Questions

Exercise 12: Prompting People

Exercise 13: Parameters, Unpacking, Variables

Exercise 14: Prompting And Passing

Exercise11提到了輸入。在Ruby,要讓使用者輸入,要用下面這個指令:

gets

但是gets這個指令,還去抓取換行字元。所以使用者輸入之後按下Enter,輸出所輸入的字串後會自動幫你換行。像下面這個樣子:

那如果不要讓它換行的話,該怎麼寫呢?只要在gets後面加上chomp。chomp這個物件,主要作用就是將字串前後的換行字元拿掉,這樣在印完之後才不會自動換行。

gets.chomp

括號可以拿掉,以前打Java打習慣了,所以在練習的時候常常會習慣打上括號。(笑)

11.1利用類似的格式,再寫一份。

Exercise12,這章的習題是Exercise11的延伸練習。如果要將使用者所輸入的字串轉變成整數的話,只要在後面加上to_i。

number = gets.chomp.to_i

這樣number的型態就會是整數。所以Exercise12的習題最主要是在練習,將使用者輸入的字串轉為數字,然後做一些簡單的運算。

上面這個是英文版的練習範例。中文版的Exercise12,所講的是有關於require和Libraries的觀念。雖然大概懂得require和函示庫的概念,但是我照著中文版的範例打了一遍,所印出的是https://www.ruby-lang.org/en這個網頁的原始檔。有點不太懂意思所以就先跳過,後面再來研讀。不過我有將程式碼放到Github。

12.1將輸入的字串轉為浮點數,並做運算。(取10%)

Exercise13,這一章的習題主要是講參數和傳遞參數的觀念。在前面先將參數的個數宣告好,用ARGV這個物件。比如要宣告3個參數:

first, second, third = ARGV

然後在執行Ruby程式的時候,輸入3個參數,就會自動依序對應到左邊的變數。下面是Exercise13的範例程式碼:

如果你宣告3個參數,但實際上只輸入2個變數話,最後一個參數就會當成nil。(比如上面第二次執行結果)

NOTE: nil在Ruby表示的是一個空值。

這章的習題比較多,前面兩題是簡單的增加和減少參數的個數,所以我將程式碼傳上來,但在這邊就不在解釋囉~

13.1 減少參數個數

13.2 增加參數個數

NOTE:

在上面兩個範例中,應該還有看到一行

The script is called: #{$0}

這行的意思是印出當前執行的腳本(程式) Ruby會把腳本名稱固定存在$0這個變數裡面。

13.3 將gets.chomp和ARGV合在一起,讓使用者輸入更多資料。

這題我一開始不太清楚他的意思,所以無從做起,就先跳到Exercise14。其實這題的習題是要承接Exercise14的伏筆。所以等我寫完Exercise14,再回來解釋這題習題吧~

Exercise14,這章習題主要是練習如何將gets.chomp和ARGV合在一起,讓使用者可以輸入多一點資料。

廢話不多說,我先PO上程式碼。

第一行變數的宣告是抓第一個參數的值(ARGV.first)設定給user_name。

usre_name = ARGV.first

第二行宣告一個變數prompt為字元 > ,作用是提示使用者輸入資料。(詳見右邊終端機執行結果)

在第7行,會發現在gets前面多加了一個$stdin(前面的$字號不可以省略喔!),這是什麼呢?在C裡面,stdin是代表標準輸入的意思,在Ruby的世界也是一樣,它就是代表標準輸入。

所以,當執行程式時,輸入了一個參數。程式會將這個參數抓起來設定給user_name,並在後面的程式顯示這個變數的值。

OK!在回去寫Exercise13的最後一題習題。(不解釋囉~)

OK!那今天的進度就到這邊囉~明天見!

By 小K


上一篇
Ruby on Rails 30天學習筆記之4-Practice 1
下一篇
Ruby on Rails 30天學習筆記之6-Files
系列文
Ruby on Rails 30天學習筆記8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言