OOP 思想真的很先进吗 GOTO 真的不能用吗

2016-12-22 09:52:55 +08:00
 nbhec2

由于身处的行业环境,身边有很多做嵌入式的朋友,引发我对这两个问题的老生旧谈的思考。 个人观点:

这个所谓的面向对象思想其实不过是降低了行业的入门门槛罢了,实际上对于任何一段程序,一切归为函数。抽象画一个程序只是降低了记忆力门槛,因为你不需要记下来整个程序段的内容,都封装好了。但是函数、过程明显要高效严谨的多。 GOTO 是一个高效的语句,它和面向过程函数是相辅相成的, GOTO 其实就是 JMP SETJMP , JMP 允许你从程序的某一行跳到另一行, SETJMP 允许你从一个函数中跳到另一个函数中,它使得整个程序致密、高效、严谨,紧紧耦合在工艺上。 总之我身边的工程师每天都在写着这样严谨、美观、精致极富逻辑结晶的程序,调试控制实现着各种复杂的工艺,小到能源站大到酸奶生产线。听了一节 JAVA 视频,居然听到了这种认为 OOP 先进只支持 OOP 删除 GOTO 语句的程序设计语言,难怪它如此的低效低质。

13305 次点击
所在节点    编程
124 条回复
sodatea
2016-12-22 22:43:06 +08:00
C 语言可以 OO ,有本知名的书叫 Object-oriented Programming in ANSI-C
https://www.cs.rit.edu/~ats/books/ooc.pdf
whitefable
2016-12-22 22:44:34 +08:00
@nbhec2 那不就是么?你分成一个个阶段来不正是用了 OOP 的思想么?~而且上面我觉得不少人说清楚了 GOTO 只是不应该滥用而已~而且这两个都不是在同一层次对比的东西……你硬要扯一起那就是都用 OOP 来设计然后区别于你们最后转换成 GOTO 类型他们没有也并不需要如此而已嘛………明显大家觉得你问题大在于你都没有选择合理的东西来对比………
zonghua
2016-12-22 22:45:42 +08:00
一大堆人用 MyBatis
SoloCompany
2016-12-22 22:50:38 +08:00
你要类比也应该拿 switch / case / if / else 来类比啊, goto 躺枪
htfy96
2016-12-22 23:01:48 +08:00
lightening
2016-12-22 23:04:45 +08:00
不知道楼主你写的程序大概是多少行的量级?

正如楼主所说,“抽象画一个程序只是降低了记忆力门槛,因为你不需要记下来整个程序段的内容,都封装好了”。事实上 OOP 的诞生就是因为程序越来越大,越来越复杂,导致低能的人类没法整个记住整个程序,所以发明了 OOP 这种更先进的工具来解放程序员的大脑,使得人们用同样的脑力可以构建更复杂的系统。

你的这种理论很常见,“这题我根本不用微积分也能做”,“这个木匠活我不用切割机,只用一把刀就能做了”。这种思想的本质都是觉得使用先进的工具是本人能力不足的表现。是的,先进的工具使得能力较差的人也能完成一件事情;但同时也意味着能力高超的人利用先进的工具能干成一件更复杂、更有难度的事情或者干同一件事情花费的时间较短。现实中没有人关心你是不是很聪明能记住整个程序的逻辑。人们只关心你能不能快速、可靠的完成任务。所以 OOP 成为了主流。
CruelMoon
2016-12-22 23:08:43 +08:00
偶觉得语言简直是拉低了文明人的入门门槛,因为你不需要记忆所有概念,只需要记住若干个词,拿来水金币就好了。
moqimoqide
2016-12-22 23:13:47 +08:00
这难道不是市场的选择吗? :)
cuebyte
2016-12-22 23:22:00 +08:00
@nbhec2 顺序是:结构化编程->oop->java 。要喷请对准。

java 是纯 oop 语言,在意封装性自然没有 goto 。而且也不需要 goto 啊,因为有了 goto 就可能有你这样的爱撕逼滥用。

不仅 java 没有, python, ruby 也没有。也有很多语言为了避免用户使用 goto 专门搞出 label 让用户来 break 或 return 。

这么多语言,做了这么多事,就是为了防止你这样的爱撕逼乱写代码,坏了名声。
nbhec2
2016-12-22 23:35:35 +08:00
@cuebyte 爱斯逼,那来解释解释 PHP GOLANG 那么先进的语言后补 GOTO 和设计 GOTO 是什么目的呢。是不是打你们这些爱撕逼脸啊。一个丑陋臃肿不堪,一个已经差不多入土了,一个曾经连 switch 都没有的克意简化的至简语言来对比。爱撕逼再来给我展示下不用 GOTO(JMP)做 ARM AVR 我来开开眼
yura93
2016-12-22 23:35:48 +08:00
不要撕,好好用它赚钱就完了。技术的最终目的是支撑市场,市场产生价值反作用于技术。什么时候用什么就完了呗,有时间多陪陪家人。
cuebyte
2016-12-22 23:47:23 +08:00
@nbhec2 所以说要怎么和一个低能沟通呢…… 你先承认我没说禁止 goto 好不好,拜托。

