对java和python的理解
本帖最后由 歌者文明清理员 于 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 的辉煌!
顺便说一句,热爱才是真正的动力,什么都一样 本帖最后由 liuhongrun2022 于 2024-6-7 11:25 编辑
Python 规范比较多,有些是强制的,例如缩进等等。大部分是非强制性的规则,PEP8 的规则更是 Python 自己都没做到类名首字母大写吧……int、str、bool,都是……
我觉得python的这些类名都是早期版本中遗留下来的,要是改了不兼容,并且类不是必须首字母大写,有不少第三方库的部分类名都是小写的 liuhongrun2022 发表于 2024-6-7 11:16
我觉得python的这些类名都是早期版本中遗留下来的,要是改了不兼容,并且类不是必须首字母大写,有不少 ...
我觉得不是,Python3 能够大改 print() 和 input() 就说明 Python 不怎么想兼容
Py2 和 Py3 语法相差也很大,https://www.runoob.com/python/python-2x-3x.html,从删掉 long 这一点可以看出 Python 有能力修改基本类型,也不会导致什么特性Minecraft 玩多了
而且“改了不兼容”情况不可能出现,改个名字而已,也不会冲突,因为不是关键字 最近入坑Pycharm,50行代码,20个语法问题,…… zhangchenyvn 发表于 2024-6-9 17:56
最近入坑Pycharm,50行代码,20个语法问题,……
PyCharm 可以设置的,但谁会去设置呢(估计真有)……
这个功能就是为了不让别人说 PyCharm 自定义的功能都没有 歌者文明清理员 发表于 2024-6-10 15:48
PyCharm 可以设置的,但谁会去设置呢(估计真有)……
这个功能就是为了不让别人说 PyCharm 自定义 ...
我还是觉得这个功能有些时候还是挺好用的(当他给出我auto reformat时候) 歌者文明清理员 发表于 2024-6-7 17:25
我觉得不是,Python3 能够大改 print() 和 input() 就说明 Python 不怎么想兼容
Py2 和 Py3 语法相差 ...
我记得有一个库可以让py3兼容py2的情况 liuhongrun2022 发表于 2024-8-21 19:20
我记得有一个库可以让py3兼容py2的情况
__future__?
页:
[1]