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

127 天前
 Makabaka01

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

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

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

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


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

13696 次点击
所在节点    程序员
119 条回复
hhacker
127 天前
不讨厌的只是屎山,不是弱类型
estk
127 天前
中国人老板:My grandma run faster than your code!
qcbf111
127 天前
ts 火不是没有道理得,当初我们用 lua 也强制必须要规范书写 type annotation.
Makabaka01
127 天前
@hhacker 国内环境下,弱类型 == 不可阅读的屎山……强类型还属于可阅读的屎山,能接受一点
lithiumii
127 天前
可能别的团队一个月整出了能挣钱的活,现在用户多到需要重构了。但凡一开始就用 java 写,现在还没上线呢(我瞎说的
Makabaka01
127 天前
@lithiumii 哎,现在大厂确实都这样,代码随便搞,能跑就行,吹一波后面反正晋升走人了,维护代码又不是自己,然后后面来的人继续这么想,继续屎山上拉屎。
walkeronway
127 天前
我写 python 就特喜欢写类型注解,看着特舒服,写了之后 pycharm 的语法提示也好用
mwuxlcanrh
127 天前
上线收益拿到手拍拍屁股挖新的坑,留下的老坑里面都是屎,接盘的有福了
sagaxu
127 天前
php 代码里面经常有 $item['aa']['bb']['cc']['dd'] 甚至 5 级以上的数组,运行时产生一大堆 undefined index xxx ,但产品行为却符合预期,就算是原作者维护,可能过几个月就搞不清有哪些字段了
kenvix
127 天前
你要不先区分一下弱类型和动态类型...
ciderzero
127 天前
Python 是强类型动态语言吧,虽然我觉得写着也不舒服。
akira
127 天前
都一样, 赶工期出来的东西,用啥写 都是屎山。。。
Pzqqt
127 天前
以下内容摘自《流畅的 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
127 天前
古语有云:动态一时爽,重构火葬场。
unbridle
127 天前
只是不方便 javaboy 转 java 而已
highf4324
127 天前
是的,没有 Type Annotation 的代码不是好代码,阅读、维护起来真的是灾难。
Makabaka01
127 天前
@Pzqqt “很少隐式转换”这个概念很模糊啊,比如 JS 现在也不会有人写 == 了,都是 ===,然后 Python 里面也会经常在 if 里面直接放一个字典或者数组,`if dict` `if arr` 这样,这不算隐式转换吗
DOLLOR
127 天前
我写 Python 都会写 type hints ,写 JS 都会写 jsdoc 。
有的人嫌弃写 type 浪费时间,我觉得不然。写 type 能让编辑器自动提示对象里的成员,反而更能节约调试时间。
以前写 JS 的时候,最烦的事情,比如对象成员的字段名拼写错误,或者调用 async 函数忘记 await ,写一段代码,还要花同等的时间来调试。后来坚持写 TS/JSDOC ,代码跑起来经常都是一次通过,效率高多了。
Makabaka01
127 天前
@akira 万恶之源还是魔法字符串
yolee599
127 天前
所以我很反感用 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