V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nbhec2
V2EX  ›  编程

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

  •  
  •   nbhec2 · 2016-12-22 09:52:55 +08:00 · 13216 次点击
    这是一个创建于 2929 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    你的这种理论很常见,“这题我根本不用微积分也能做”,“这个木匠活我不用切割机,只用一把刀就能做了”。这种思想的本质都是觉得使用先进的工具是本人能力不足的表现。是的,先进的工具使得能力较差的人也能完成一件事情;但同时也意味着能力高超的人利用先进的工具能干成一件更复杂、更有难度的事情或者干同一件事情花费的时间较短。现实中没有人关心你是不是很聪明能记住整个程序的逻辑。人们只关心你能不能快速、可靠的完成任务。所以 OOP 成为了主流。
    CruelMoon
        87
    CruelMoon  
       2016-12-22 23:08:43 +08:00
    偶觉得语言简直是拉低了文明人的入门门槛,因为你不需要记忆所有概念,只需要记住若干个词,拿来水金币就好了。
    moqimoqide
        88
    moqimoqide  
       2016-12-22 23:13:47 +08:00
    这难道不是市场的选择吗? :)
    cuebyte
        89
    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
        90
    nbhec2  
    OP
       2016-12-22 23:35:35 +08:00 via Android
    @cuebyte 爱斯逼,那来解释解释 PHP GOLANG 那么先进的语言后补 GOTO 和设计 GOTO 是什么目的呢。是不是打你们这些爱撕逼脸啊。一个丑陋臃肿不堪,一个已经差不多入土了,一个曾经连 switch 都没有的克意简化的至简语言来对比。爱撕逼再来给我展示下不用 GOTO(JMP)做 ARM AVR 我来开开眼
    yura93
        91
    yura93  
       2016-12-22 23:35:48 +08:00
    不要撕,好好用它赚钱就完了。技术的最终目的是支撑市场,市场产生价值反作用于技术。什么时候用什么就完了呗,有时间多陪陪家人。
    cuebyte
        92
    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
        93
    nbhec2  
    OP
       2016-12-23 00:00:05 +08:00 via Android
    @cuebyte 你的智力确实捉急,你驾驭不了 goto 如果让你做工艺估计已经事故连片了。懂为什么让你展示下不用 goto 写 AVR ARM 吗,第一让你知道你现在的工程和控制比不过在能力上是小儿科的事情,第二就是在这里 GOTO 是最重要的指令之一,第三就是叫你知道你自己有多蠢才能说出这几句话。记着你不过是个码农没碰过真东西,驱动生产的东西埋下一个 BUG 不仅仅是一行报错有可能是一次事故,而你只能写点三个臭皮匠类型的代码。
    nbhec2
        94
    nbhec2  
    OP
       2016-12-23 00:12:19 +08:00 via Android
    @cuebyte 我觉得。第一件事你应该认清你很菜,知识好窄,别人用 ARM AVR 51 拍打你就是知道你不会。第二件事你应该知道你很笨,为什么我列举了 PHP 是因为我们用 PHP 做成了中控而你呢?还搞不清漫画和加入 GOTO 之间的关系,你以为别人没看过文档。我们用的语言多了 C VBS 汇编 等现在 ARM 上还有人跑 NODE PHP 。第三件事,你逻辑是很不清晰的,所以你会被人带着绕弯走,而 OOP 的傻瓜式编程正合适你让你把错误出在自己的职责范围内,因为你胜任不了更高级的责任后果更大的工作。因为你的逻辑会出错,如果我的逻辑和你一个水平,我早就丢了饭碗了,因为做不了控制。宝贝儿,送你四个字,正视自己。
    cuebyte
        95
    cuebyte  
       2016-12-23 00:25:09 +08:00   ❤️ 1
    @nbhec2 你连普通的层次逻辑都没搞清。你先搞清楚你到底在做什么,是在喷结构化编程,还是在喷 java 低能,或者你是在喷没有 goto 的语言都是垃圾?另外你的标题能把二者混淆也已经表明了你那极为有限的智商。

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

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

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

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

    能一样么
    paulagent
        100
    paulagent  
       2016-12-23 07:39:25 +08:00
    你可以批评 Dijstra 关于 goto 的论断,但是把他批得一文不值就属于脑袋有病,你比图灵奖获得者牛逼。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2564 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:53 · PVG 11:53 · LAX 19:53 · JFK 22:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.