PLT 板


LINE

看板 PLT  RSS
※ 引述《PsMonkey (痞子军团团长)》之铭言: : 我不是来护航的,不过被认为是护航的也无访 : 起因是因为这篇文章我看了很久都看不懂 因为这篇是从影片延伸的,所以有些地方我略过了,另外 其实影片有些地方我不认同,不过我没提出来。 这里只是很无聊地把影片里的例子原封不动的搬出来而已, 所以也没啥护航不护航的。 基本上,我认为那个影片作者的想要表达的重点只有一个: Java 是个 super verbose 的语言,在可以的情况下快点跳 船吧。XD 另外,他还有另一个影片也很有趣: http://oodt.jpl.nasa.gov/better-web-app.mov 是在讲 Web framework 的,里面的口号是 We Love J2EE!XD : 如果今天比较的论点在於 : Java 要自己写一堆 getter/setter : 而其他三种语言不用 : 那我不置可否 : 用 Eclipse 的 getter/setter generator 的人好像没啥资格讲话 XD 影片里有一个论点:程式码阅读的次数比撰写的次数多。 我们不在乎写一堆 getter/setter,但在阅的时候会产生很多 噪音,造成阅读上的困扰。 : : 到这边为止,Python / Ruby / Scala 还是不算完全打败 Java,毕竟 Java : : 也才九行程式码,Ruby 也要七行。 : 如果你不用符合 JavaBean 的 spec : 没有引数的 constructor 可以省略 : (lat, lon 的 field 宣告部份也可以合成一行→无意义 XD) 这里是为了保持各种语言实作出来的行为一致性,提供一组 default constructor,lat/lon 会是 0,但同时也提供另 一组做初始化,所以没办法省。 在这边 Python / Ruby 都是用 default argument value 的 方式做,Java/Scala 则是提供另一组 constructor。 PS.Scala 2.8 开始也可以用 default value 了。 : : 重点是下面了,现在我们发现原来的设计有问题,因为 lat 不能小於 -90 : : 或是大於 90 ,我们要如何在不更动原有的客户端的情况下,把这个判断加 : : 到我们的函式库呢?Python / Ruby / Scala 都可以很轻松的做到。 : 基本上 Java 的教科书(忘记官方 coding style 有没有这样建议?) : 都会告诉你去写 getter/setter 来存取 field : (所以这几天在写 GridBagLayout 的时候还颇惊讶 XD) : 你不用 setter 来设定 lat 的值 : 然後说的好像 Java 作不到 : 跟抱怨「Java 里头不能操作指标很麻烦」的感觉差不多 : 只能说... 我的功力太低,实在不太懂...... Orz 影片里在强调这两点: * Code is read more than written * We are all consenting adults. 解释:我们知道自己在干啥事,所以所有的 field 都是 public。XD 而第二点造成了 Python 的可阅读性。 当然,第二点其实我自己不是很认同就是了。 我们当然可以在 Java 里用 getter/setter(影片里一开始的作 法),但会从 9 行程式变成 21 行,成为影片里说的 super verbose,然後别忘记第一点:Code is read more than written. 但如果我们要用破坏封装来达成简洁,就无法达到上面说的当你 有一天发现程式有问题时,可以不用动到客户端的 code 来做修 正了。 这里只是简单的指出在客户端的程式码是相同的情况下(都不使 用特殊的函式),如何能够达到相同的效果,而结论是 Java 本 身是做不到的。 这是程式语言设计上所采用的哲学的问题,在这里 Java 很明显 的喜欢 getter/setter,而其他三个语言比较偏好 properpty 的做法。 其实没啥好坏之分,只是设计的哲学不一样,但就像你说的,我 也很讶异我在 Android 会看到用 public field 来操作的情况 出现。 Notification 就是一个例子,他有很多 feild 是 public 的。 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,让你也可以让你在某些情况下使第一行 消效。 Ex. 可以用 coord.lat 读值,但不能用 coord.lat = 来指定值。 不过这都只是个人偏好就是了。 只能说,习惯了 Ruby/Scala 的简洁,回头写或看 Java 程式码 有的时候会很觉得痛苦就是了。由简入奢易,由奢返简难啊。XD -- ~ 白马带着她一步步地回到中原。白马已经老了,只能慢慢地走, 'v' Brian Hsu 但终是能回到中原的。江南有杨柳、桃花,有燕子、金鱼…… // \\ ( 坟 墓 ) /( )\ 但这个美丽的姑娘就像古高昌国人那样固执。 【白马啸西风】 ^`~'^ http://bone.twbbs.org.tw/blog 『那都是很好很好的,可我偏不喜欢。』 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.199.114







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

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

TOP