nbhec2
V2EX  ›  编程

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

By nbhec2 at 2016 年 12 月 22 日 · 15596 次点击

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

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

124 条回复  •  2017-01-20 17:25:10 +08:00
第 1 页
共 2 页
12
fantastM
   1
fantastM  
   2016 年 12 月 22 日   ❤️ 1
面向对象思想其实不过是降低了行业的入门门槛罢了 -1 。
我觉得一个好用 OOP 设计,挺难的。。
canfoderiskii
   2
canfoderiskii  
   2016 年 12 月 22 日 via Android
goto 很好很必要
server
   3
server  
   2016 年 12 月 22 日
嵌入式开发 和 大型应用开发 是一个路子?为啥总是有人拿看似可以比较的东西引发论战。
igboy
   4
igboy  
   2016 年 12 月 22 日
只有适合不适合,没有能用不能用,记住没有万能的“银弹”。
nbhec2
   5
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@server 很多嵌入式应用已经足够复杂足够大型了,工艺极度复杂集成度极高的场景并不少
kmyzzy
   6
kmyzzy  
   2016 年 12 月 22 日 via Android   ❤️ 6
OOP 和 goto 有什么关系??
coderluan
   7
coderluan  
   2016 年 12 月 22 日
抛开使用场合谈论技术优劣是很蠢的。

讲 Java 时说一下支持 oop 我感觉很正常( goto 这个不太赞同),没人讲 Java 时会没句话都加一句 [我下面说的是 Java] 吧。楼主拿嵌入式的使用场景来反驳 Java 课上的言论,我感觉非常蛋疼,对方又没说什么 [Java 世界上最好的语言] 不是。
1OF7G
   8
1OF7G  
   2016 年 12 月 22 日 via iPhone
我也不太懂, OOP 听说最多的优点就是代码复用。可能嵌入式独立性比较高,不太需要代码重用?
软件上导入一个类就可以用了,要是像嵌入式一样代码紧密耦合,那就很难实现代码复用了
qwer1234asdf
   9
qwer1234asdf  
   2016 年 12 月 22 日
goto 也好,面向对象也好,甚至是封装继承、构造函数、析构函数,还有各种设计模式。。都可以在 linux 内核中找到相应的实现, goto 用的也很多。。。
不觉得高级语言的异常处理,甚至是 golang 的 defer ,和 goto 用来处理错误,有异曲同工之妙吗。。。
nbhec2
   10
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@1OF7G 函数和 GOTO 语句也是实现了代码复用。当然 GOTO 语句主要功能不是它,但是当你每调用一次函数那不正是复用了一段代码嘛~
QAPTEAWH
   11
QAPTEAWH  
   2016 年 12 月 22 日
不用 goto ,你可以 throw-catch 嘛
yolan
   12
yolan  
   2016 年 12 月 22 日   ❤️ 2
不了解嵌入式, 嵌入式也会上线了会不会没几天就来个新需求让你改么...
finian
   13
finian  
   2016 年 12 月 22 日   ❤️ 2
「这个所谓的过程式编程思想其实不过是降低了行业的入门门槛罢了,实际上对于任何一段程序,一切归为机器码。抽象画一个程序只是降低了记忆力门槛,因为你不需要记下来整套 CPU 指令,都封装好了。但是 CPU 指令明显要高效严谨的多。」
cuebyte
   14
cuebyte  
   2016 年 12 月 22 日
滥用 goto 的确会有问题,你们用得好也是你们的能耐。但是……你说"总之我身边的工程师每天都在写着这样严谨、美观、精致极富逻辑结晶的程序,调试控制实现着各种复杂的工艺。",完了还喷 Java 低效低质?

隔行如隔山,要学 OOP 你就好好学,不要看了点视频就出来喷,你连 OOP 是什么都不知道。
imn1
   15
imn1  
   2016 年 12 月 22 日
我自己是很清楚 goto 哪里的,但如果旁边的人问 goto 哪里,我会懵圈的
server
   16
server  
   2016 年 12 月 22 日
