写程序非得要按照相对应的逻辑来写吗?

2015-08-27 07:35:46 +08:00
 soratadori

举个例子,假如有一个文本里面的内容是严谨的数据结构,可能是 json 、 xml ……也可能是其他的配置格式。如果对其操作的话,有没有必要完全模拟这种结构来写一个相对应的解析程序?如果使用一些技巧(如正则表达式)来操作的话,不仅可读性强,代码还十分短小。

再比如设计一个门电路,通过某些技巧进行操作就比死板的按照逻辑来设计要高效的多。

不考虑程序效率问题的话,有必要一定按照相对应的逻辑来写吗

4259 次点击
所在节点    程序员
30 条回复
paulagent
2015-08-27 07:39:12 +08:00
if you would maintenance the program forever, you can do it ,otherwise, never do it.
twor2
2015-08-27 07:39:27 +08:00
坏处: bug 不好排除,不好维护
好处:自己的玩具随便玩
lululau
2015-08-27 07:59:44 +08:00
你居然说用正则解析结构化数据可读性更强?正则表达式是你的母语吗?
sandideas
2015-08-27 08:01:11 +08:00
就是要考虑程序效率吧。。。
数据量一大正则效率会特别低吧。
invite
2015-08-27 08:10:01 +08:00
举个栗子, TCP/IP 数据包,结构也算严谨了吧。但是是变长的,你正则怎么搞?
而且,既然结构严禁了,我都知道哪个位置是什么数据了,要正则干嘛?直接 C 结构转换一下就 OK 了。
abscon
2015-08-27 08:13:36 +08:00
正则表达式的表达能力未必能解析所有的格式。
在它的表达能力不够时,你强行使用,必然出现无法修正的 bug ,会导致解析出错,会导致黑客精心构造一个输入文本让你的程序叛变。

但是如果不是通用型的处理而是临时用一下,针对特定的几个输入,那随便你,反正程序用了就扔
loading
2015-08-27 09:07:58 +08:00
您看过解析程序的源码吗?建议看看!
c742435
2015-08-27 10:06:07 +08:00
貌似 xml 和 json 这种嵌套结构是不能使用正则处理的。

一般来说,问出这种问题的都是程序新手。那自己写解析程序有多坑不用我说。老手该怎么做心里有数(并不特指“非得要按照相对应的逻辑来写”),不用问别人。

如果你觉得自己不是一般人 当我没说。
kaizixyz
2015-08-27 10:10:49 +08:00
我来翻译下~机制与算法哪个比较重要?
honkew
2015-08-27 10:17:01 +08:00
没有必要,数据结构一致性
你的数据结构效率更高,那么你就是天才
这么喜欢造轮子,不如从零写个 html dom 解析,用你说的正则去写
wind3110991
2015-08-27 10:23:06 +08:00
为了提高效率可以不造轮子,但是你不能只为了追求开发和执行效率写得没有重用性和可读性
但我个人觉得,可重用的稳定代码比高效率的执行代码意义要大很多
举个栗子: coffeescript 这个变态玩意 = =
jugelizi
2015-08-27 10:24:24 +08:00
叫我干嘛
loading
2015-08-27 10:26:08 +08:00
请楼主大神去 github 找到你提到的解析程序,然后用您说的方式从效率上完爆他们。

造福全人类!
imn1
2015-08-27 12:53:40 +08:00
@sandideas
未必
看你说的效率是什么,数据量巨大的话
如果是运行效率,理论上正则更高
不过开发和维护效率就可能正则低一些
abscon
2015-08-27 13:08:47 +08:00
@imn1 在效率之外还有更要紧的东西,那就是对错
wuling
2015-08-27 13:11:11 +08:00
楼主只是用正则打个比方而已,上面一堆纠结的
imn1
2015-08-27 13:45:26 +08:00
@abscon
从形式逻辑上说,都是对的,只是方式不同
很简单一个例子,用一个书名(其他资料全无)在图书馆找到这本书,在现在是很正常的事(对),但在没有电脑的时代,这就是很困难了(错)

某种方式不能“生存”于某个环境,除了这种方式本身是错误的这个可能,还有另一个可能是环境不具备容纳这种方式条件

我们的思维有一堵玻璃墙,大部分人看不见,少数看见了,就找石头垫脚登高望远,某位诗人造了个傻傻(ss )的相机,直接就把外面的风光拍下来了,“不许拍照”,相机被没收了,然后那大部分人说,诗人太清高了,要活在这世上,俗才是对的

TVB 《贼公阿牛》的主题曲,当年一首被誉为“一朵鲜花插在牛粪上”的流行曲——“世间事怎分对错……”
shejinb
2015-08-27 14:33:48 +08:00
必须呀,要不然怎么进行协作呢? bug 怎么搞。
buliugu
2015-08-27 15:15:34 +08:00
除非那个配置文件里自带 BNF 什么的,倒是写个通用的 parser
abscon
2015-08-27 15:54:01 +08:00
@imn1 你最好在图书馆找到《计算理论》这本书,找到讨论正则文法的相关章节,并仔细研读。
然后你回复中体现出来的这种有害而懒惰的诗意思维会少一点。

如果想以“理论的归理论,实践的归实践”来给自己找借口,那只能来一发“程序员之怒”:

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/216286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX