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







沒有留言:




















window.___gcfg = { 'lang': 'zh-TW' };





Popular posts from this blog

迅雷 Thunder 7.9.43.5054 免安裝版 (9.1.41.914 安裝版) - 支援BT下載的萬用 檔案下載工具

Nhiều đồn đoán cho rằng bộ đồ "phá vỡ quy tắc" của Meghan Markle được lấy cảm hứng từ trang phục của Công nương Diana

Cụ ông 92 tuổi gào khóc vì mất hết tiền tiết kiệm cả đời, càng cay đắng hơn khi kẻ trộm là đứa cháu trai 34 tuổi