Re: [分享] 另一個 Parallel Assignment 玩法
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: 那我也可以在 Java 這樣子搞
: Object[] aParallelMethod(){
: java.util.Vector v = new Vector();
: //倒入要回傳的值
: v.add(...);
: //
: Object[] result = new Object[v.size()];
: return result;
: }
是不是少了把 v 的內容 copy 到 object array 的部份?
: 問題是,離開初期 Coding 之後
: 我今天面對一個 function or method
: 我怎麼知道他回傳的東西是什麼?
傳回值是 method 行為的一個很重要的部份,
如果連 method 的傳回值到底是什麼東西都不知道的話,
會知道這個 method 到底在做什麼事嗎?
為什麼一開始會要用這個 method 呢?
: 可是,傳統囉唆的方式,以 Java 來說
: 如果搭配 IDE 的程式碼協助下(不要顯示 Javadoc 也沒差)
: 我可以在幾乎不用翻 API 的前提下
: 就可以繼續 coding 下去,不用擔心型態記錯
就算 IDE 提示了傳回值的型態,型態並不代表傳回值的意義,
也沒有說明這個 method 到底做了些什麼事。
Type match 不代表程式正確,程式就算是 compile 都成功了,
也不保證一定是正確的程式。
這麼說來,提示傳回值型態只是給了一個虛假的安全感。
程式的正確與否還是要靠 testing 來確認。
另外, Ruby 根本不擔心型態的問題,
只要物件能完成要求的動作就好了。
這就是所謂 Duck Typing。
比如說這個例子:
class Cat
def speak
puts 'meow'
end
end
class Dog
def speak
puts 'woff'
end
end
def talk_to_me (obj)
obj.speak
end
talk_to_me(Cat.new)
talk_to_me(Dog.new)
Cat 和 Dog 都有 speak 這個 method,所以他們都能完成 talk_to_me 所需要的功能。
不用去建立 interface 或是繼承架構來強迫他們是同一種「型別」。
不過要是那一天我傳了一個不會 speak,
或是有 speak method 但是做的是完全不同的事的東西進去怎麼辦?
所以你一定要寫 Unit Test
其實這裡在講的就是 Static Typing 和 Dynamic Typing 的爭議
可以參考 wikipedia 的說明 http://en.wikipedia.org/wiki/Type_system
只是想不到 parallel assignment 竟然會扯到 Typing 的問題..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.49.91
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章