Ruby 入門指南 - GUI 中的編碼與解碼
Ruby 入門指南 - GUI 中的編碼與解碼
我們現在要來在 GUI 中建置編碼與解碼的功能
完整程式請參考
- encrypt.rb
- encryptgui.rb
- guidemo.rb
雖說是用 Encrypt 類別 (class) 的 toEncode 方法 (method) 進行編碼,但在 GUI 仍須考慮實際的情況。例如使用者可能沒有輸入任何文字,或是沒有先按 New 建立新的 Encrypt 物件就按下 Encode ,嗯,這都有可能發生無法執行的情況,甚至有可能導致程式就此當掉。
實際上若是發生類似的情況, Ruby 直譯器 (interpreter) 還不致於當掉,倒是會發起例外 (exception) 結束或暫停程式執行,可是這樣程式跑起來就顯得卡卡的,總是給使用者一些不舒服的感覺。這樣不好,所以先做個例外處理 (exception handling) 不外是個好的程式設計建議。
Ruby 用 rescue 偵測例外情況,但其實如果能不做例外處理就不做例外處理的好,為什麼呢?因為例外處理說起來讓直譯器先去檢查是否發生例外,這會讓程式執行上增加許多負擔,簡單說,需要額外的記憶體空間與處理器時間,也許在我們這樣的小程式看不出來,但是在大型程式中,這個缺點就顯而易見了。
不用例外處理的話,這樣的問題要解決也不難。因為 @userinput 有設置初值為空字串 (string) ,若使用者沒有輸入文字的話,從 @inputField 取得的值也會是空字串,另外沒有新建 @e 的話, @e 的初值就是 nil 。
因此,我們用 if-else 檢查可能的情況就可以了。編碼在 GUI 中為 encodeMethod ,程式如下
# 進行編碼
def encodeMethod
@userinput = @inputField.value
if @userinput == ""
@displayText.text = "No input string!!"
else
if @e == nil
@displayText.text = "No encrypt object!!"
else
@result = @e.toEncode(@userinput)
@outputField.value = @result
@displayText.text = "Encoding success!!"
end
end
end
如果使用者沒有輸入文字,訊息欄就顯示 "No input string!!" ,同樣的沒有新建 @e ,訊息欄也提示相關訊息 "No encrypt object!!" ,而使用者有輸入文字亦有新建 Encrypt 物件的話,就把結果顯示到 @outputField ,訊息欄就顯示 "Encoding success!!" 。
解碼方法 decodeMethod 幾乎與 encodeMethod 完全相同,除了把 toEncode 換成 toDecode 之外
# 進行解碼
def decodeMethod
@userinput = @inputField.value
if @userinput == ""
@displayText.text = "No input string!!"
else
if @e == nil
@displayText.text = "No encrypt object!!"
else
@result = @e.toDecode(@userinput)
@outputField.value = @result
@displayText.text = "Decoding success!!"
end
end
end
來執行看看囉!下面是編碼
下面是解碼
如果有編碼結果不錯,我們想保存密碼表的話,就要建置存檔與載入的功能囉!
中英文術語對照 | |
---|---|
類別 | class |
方法 | method |
直譯器 | interpreter |
例外 | exception |
例外處理 | exception handling |
字串 | string |
您可以繼續參考
GUI 篇
- GUI 的基本概念
- 加入 command
- 整合 Encrypt 類別
- GUI 中的編碼與解碼
- 存檔與載入
- 完成版的 EncryptGUI
- 下一步
相關目錄
回 Ruby 入門指南
回 Ruby 教材
回首頁
參考資料
http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_tk.html
http://www.tutorialspoint.com/ruby/ruby_tk_guide.htm
訂閱:
張貼留言 (Atom)
window.___gcfg = { 'lang': 'zh-TW' };
沒有留言:
張貼留言