@nbhec2 这种论战毫无意义,技术工作不等于技术。
nbhec2
   17
nbhec2  
OP
   2016 年 12 月 22 日
@cuebyte 没学就看了一下,我们现在的结论是 JAVA 做中控复杂度高了必将引发事故,继续使用思考相对严谨的方法。
BOYPT
   18
BOYPT  
   2016 年 12 月 22 日
高级低级语言程序员隔行了(
monnand
   19
monnand  
   2016 年 12 月 22 日 via Android   ❤️ 1
不懂范畴论就谈编程语言好坏,这基本就是自己往坑里跳。
levn
   20
levn  
   2016 年 12 月 22 日   ❤️ 1
避免使用 goto 是从结构化编程开始的,而不是面向对象……
nbhec2
   21
nbhec2  
OP
   2016 年 12 月 22 日
@BOYPT 我还是会点高级语言 C VBS PHP GOLANG (在了解)
21grams
   22
21grams  
   2016 年 12 月 22 日 via Android
关公战秦琼
cuebyte
   23
cuebyte  
   2016 年 12 月 22 日   ❤️ 2
@nbhec2 不要滥用 goto 是 Dijkstra 在 1968 年向 ACM 提出的。当时已经证明,任何程序可以通过顺序、选择分支和循环三种方式组成,也就是,只需要 if...else 和 while 就是足够的。提倡使用这三种方式进行结构化编程,是提高程序质量的一种方法。 Dijkstra 的详细理由,大意是提高程序质量、明晰程序流程。其他各种细节的你随便谷歌就出来了。

然而楼主超时空甩锅到了 OOP 头上。( OOP: "我也是日了狗了。")

另外我不是搞嵌入式的, J2ME 也已经废弃好久了。但如果 Java 是跑在服务器上的话……所谓的“必将引发事故”,可能是你们对 Java 不了解导致的吧?或者你能说出 Java 的硬伤么?
nbhec2
   24
nbhec2  
OP
   2016 年 12 月 22 日
@cuebyte Dijkstra 已经死了。
引发事故的隐患过多是我们共同的结论,因为我们要求高度的耦合才能在调试中发现每一个事故点。例如假设一个化工厂,你工艺中一个出品环节,出品没完成料先进来了。。。
murmur
   25
murmur  
   2016 年 12 月 22 日
goto 用的最多的是在循环跳出里。。
Cbdy
   26
Cbdy  
   2016 年 12 月 22 日
OOP 思想在很多应用场景挺先进的。
goto 循环在绝大多数场景最好不要用。

另外,这和 goto 语句有关系吗?你写一个 goto 循环、再写一个 while 循环。然后 cc -s 一下,看看编译出来的
as 是不是一样的。
cuebyte
   27
cuebyte  
   2016 年 12 月 22 日
@nbhec2 没看懂你说什么。不滥用 goto 是广大共识,依然建议你去谷歌。

既然如此,你应该喷“低耦合”这个概念, Java 也能写出高耦合度的代码。

唉,不想浪费时间了。
est
   28
est  
   2016 年 12 月 22 日   ❤️ 1
此处应插入 <老汉复制粘贴就是干.jpg>
easing
   29
easing  
   2016 年 12 月 22 日
啥情况? goto 的对手不应该是结构化编程么,也就是 C 大行其道的时候讨论的么?怎么就说到 Java 了。。话说,到目前为止,虽然略显啰嗦,但各方综合效率最高的我认为依然是 java 。 LZ 你是不是喷错地方了。
至于该不该用 Goto ,这个 @cuebyte 已经说得很清楚了,其实 goto 的功能被 if 和 while 替换了,也就是结构化编程作为图灵完备的三个基本元素:顺序执行、条件判断、循环中的后两个是 Goto 衍生出来,但对于程序员来说,写起来更有条理性,更容易阅读。
LZ 你非要认为你们用 Goto 写的程序更美更好阅读更好调试,那我也无话可说,只能表示敬佩。
nbhec2
   30
nbhec2  
OP
   2016 年 12 月 22 日
@cuebyte 这应该是局部共识,那个胡言乱语者还活着的时候就有人反驳他。不要把别人代表了, GOTO 是很传统的用法, LINUX 是 C 写的内核里也很多很多 GOTO ,而且再底层些的语言更是只有 GOTO ( JMP/SETJMP )能用。更何谈所谓“滥用”这种感情词汇之讲,只有驾驭的了常用或驾驭的不了不常用只讲。
levn
   31
levn  
   2016 年 12 月 22 日
@nbhec2 你得去找那个讲视频的人撕…… 没必要把吃瓜群众当成包青天
h4x3rotab
   32
h4x3rotab  
   2016 年 12 月 22 日 via iPhone
233 越往后看越觉得 lz 在高级黑
ovear
   33
ovear  
   2016 年 12 月 22 日 via Android
@nbhec2 银行好像没有出事也。。银行是 Java 用的较多的地方
veelog
   34
veelog  
   2016 年 12 月 22 日 via Android
goto 很好用,但是不好维护。维护的人多了他就乱了。
000wangxinyu000
   35
000wangxinyu000  
   2016 年 12 月 22 日
@nbhec2 goto 是世界上最好的指令
gouchaoer
   36
gouchaoer  
   2016 年 12 月 22 日 via Android
php 为啥加入了 goto ,因为好用
hyuwang
   37
hyuwang  
   2016 年 12 月 22 日
你把嵌入式开发和软件工程的问题搞混了
写 arm 有人不让你用 goto 么?

隔行隔山,吐槽也要看背景
如 @cuebyte 所言, Dijkstra 向 ACM 提出不要使用 goto
这个问题的主要背景是 Software crisis https://en.wikipedia.org/wiki/Software_crisis
学过软件工程的话应该都有了解过

具体细节请自行搜索,一句话总结一下,禁用 goto 是为了代码的可维护性
OOP 高度抽象的思想背后,是大堆工程思想的结晶也是历史的结果,也为大型软件工程创下了基础
kkk330
   38
kkk330  
   2016 年 12 月 22 日
kkzxak47
   39
kkzxak47  
   2016 年 12 月 22 日 via Android
其实一个组织,比如政府啊公司啊,里面根本没必要搞那么多小机构,这个局啊那个部的,不如所有人都统一指挥,要做什么事就统一分配人手去做,高效得多,根本不会有部门之间扯皮的事情,也不会有一个部门忙死另一个部门闲死。
10 个人这样搞, 10000 个人也是一样的,只要管理层严谨、精细的调配就好了嘛,楼主你说是不是啊。
popesaga
   40
popesaga  
   2016 年 12 月 22 日
隔行如隔山,即使大家都是程序员……楼上很多反驳楼主的引经据典说的都很不错了……楼主的首要问题是把两件驴头不对马嘴的事情搞成对立。 GOTO 和 OOP 。这让人不管怎么解释都像是在叫醒一个装睡的,后面的反驳基本上就是死缠烂打了。楼主,有个问题想问你,你是 CS 出身吗?是 CS 出身的即使不敢说学过的计算机科学知识都是金科玉律,也不会随随便便把一个著名科学家的论断直接当胡言乱语一棍子打死。后面很多讨论的范畴在软件工程这门学科里。在你所处的行业里高耦合有更高的可用性,可靠性可能是不错。但是没有什么技术是银弹是可以包治百病的。 Java 的流行也不仅仅是说面向对象就能解决的。活生生地扭曲 Java 在很多领域也可以写出高可用高可靠的代码很难吗?至于楼主随手提的其他语言, C VBS PHP GOLANG 。 C 也可以面向对象开发楼主知道吗?不过估计楼主看的 Java 教学视频质量也不佳,有点像一知半解地照本宣科。其实楼主你在你的行业里干的挺好的可以了。如果真想开拓开拓视野,还是谦虚地多学点背景知识吧。后面的人也不用举例什么 Java 也很好用怎么怎么的了。
nbhec2
   41
nbhec2  
OP
   2016 年 12 月 22 日
@popesaga 我电气工程及其自动化专业科班出身的,我们也叫软件工程,中控都是拿 C 写的现在也用 PHP , C 是什么我还是很清晰的, “著名科学家”的学生告诉我 C 也可以面向对象,劳您大驾请让我开开眼 C 语言是怎么面向对象的。
ikaros
   42
ikaros  
   2016 年 12 月 22 日   ❤️ 4
Thoxvi
   43
Thoxvi  
   2016 年 12 月 22 日 via Android
@nbhec2 换个角度说 jvm 就是 c 写的,那 Java 可以面相对象, Java 字节码在 jvm 中被解释
nbhec2
   44
nbhec2  
OP
   2016 年 12 月 22 日
@Thoxvi 这么解释就有些强词夺理了,没有往顶层比的只有往底层比。照着么说 C 还能函数式再往上说还能面向并发云云种种。难道那往回说要说成开关柜也是面向 XX 的吗。机器只会逐条指令顺序执行, C 是一个经典的面向过程的开发语言这是基本常识吧。
Em5O7B1JGfjQnBry
   45
Em5O7B1JGfjQnBry  
   2016 年 12 月 22 日 via Android
楼上说 c 可以写面向对象是指可以通过结构体和指针函数等来实现和面向对象一样的实现,面向对象更多的是一种思想。再说到 goto , goto 用不好本来就会难以维护,就像指针,我一个 C++狗老喜欢用指针了,怎么爽怎么来,可是很多现代语言通过 gc 来自动管理指针比如 Python ,那也是一种进步,不是每个人都要熟悉计算机的每个底层结构来写代码,你不是计算机专业的,很多东西本来就存在观念差异,但是你思考一下就会发现,计算机的发展史往往都会往更高阶的抽象上走的
arakashic
   46
arakashic  
   2016 年 12 月 22 日
@nbhec2 goto 也甩锅给 OOP 也是醉了。 oto 是一把双刃剑,从代码的可维护性角度来讲,的确不推荐(避免滥用)。不过工程实践里面, goto 用得还是很挺多的(遵守一定的规则的话)。至于有没有 goto 语句,只是一个语言设计上的选择而已,和 OOP 毛的关系?没有 goto 语句的语言多了去了, python 也没有啊, python 还没有 do-while 呢! C 也是可以写面向对象的,不仅有这方面的书籍, GObject 和 GTK 就是最典型的 C/OOP 。以后吐槽之前还是自己先搞搞清楚的好。
mimzy
   47
mimzy  
   2016 年 12 月 22 日 via Android
「胡言乱语者」…尔曹身与名俱灭,不废江河万古流…
huiyadanli
   48
huiyadanli  
   2016 年 12 月 22 日
我们懂你,而你不懂我们系列。。。
ipwx
   49
ipwx  
   2016 年 12 月 22 日
非嵌入式领域,人工成本比硬件成本高得多。
northisland
   50
northisland  
   2016 年 12 月 22 日
上面说的很明白了,关键词是结构化编程,不推荐用 GOTO
SuperMild
   51
SuperMild  
   2016 年 12 月 22 日 via iPad
你写是写得爽了,只管马上实现当前功能,但是维护呢,换个人来维护呢, OOP 是为了容易维护吧。 goto 也是,要改点什么东西, goto 是牵一发而动全身的,必须在脑里带着个警钟“改完了记得看看 goto 有没有影响”,累不累?
she3ehe
   52
she3ehe  
   2016 年 12 月 22 日 via Android
都支持异常了,要 goto 何用? 跟 oop 有啥关系
daysv
   53
daysv  
   2016 年 12 月 22 日
喜欢函数式
popesaga
   54
popesaga  
   2016 年 12 月 22 日
真的是我们懂你,而你不懂我们系列啊~~~
nbhec2
   55
nbhec2  
OP
   2016 年 12 月 22 日
@daysv 函数式是我的大爱,只是目前环境中用到的比较少。
nbhec2
   56
nbhec2  
OP
   2016 年 12 月 22 日
@popesaga 准确的说是你以为你懂我们的设计模式,而我们却觉得你的设计模式很糟糕(以 JAVA 为代表)
cuebyte
   57
cuebyte  
   2016 年 12 月 22 日   ❤️ 1
@easing
@hyuwang
@svenFeng
@arakashic
@northisland
@SuperMild
@kkzxak47
@mimzy
大家不要跟楼主废话了,只是浪费自己时间而已。让这帖子沉了吧,免得浪费更多人时间。
时至今日居然还有人能为 goto 摇旗呐喊,我们只能默默说一句,“关我 P 事”了。
nbhec2
   58
nbhec2  
OP
   2016 年 12 月 22 日
@cuebyte “时至今日居然还有人能为 goto 摇旗呐喊”只能代表你的无知,一你不知道他用到哪,第二你不会使用它。鸟哥也在为 GOTO 正名 http://weibo.com/ttarticle/p/show?id=2309403969652538662553#_0 ,著名编程语言 PHP 5.3 加入了 goto 年轻的 GOLANG 也设计了 GOTO 语句,都没你水平高。水平低就不要 AT 一圈人来显得自己好像不菜。
MartinLv
   59
MartinLv  
   2016 年 12 月 22 日
goto 当然有它的适用场景,但楼主用“允许从一个函数跳到另一个函数”作为挺 goto 的理由,不能认同。
无论什么领域,好的程序应该是模块化和正交化的的。模块可以是一个函数,也可以由很多数据结构和函数组成。模块应该尽量减少和其他模块的耦合和相互影响,只对外暴露必要的接口,一个模块内部的改动不应该影响其他模块的行为。
如果大量使用 goto 从一个函数跳到另一个函数,那修改一个函数而不影响其他函数的逻辑就很难做到,程序员必须知道有哪些函数可能会跳到这个函数内部,必须了解所有这些函数的逻辑才能维护这个函数。我不认为这是好的设计。
楼主说抽象化一个程序只是降低了记忆力门槛,没错,这正是抽象的好处,程序员只要保证当前模块遵守既定的接口,可以专注于当前模块的逻辑,而不用考虑对其他模块的影响,这样才能高效地维护程序。
当然,有的人天纵奇才,可以把整个程序的逻辑都装在脑子里,举重若轻,随处 goto 。但你让后来维护的人怎么接手呢?好的程序应该易读,易维护。不觉得 goto 用多了,尤其是跨函数的 goto 对程序可读性有什么好处。
panda1001
   60
panda1001  
   2016 年 12 月 22 日 via Android
@cuebyte
谁说非要 if while , goto+malloc 就足够了,详见轮子哥的回答
https://www.zhihu.com/question/20125963
MartinLv
   61
MartinLv  
   2016 年 12 月 22 日
面向对象编程语言相对于过程式语言的好处之一,就是为抽象增加了更多的语法支持,程序员对模块的抽象更容易了。如果楼主对抽象不屑一顾,那看不上面向对象语言也很正常。所谓降低行业入门门槛,以前程序员需要记住每条指令的机器码才能编程,汇编语言也是降低了入门门槛。看来楼主是个怀旧主义者啊。
quxiangxuanqxx
   62
quxiangxuanqxx  
   2016 年 12 月 22 日
@nbhec2 跟科班出生无关,面向对象是思想,它带来的收益是推动历史巨轮般的操作。 java 能实现, c 同样能实现面向对象。很多高级语言基于 c 实现的。只是说明,这个思想,你并不是很了解。

大牛也好,我这样的小喽喽也好,从楼主的话中,很是不屑我们这些菜鸟。

也许我们不是决定历史的发展方向,但是我们却在默默地推动它。

那些大将非常厉害,我们这些小士兵确实真正的拼杀在战场上。

计算机发展到现在,有多少思想就是能让更多的人参与进来。但是楼主却在想通过某种方式制造技术壁垒,这是我们盛行的开源精神吗? github 上哪些项目是不是都没有存在的必要了?那么多算法是不是也没有必要了?
quxiangxuanqxx
   63
quxiangxuanqxx  
   2016 年 12 月 22 日
@nbhec2 还有鸟哥的正面你认真看了吗

别人的意思是希望大家能弄清楚 goto 什么时候用,能有什么用,而不是单方面诋毁它。

而你直接拿到这篇文章的标题就当论据了。。。。。
irgil
   64
irgil  
   2016 年 12 月 22 日
goto 和 oop 有什么关系。。。。。。。
padeoe
   65
padeoe  
   2016 年 12 月 22 日
楼主根本不懂 OOP 吧。“函数、过程明显要高效严谨的多”,“ GOTO 是一个高效的语句”,隐含的意思是面向对象不严谨,效率低?
nbhec2
   66
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@quxiangxuanqxx 我文章结尾不是写了么,我在抨击 JAVA 这种没有 GOTO 纯 OOP 的低能的设计。
nbhec2
   67
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@MartinLv 跨函数 GOTO 的好处就是我可以合并分支函数到不同的主干函数当中去。举例我有一组泵 6 用 2 备 我可以只建立 2 个干函数就行了。
quxiangxuanqxx
   68
quxiangxuanqxx  
   2016 年 12 月 22 日 via Android
@nbhec2 所以说你根本不理解 OOP 这种思想, OOP 和 goto 就不是包含和被包含的关系。用了 OOP 思想,根本就不会考虑函数的多少,稍微大一点的项目,就有上百个函数,它们都有信息交流。用 goto ?能保证业务逻辑不出错吗?
没有 goto 就低效吗??大数据 java 不还是做的很好,效率也很高?
如果你的衡量标准只有快,我只能说软件工程最基本的东西没学好,这么重要的鲁棒性不记得吗??
cuebyte
   69
cuebyte  
   2016 年 12 月 22 日
@nbhec2 看了一天了我忍不住了,就冒昧代表大家一下吧——我们一直在抨击你低能的大脑。
cuebyte
   70
cuebyte  
   2016 年 12 月 22 日
@nbhec2 另外也忍不住想说。你所谓的“严谨、美观、精致极富逻辑结晶的程序,调试控制实现着各种复杂的工艺”,但却充斥着 goto 的、高耦合的代码,也许实际上是一坨意(S)大(H)利(I)面(T)条呢?

另外请别拿 linux kernel 说事,你们的代码可能根本不配和它们相提并论。
whitefable
   71
whitefable  
   2016 年 12 月 22 日
看了这么多我都忍不住了你还是电气科班出身的...然后都是充斥着高耦合的代码直接在高耦合的强度下进行调试??!!!
学的电气没学过控制理论?解耦设计不应该是最基本的思想之一么?你学了用了这么久就不知道工业控制 /偏底层的编程和软件行业的差别多大么?看着上面各种我都快要笑死了~~~黑人问号.jpg
nbhec2
   72
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@cuebyte 你的大脑很低能到是真的,好像没人让你代表你自作多情了。遇事不想为什么只会引用老师的话证明你和教书匠一样傻,所以终究你只是码农。而我们电气工程师既负责实现工艺的架构又负责软件的编写直到整套流程运转起来十几年无事故不知道要比你强多少。估计从你的言语看,这种工程交给你,第一天就该有东西炸了。所以你只能用最笨的 OOP 躲开灵活的 GOTO 去写一坨一坨臃肿底效的 JAVA 那样的程序。
nbhec2
   73
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@whitefable 可是实际和你的理论恰好相反,给你一个案例自己去看,山武控制是日本著名的能源控制厂,很多复杂站都是他们的系统,你看下他的工程样例的耦合度。另外过度解耦只会把自己的市场拱手让人。
cuebyte
   74
cuebyte  
   2016 年 12 月 22 日   ❤️ 1
@nbhec2 goto 就是会降低可读性。你们的代码到处都是 goto ,只能像狗屁不通的文章一样,又臭又长。 OOP 这么简单的东西还要看国内视频学,还学不会,你的水准大概也就那样了,和你厂的代码很般配。
whitefable
   75
whitefable  
   2016 年 12 月 22 日
@nbhec2 你是大概未明白什么意思是吧???在设计中对对象进行解耦然后去设计控制...和最终的工程样例的耦合度真的是一回事?你能在高耦合情况下调试是你本事.....或者不如你试试对交流电机不要解耦然后去控制试试??
而且呢我认为 OOP 只是一种大概是封装 /抽象的思想?~.....硬是要扯的话那抽象到极端的数学都不好咯~还不如你直接实打实的直接去接触实物然后控制好咯?
nbhec2
   76
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@cuebyte 秀无知? 我们不是不会 OOP 只是看下 JAVA 发现它只支持 OOP ,但是我们很反感 OOP 这种设计。另外谁说软件必须要 OOP ,我们的代码质量不亚于 LINUX 内核,我们做 ARM AVR ,那麻烦你狗屁通,请让我见识见识没有 GOTO(JMP)做 ARM 做 AVR 的神工程师。来亮个相吧
cuebyte
   77
cuebyte  
   2016 年 12 月 22 日
@nbhec2 上面那么多回复都说了 goto 是不要“滥用”,并没有禁止。你阅读能力可能存在严重问题,应该是低能导致的。
nbhec2
   78
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@whitefable 调试时当然是分段,变频器是变频器工频机是工频机表是表阀是阀 X 是 X ,慢慢的组合的过程也是一个复杂化的过程。我的意思是很多控制厂都会克意的去提高他们的耦合度然后交给客户,也就是实际跑的程序是极度耦合的。
nbhec2
   79
nbhec2  
OP
   2016 年 12 月 22 日 via Android
@cuebyte 别人的言论我都看的懂不用你操心,我只是觉得你非常适合做 OOP 因为低能脑容量不够记忆力不足。睁大眼睛看下本文尾指名点姓喷了 JAVA ,你来让我见识下 JAVA 里没禁用的 GOTO 。
Thoxvi
   80
Thoxvi  
   2016 年 12 月 22 日 via Android
@nbhec2

嘛楼主你想争的话我就没话说了,
思想这种东西还不是仁者见仁智者见智。

讲道理到最后还不是机器码执行,那机器码就是瞎几把面相咯?

思想还不就是方便解决问题,脱离实际讲什么 goto 讲什么面向对象不是瞎几把扯吗

╮(‵▽′)╭
sodatea
   81
sodatea  
   2016 年 12 月 22 日   ❤️ 1
C 语言可以 OO ,有本知名的书叫 Object-oriented Programming in ANSI-C
https://www.cs.rit.edu/~ats/books/ooc.pdf
whitefable
   82
whitefable  
   2016 年 12 月 22 日 via Android
@nbhec2 那不就是么?你分成一个个阶段来不正是用了 OOP 的思想么?~而且上面我觉得不少人说清楚了 GOTO 只是不应该滥用而已~而且这两个都不是在同一层次对比的东西……你硬要扯一起那就是都用 OOP 来设计然后区别于你们最后转换成 GOTO 类型他们没有也并不需要如此而已嘛………明显大家觉得你问题大在于你都没有选择合理的东西来对比………
zonghua
   83
zonghua  
   2016 年 12 月 22 日
一大堆人用 MyBatis
SoloCompany
   84
SoloCompany  
   2016 年 12 月 22 日
你要类比也应该拿 switch / case / if / else 来类比啊, goto 躺枪
htfy96
   85
htfy96  
   2016 年 12 月 22 日
lightening
   86
lightening  
   2016 年 12 月 22 日
不知道楼主你写的程序大概是多少行的量级?

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

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

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

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

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

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

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

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

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

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

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

能一样么
paulagent
   100
paulagent  
   2016 年 12 月 23 日
你可以批评 Dijstra 关于 goto 的论断,但是把他批得一文不值就属于脑袋有病,你比图灵奖获得者牛逼。
第 1 页
共 2 页
12
© 2026 V2EX · 185ms · 3.9.8.5