现在极其厌恶弱类型语言,弱类型就不适合中国的职场环境

257 天前
Makabaka01  Makabaka01

别的团队交接过来一个十几万行的 Python 项目,要重构成 Java ,我真的吐了,一点文档也没有。

Python 里面大量的访问各种 RPC 接口,关键是特别喜欢自己转换 rpc 返回的结构,还非要用字典去自定义结构!

现在好了,到处都是字典 + 字符串取值,这个字符串 key 还是尼玛自己定义的,和 idl 都对不上,得自己去代码里面到处翻找,看看到底是哪个接口返回的。

最离谱的是命名还会骗人,弱类型就算了,好歹命名漂亮点吧。"xxx_list" 是个字符串我真的服了,甚至就连 "user" 也能是个字符串……


现在国内的现状就是领导疯狂催,程序员疲于奔命,谁天天给你写文档,代码迭代几次连自己都不认得了,还搞弱类型,万一熟悉项目的人走了后面的人根本没办法看,都都读不懂。再加上英语水平有限,命名真的是一塌糊涂,更加重了理解问题。

15608 次点击
所在节点   程序员  程序员
119 条回复
hhacker
hhacker
257 天前
不讨厌的只是屎山,不是弱类型
estk
estk
257 天前
中国人老板:My grandma run faster than your code!
qcbf111
qcbf111
257 天前
ts 火不是没有道理得,当初我们用 lua 也强制必须要规范书写 type annotation.
Makabaka01
Makabaka01
257 天前
@hhacker 国内环境下,弱类型 == 不可阅读的屎山……强类型还属于可阅读的屎山,能接受一点
lithiumii
lithiumii
257 天前
可能别的团队一个月整出了能挣钱的活,现在用户多到需要重构了。但凡一开始就用 java 写,现在还没上线呢(我瞎说的
Makabaka01
Makabaka01
257 天前
@lithiumii 哎,现在大厂确实都这样,代码随便搞,能跑就行,吹一波后面反正晋升走人了,维护代码又不是自己,然后后面来的人继续这么想,继续屎山上拉屎。
walkeronway
walkeronway
257 天前
我写 python 就特喜欢写类型注解,看着特舒服,写了之后 pycharm 的语法提示也好用
mwuxlcanrh
mwuxlcanrh
257 天前
上线收益拿到手拍拍屁股挖新的坑,留下的老坑里面都是屎,接盘的有福了
sagaxu
sagaxu
257 天前
php 代码里面经常有 $item['aa']['bb']['cc']['dd'] 甚至 5 级以上的数组,运行时产生一大堆 undefined index xxx ,但产品行为却符合预期,就算是原作者维护,可能过几个月就搞不清有哪些字段了
kenvix
kenvix
257 天前
你要不先区分一下弱类型和动态类型...
ciderzero
ciderzero
257 天前
Python 是强类型动态语言吧,虽然我觉得写着也不舒服。
akira
akira
257 天前
都一样, 赶工期出来的东西,用啥写 都是屎山。。。
Pzqqt
Pzqqt
257 天前
以下内容摘自《流畅的 Python 》第 11 章“接口:从协议到抽象基类”的延伸阅读

Python 是弱类型语言吗

由于缺少统一的术语,讨论语言类型方面的话题时有时会让人不明其意。有些人(例如扩展阅读中提到的 Bill Venners 对 Guido 的访谈)说 Python 是弱类型语言,把 Python 与 JavaScript 和 PHP 归为一类。讨论类型时,最好考虑两条不同的坐标线。

强类型和弱类型

如果一门语言很少隐式转换类型,说明它是强类型语言;如果经常这么做,说明它是弱类型语言。Java 、C++ 和 Python 是强类型语言。PHP 、JavaScript 和 Perl 是弱类型语言。

静态类型和动态类型

在编译时检查类型的语言是静态类型语言,在运行时检查类型的语言是动态类型语言。静态类型需要声明类型(有些现代语言使用类型推导避免部分类型声明)。Fortran 和 Lisp 是最早的两门语言,现在仍在使用,它们分别是静态类型语言和动态类型语言。

强类型能及早发现缺陷。

下面几例体现了弱类型的不足:

```javascript
// 这些是 JavaScript 代码(在 Node.js v0.10.33 中做了测试)
'' == '0' // false
0 == '' // true
0 == '0' // true
'' < 0 // false
'' < '0' // true
```

因为 Python 不会自动在字符串和数字之间强制转换,所以在 Python3 中,上述 == 表达式的结果都是 False (保留了 == 的意思),而< 比较会抛出 TypeError 。静态类型使得一些工具(编译器和 IDE )便于分析代码、找出错误和提供其他服务(优化、重构,等等)。动态类型便于代码重用,代码行数更少,而且能让接口自然成为协议而不提早实行。

综上,Python 是动态强类型语言。“PEP 484—TypeHints”( https://www.python.org/dev/peps/pep-0484/)无法改变这一点,但是 API 作者能够添加可选的类型注解,执行某种静态类型检查。
cmdOptionKana
257 天前
古语有云:动态一时爽,重构火葬场。
unbridle
257 天前
只是不方便 javaboy 转 java 而已
highf4324
257 天前
是的,没有 Type Annotation 的代码不是好代码,阅读、维护起来真的是灾难。
Makabaka01
257 天前
@Pzqqt “很少隐式转换”这个概念很模糊啊,比如 JS 现在也不会有人写 == 了,都是 ===,然后 Python 里面也会经常在 if 里面直接放一个字典或者数组,`if dict` `if arr` 这样,这不算隐式转换吗
DOLLOR
257 天前
我写 Python 都会写 type hints ,写 JS 都会写 jsdoc 。
有的人嫌弃写 type 浪费时间,我觉得不然。写 type 能让编辑器自动提示对象里的成员,反而更能节约调试时间。
以前写 JS 的时候,最烦的事情,比如对象成员的字段名拼写错误,或者调用 async 函数忘记 await ,写一段代码,还要花同等的时间来调试。后来坚持写 TS/JSDOC ,代码跑起来经常都是一次通过,效率高多了。
Makabaka01
257 天前
@akira 万恶之源还是魔法字符串
yolee599
257 天前
所以我很反感用 var ,auto 来定义变量,该 string 就 string ,该 int 就 int ,别搞一个通用类型

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

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

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

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

© 2021 V2EX