PLT 板


LINE

看板 PLT  RSS
※ 引述《brianhsu (墳墓)》之銘言: : 基本上,我認為那個影片作者的想要表達的重點只有一個: : Java 是個 super verbose 的語言,在可以的情況下快點跳 : 船吧。XD 其實 Scala 也是 super verbose, 和 Haskell 相比 :p 我目前沒看過能寫得比 Haskell 還簡潔的語言。 就算是 dynamic typing 也不見得能比 Haskell 簡潔。 (為了 type safe, static typing 天生上會比 dynamic typing 來得 verbose) : 影片裡在強調這兩點: : * Code is read more than written : * We are all consenting adults. : 解釋:我們知道自己在幹啥事,所以所有的 field 都是 public。XD : 而第二點造成了 Python 的可閱讀性。 : 當然,第二點其實我自己不是很認同就是了。 說到 public/private 的事情,在 Ruby 裡, client 可以很輕易地跨到 private 的區段。 我想會有很多人說,這樣就沒有意義了。不過呢, 我個人是覺得這仍然是很必要的事情。有點像是區分 design defined behavior 和 implementation defined behavior. 至少你要讓 client 很明確地知道某個 method 是 private, 可以的話,請盡量不要用,未來很可能改變,甚至消失。 畢竟無法避免的,library or framework 也是會有 bug 的。 多少需要提供一些補救之道。類似這種感覺。但會不會因為能夠補救, 而使得 library or framework 實作者,皮繃得比較鬆散呢? XD 這大概就會像 poga 板友所提到的: : 什麼政治宗教經濟因素拿出來討論就真的沒完沒了了... 不過我是覺得偶爾提一下也無妨啦 :p 不要死纏爛打就好了... 謹記謹記 : 這是程式語言設計上所採用的哲學的問題,在這裡 Java 很明顯 : 的喜歡 getter/setter,而其他三個語言比較偏好 properpty : 的做法。 其實我是覺得沒什麼差別。重要的差別在於兩點: 1. function/method call 可否省略 () ? 可的話,method 看起來也能像 data. 2. 能否有一定程度的 operator overloading? 可的話,a.b = c 也可以是 method. 第一點決定了 getter 的外觀,第二點決定了 setter 的外觀。 在 Ruby 裡,也只是 meta-programming 的應用而已。因此算是某種 syntactical 上的 sugar. 能不能省略 (), 我覺得也牽涉到一個議題。假設我需要取得 lat method 本體怎麼辦?我不確定在 Python 裡所謂 property 的狀況, 但一般 function 下,不打括號就是 function 本體。(應該吧?) 這點和 ECMAScript 是一樣的。然而在 Ruby 中,因為 () 可以省略, 因此這種作法是無效的。取而代之的是,呼叫另一個 method. coord.method(:lat) 以此取得 lat method. 這似乎就顯示出不同的主導方式: 在 Python / ECMAScript 中,data 是本體。寫: obj.method 是回傳 method 本身,對他使用 () 則是呼叫這個 method obj 的某個 function. 然而在 Ruby 中,沒有任何方法可以直接取得某個 obj 的 data. 所有的 點 什麼東西,全部都是 method call. 因此要取得 method 本身, 也得透過另外一個 method 了。 一開始我比較喜歡 Python / ECMAScript 的方式。不過現在我比較喜歡 Ruby 的 方式。因為其實需要取得 method 本體的機會比需要 method call 來得少。 那麼當然是能省略就省略。另一方面,則是用了 Haskell 後,不喜歡括號 :p : BTW,我個人比較喜歡有 Uniform access 的這邊,我個人覺得 : 用 property 的方式,可以很明顯的告訴你『你改掉了某個值』。 : val coord = new Coord (10, 20) : coord.lat = 20 : coord.setLat (20) : 在第二行裡我可以一眼就看出來我改了 lat,值是 20,而不是 : 像第三行先看到 set,所以知道我在改值,接著再看 Lat,拼 : 湊出『我在改 lat 的值』的簡單的事實。 : 我知道這和 Java 世界裡的觀念有所差別,不過我比較喜歡第一 : 種的作法。 : 而 Ruby/Scala 的好處是由於有 uniform access 你可以很簡單 : 的控制 getter/setter,讓你也可以讓你在某些情況下使第一行 : 消效。 Ruby 和 Scala 在這邊有不小的差異,在於就像我上面提到的, 在 Ruby 裡,一切都是 method call. 而 Scala 還是把 data 跟 method 混在一起。因此這邊確實會有 coord.lat = 20 的語意改變。 在 Ruby 中只是單純不同 method 而已。 Flash 的 ActionScript 3 可以這樣寫: var lat_: int; // data member, field, instance variable, whatever term function get lat(): int{ return lat_; } 於是寫起來也會是 coord.lat 呼叫上面的 lat() method. 這種方式跟 Scala 會比較像一點。 : 只能說,習慣了 Ruby/Scala 的簡潔,回頭寫或看 Java 程式碼 : 有的時候會很覺得痛苦就是了。由簡入奢易,由奢返簡難啊。XD 請務必試試 Haskell... XDXD -- In Lisp, you don't just write your program down toward the language, you also build the language up toward your program. 《Programming Bottom-Up》- Paul Graham 1993 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.160.129
1F:推 jaiyalas:請務必試試 Haskell... +1 01/08 21:21
2F:推 lanyitin:講解的超詳細的啦!! 05/09 01:28







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP