鱼C论坛

 找回密码
 立即注册
查看: 386|回复: 8

[吹水] 对java和python的理解

[复制链接]
发表于 2024-6-6 22:35:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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 的辉煌!

顺便说一句,热爱才是真正的动力,什么都一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-7 11:16:14 From FishC Mobile | 显示全部楼层
本帖最后由 liuhongrun2022 于 2024-6-7 11:25 编辑
Python 规范比较多,有些是强制的,例如缩进等等。大部分是非强制性的规则,PEP8 的规则更是 Python 自己都没做到类名首字母大写吧……int、str、bool,都是……


我觉得python的这些类名都是早期版本中遗留下来的,要是改了不兼容,并且类不是必须首字母大写,有不少第三方库的部分类名都是小写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-7 17:25:02 | 显示全部楼层
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 玩多了

而且“改了不兼容”情况不可能出现,改个名字而已,也不会冲突,因为不是关键字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-9 17:56:47 From FishC Mobile | 显示全部楼层
最近入坑Pycharm,50行代码,20个语法问题,……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-10 15:48:57 | 显示全部楼层
zhangchenyvn 发表于 2024-6-9 17:56
最近入坑Pycharm,50行代码,20个语法问题,……


PyCharm 可以设置的,但谁会去设置呢(估计真有)……

这个功能就是为了不让别人说 PyCharm 自定义的功能都没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-10 18:04:25 From FishC Mobile | 显示全部楼层
歌者文明清理员 发表于 2024-6-10 15:48
PyCharm 可以设置的,但谁会去设置呢(估计真有)……

这个功能就是为了不让别人说 PyCharm 自定义 ...


我还是觉得这个功能有些时候还是挺好用的(当他给出我auto reformat时候)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-21 19:20:07 | 显示全部楼层
歌者文明清理员 发表于 2024-6-7 17:25
我觉得不是,Python3 能够大改 print() 和 input() 就说明 Python 不怎么想兼容

Py2 和 Py3 语法相差 ...

我记得有一个库可以让py3兼容py2的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-22 10:17:17 | 显示全部楼层
liuhongrun2022 发表于 2024-8-21 19:20
我记得有一个库可以让py3兼容py2的情况

__future__?

点评

对  发表于 2024-8-22 10:19
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 20:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表