|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 歌者文明清理员 于 2024-6-10 15:48 编辑
起因:
- 前几个月去杭州某个文化中心得到了一本关于 Java 编程的书(先不说啥书)。
- 最近研究 Minecraft 模组开发,学到了很多 Java 编程知识,和编程习惯、特点。
文中可能提到其他编程语言,并非重点,只是作对比而已。
好啦,下面是正文:
1. 语法方面
一个东西学多了,总会对这个东西里很多东西产生一种“直觉”。我也说不准吧,没啥语言能描述这种感觉。
比如 Python 的 int、str、bool,给人一种“软”的感觉;而 Java 的类型,给人一种“硬”的感觉。我觉得可能来源于实际吧,Python 的类和函数也是一种变量(我是这么理解的),但 Java 就不是,那些还违反了 Java 的“全都是类”准则。
2. 规范方面
Python 规范比较多,有些是强制的,例如缩进等等。大部分是非强制性的规则,PEP8 的规则更是 Python 自己都没做到类名首字母大写吧……int、str、bool,都是……我用 PyCharm 的也慢慢接受了,感觉这样代码还蛮好看的仅此而已,自己的 Shit Mountain 还是看不懂。
Java 就宽松一些,除了末尾必须有“;”,文件名和 public class 必须一致,其他到也没啥。
3. 编程思想
C、C++ 给人一种“生硬”的感觉,类(结构体)其实也不算有多好用(个人感受,感觉 C、C++ 很枯燥,没有了对象和类的活泼)
Java 都是类,这一点就很好,定义也比较简单,尤其是运算速度快,这一点很棒。相关逻辑自己写的感觉也很棒。比如 java.util.Scanner,输入是类,System 也是类。给人一种一目了然,错综复杂,但有趣。另外很多东西都是用 xxx.xxx.xxx 表示的,给人一种……虽然我说不上来,但是感受确实真真实实存在的
Python 则两者兼有,有更多实用的方法,更简洁,对函数的支持很好,但牺牲了运算速度,类(与 Java 相比)也很弱。例如私有属性,Java 就很全面,public、private 很分明。Python 的自由有些时候却成了故障,例如类定义的 static 什么的……我们经常无意间改掉类的变量。如果 Python 有 C、C++ 的性能和速度,有 Java 的类方法和定义(当然前提是可以省略,默认 public,没有 static)
btw,文章写完发现有个东西叫 Jython……前一阵子想加快 Python 运行速度研究了 Cython,但发现一如既往地对 C 产生了嫌弃,虽然我知道不该有
4. 模块和包的定义
Java 中,package xxx.xxx 的写法在大项目开发里非常有用!这样可以快速标明使用的包的路径,知道程序目前的“地位”。
(当然,路径与实际不符可能会报错,我觉得 Java 文件名必须和 public class 相同的原因是 Java 非常乐于使用“模块化”的思想,让程序员专心写一部分的代码,也正是 Minecraft 的代码复杂,却又能让代码阅读者略懂一二的原因,路径肯定也要求一样,不然这个程序就没必要放在这个位置了,会大大破坏程序结构)
Python 里就没有这种写法。我觉得也还行吧。
Java 中,import xxx.xxx 也正能体现 Java 模块化的思想。Python 中 sys.path 这类写法大大破坏了程序的规则性,Python 这么“开放”也未必是优点。(方便新手使用,但对 Python 熟练者就相当于是累赘)
5. Minecraft 代码的研究
Minecraft 将一切都写成了类。对于物品、方块的概念定义(Item、ItemStack、use、useOnBlock、useOnEntity、Block、BlockState)非常简洁明了,或者说易于使用,这正是类(和方法)的好处。
但在 Python 中,这些不怎么可能实现,Python 的性能允许不了这么多类和方法的定义和调用。况且 Minecraft 一秒钟有 20 个 tick,再加上那么多随机刻,给 Python 的时间估计得多的很。(听说 Mojo 可以,最近打算研究下)
Minecraft 里的世界生成和实体(嘶~玩 Minecraft 的都懂)写的就非常抽象,我觉得这不怎么好。要添加很多复杂的东西和地方,不过这也能看出 Mojang 花了很多心血写世界生成,也正是这么多代码,造就了 Minecraft 的辉煌。
我前几天写了个 0.000001% 的 Python MC,排查发现逻辑完全正确,但 Python 受不了那么多类(可能有几万个实例了吧,每个实例又有好几个属性也是另外一个类的)。
这正是 Java 的辉煌!
写这篇文章的目的不仅仅是分享自己对编程的心得,更是想打破论坛的沉寂,让鱼 C 重回 2020 的辉煌!
|
|