看板 Ruby 關於我們 聯絡資訊
※ 引述《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