首先你说 php5.3 先进……以你的智商它的确是先进了了。喏,这是你要的 php : http://php.net/manual/en/control-structures.goto.php 以你的智商相信也掌握不了第二门语言了,开头的漫画总看得懂什么意思吧。

golang 的对标语言就是 C 啊,作者之一就也 C 的作者。它要做 C 的事,有 goto 也是无可厚非啊。但没有哪个 golang 项目的 goto 会有你们项目的 goto 一半多吧,因为他们大多应该是智力正常的人(笑
nbhec2
2016-12-23 00:00:05 +08:00
@cuebyte 你的智力确实捉急,你驾驭不了 goto 如果让你做工艺估计已经事故连片了。懂为什么让你展示下不用 goto 写 AVR ARM 吗,第一让你知道你现在的工程和控制比不过在能力上是小儿科的事情,第二就是在这里 GOTO 是最重要的指令之一,第三就是叫你知道你自己有多蠢才能说出这几句话。记着你不过是个码农没碰过真东西,驱动生产的东西埋下一个 BUG 不仅仅是一行报错有可能是一次事故,而你只能写点三个臭皮匠类型的代码。
nbhec2
2016-12-23 00:12:19 +08:00
@cuebyte 我觉得。第一件事你应该认清你很菜,知识好窄,别人用 ARM AVR 51 拍打你就是知道你不会。第二件事你应该知道你很笨,为什么我列举了 PHP 是因为我们用 PHP 做成了中控而你呢?还搞不清漫画和加入 GOTO 之间的关系,你以为别人没看过文档。我们用的语言多了 C VBS 汇编 等现在 ARM 上还有人跑 NODE PHP 。第三件事,你逻辑是很不清晰的,所以你会被人带着绕弯走,而 OOP 的傻瓜式编程正合适你让你把错误出在自己的职责范围内,因为你胜任不了更高级的责任后果更大的工作。因为你的逻辑会出错,如果我的逻辑和你一个水平,我早就丢了饭碗了,因为做不了控制。宝贝儿,送你四个字,正视自己。
cuebyte
2016-12-23 00:25:09 +08:00
@nbhec2 你连普通的层次逻辑都没搞清。你先搞清楚你到底在做什么,是在喷结构化编程,还是在喷 java 低能,或者你是在喷没有 goto 的语言都是垃圾?另外你的标题能把二者混淆也已经表明了你那极为有限的智商。

另外我不是被带着走,我从来没吹嘘过 OOP ,也没说我是靠 java 吃饭的, java 难用是个人都知道,火起来也是时事使然。然而这都不是重点,我只是在这里劝你不要再丢人现眼了而已。大家对你的回复你都看到了,我很佩服你的信心。可能因为你是低能吧。

你的知识面狭窄,看的代码少,不明白可读性的重要性。代码是用来维护的,不是用来炫技的。 goto 能写的东西三大控制结构也能写。少几行代码而已不要觉得有多了不起,反而写出来的代码没有第二个人看得懂的话,才反映出你编码水平低下。

你没丢饭碗,大概是因为没人能维护一个低能写的充满 goto 面条代码吧。
fantastM
2016-12-23 00:36:01 +08:00
java 怎么是说也常年占据了高级语言排行数一数二,是多大的深仇大狠才能让你在茫茫的高级语言中只喷 java 。
iFlicker
2016-12-23 00:59:11 +08:00
哎呦我去 针对性都不一样啊 ,你倒是看看 java 的应用方向都是啥啊。
你这个完全是一个开跑车的抨击硬派越野啊 ,是 你铺装平路赛道跑的快稳得 1b
那人家越野穿越罗布泊你咋不开跑车跟着穿呢?
arakashic
2016-12-23 03:15:32 +08:00
@kkk330 然而这篇文章的内容就完全不准确, EWD 投稿时的标题就叫 A case against the goto statement ,根本没有”后来改标题“这回事。 Goto considered harmful 的锅是在 CACM 编辑 Niklaus Wirth 头上。
imcxy
2016-12-23 06:47:19 +08:00
两个字:管理~

养 10 只鸡
养 100 只鸡
养 100W 只鸡

能一样么
paulagent
2016-12-23 07:39:25 +08:00
你可以批评 Dijstra 关于 goto 的论断,但是把他批得一文不值就属于脑袋有病,你比图灵奖获得者牛逼。

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

https://tanronggui.xyz/t/329320

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

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

© 2021 V2EX