我从来没见过比面向对象更糟糕的编程范式和语言

2023-02-14 12:31:17 +08:00
 soclearn

来看 java 的 hello world

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

好一个蠢字了得。为了输出二个字,要写这么多样板和层次

不能像 shell 一样平坦化吗

而且以后,你还要学”继承,保护,ducking type ,mixed in, 参数类,原型链,面向 interface ,设计模式,并发加锁,信号量“ 而且到最后,你会被告知”py,cpp 的 oo 都是山寨,只有 smalltalk,ruby 那种 oo 才是纯的“

并且最最后,你会发现先它们一步的函数式语言无须厚重的数据抽象,也能获得更好的代码结构和范式,并且天然并发,自带 dsl

11402 次点击
所在节点    编程
135 条回复
lifeIsGame
2023-02-14 16:48:00 +08:00
曾经我也思考过这个问题,为什么 java 没有像 python 一样设计, 兼容 函数式和 OOP 这两种方式。不得其解。

刚才使用 Chatgpt 询问了下。以下为答案:

Java 是一种面向对象的编程语言,它的设计目的是提供一种方便的、可靠的、可重复使用的方法来开发应用程序。Java 的设计者们考虑到了函数式编程的特性,但他们最终决定将其设计成面向对象的语言,因为他们认为面向对象编程更适合满足日益增长的复杂应用程序的需求。

然而,随着函数式编程的发展,Java 也逐渐向函数式编程靠拢,特别是在 Java 8 版本中引入了一些函数式编程的特性,如 Lambda 表达式、Stream API 等。这些特性为 Java 程序员提供了更多的灵活性,并可以提高代码的可读性和可维护性。

总的来说,Java 设计为面向对象语言是为了满足当时的需求,但随着时间的推移,它也逐渐向函数式编程靠拢,以更好地支持复杂应用程序的开发。
libook
2023-02-14 16:53:31 +08:00
@minlearn #25 现在的语言其实都逐渐脱离学术性转而向功能性发展了,像是针对一些场景的痛点而专门推出的产品,致力于向提高协作效率、降低学习成本、降低心智负担、减少 bug 率等方向发展。所以不局限在一些理论体系之内。

反正作为工程师,根据需求正确选型也是一个重要的能力。
netabare
2023-02-14 16:54:55 +08:00
面向对象只是一个范式而已。你用 Haskell 也能写出 OOP 的代码。而且近年来 OOP 不是也在转向组合优于继承和 declarative code 之类的比较良好的做法嘛。

真要说糟糕的,大概还是那种「鸟是动物,所以会飞」之类的教学法和思维定势,但是 op 也提到了这本身并不是 OOP 的问题吧。OOP 也有不强调继承而强调消息传递的思路。

然后就是 Java 或者上古 C#那套屎山堆叠,但是这玩意哪怕没 OOP 也有 Cobol 和 Fortran 珠玉在前。反过来说,如果没有 OOP 做铺垫,有多少人能有机会碰到 FP 的概念呢?

我对 OOP 也有偏见,但是实话说很多东西并不是 OOP 的锅。
DOLLOR
2023-02-14 17:26:05 +08:00
java 的问题在于把 oo 当成了唯一解,任何需求都试图拿 oo 实现。
我见过有些 java 来的开发者去写其他编程语言的时候,明明一个 namespace+几个 function 就能解决的事情,他一定要写个 class 来包裹几个 method ,然后在每次调用的时候还得 new 一遍,再把参数喂给里面的 method 。
darksword21
2023-02-14 17:26:46 +08:00
不觉得很酷吗?后面忘了
playtomandjerry
2023-02-14 17:32:16 +08:00
你的想法就跟 php 是世界上最好的语言一样。
liprais
2023-02-14 17:32:43 +08:00
见的太少了
Dorian101
2023-02-14 17:33:53 +08:00
C# 10 中的一个完整 C# 程序:
Console.WriteLine("Hello World!");
ttwxdly
2023-02-14 17:42:07 +08:00
php 是世界上最好的语言?
urnoob
2023-02-14 17:51:45 +08:00
@LaTero 但凡计算机类毕业生 90%是 C 入门的不为过吧....开局就是非 oo 模式
chenzhao0121
2023-02-14 17:52:59 +08:00
你在 V2 这里喷 java ,不是捅了马蜂窝吗?这里用 java 的占 80%,等着找骂吧你。
urnoob
2023-02-14 17:55:23 +08:00
继承,保护,ducking type ,mixed in, 参数类,原型链,面向 interface ,设计模式
很多都只是概念 不用学,而且不是所有 OO 语言都要学这些吧 java 就没原型链这一说

并发加锁,信号量 和 oo 有关?
yannxia
2023-02-14 18:06:31 +08:00
Java 真不错···看起来还挺清爽的,真好理解呀
tool2d
2023-02-14 18:07:09 +08:00
@minlearn "从此,设计者,复用者,初学者,调试者,都要从分析那坨树形的层次开始。"

你提出了问题,但是没说怎么去解决问题?

我想象不出来,没有 interface 怎么去实现一个完整的接口。不用继承怎么复用父类子类里,类似度很高的代码。

函数编程就是一大堆函数,然而把一组函数封装起来后,那不就是一个对象嘛。
dqzcwxb
2023-02-14 18:15:14 +08:00
20 年前你说这个,那你很厉害
2023 年你说这个,那你还是很厉害
deorth
2023-02-14 18:16:08 +08:00
Linus Torvalds 表示很赞
adoal
2023-02-14 18:42:46 +08:00
一个墙外的社区已经审查严重到连万物得万字都要打成 W 了吗?
yummysakko
2023-02-14 19:53:47 +08:00
感觉……没有我们 BASIC 的 GOTO 厉害
levelworm
2023-02-14 19:59:25 +08:00
火前留名
levelworm
2023-02-14 20:00:09 +08:00
@doublezhang #58
你就当汇编语言写就行了,还有 POKE 和 PEEK 呢。

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

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

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

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

© 2021 V2EX