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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP