※ 引述《keev (a)》之铭言:
: 而我自己写JavaScript 觉得写起来很舒服
: 所以我想请大家提出 JavaScript 哪里烂
你喜不喜欢是一回事,但尽管我天天写 ts 仍觉得 js 真的比较烂啊~
: 在近几年演化的很快
: 例如 es6 增加 let, const语法
这可以说是近年最有用的功能了… 还好有它们不然事情更麻烦
: promise, async await 的出现
: 避免了 callback hell
认真说来这是异步作业都要面对的议题,不是 js 自己的问题,
但小吐槽一下,promise 只是函式库… 请不要跟语言混为一谈。
async、await 才是语言功能,但那是你 promise 用太凶而顺势衍生出的工具,
不是因为有什么前瞻的见解而发展出来的功能。
另外值得一提的是…
既然现在人们把 js 当通用语言来用,也开发服务器端的程式,
那处理到可能发生多种例外的作业,好比说 I/O 时,
你们难道不觉得没有 throws 语法给开发者事先声明函式的使用者可能会面对的例外是一项缺陷?
这样对于使用者来说,他不就要事先看一堆文件才会知道应该设想好哪些问题的对策?
难道有可能发生错误的函式你通通都要靠 promise 来回报吗?
这样应该比较浪费内存空间吧?
还是你觉得只要靠一两个高层次的 try catch 统一补捉各式 error,
然后再层层呼叫多个函式善后就好?
你这次要再靠 JSDoc 于程式码的外部声明例外状况来缓解这项问题吗?
(有空去看看这篇文章吧 https://www.yinwang.org/blog-cn/2017/05/23/kotlin )
: TypeScript + JSDoc + vscode
: 则是提供了强型别语言的好处
: 例如 type checking, documentation, 避免null dereference, code navigation 等等
这段是吸引我回文的点
不好意思喔,这些都是 typescript、vscode 的功劳,跟 javascript 无关。
你在用的是 typescript,javascript 仍旧是破破的,请不要帮它揽功。
其他 C-like 通用语言早就可以提供型态资讯给编译器,
也陆续都可以协助检查 null pointer 的问题,
拿这些功能出来说嘴只是让人觉得像是国中生跟大人强调自己已经不是小孩了。
如果你 js 专案不加入 tsconfig,或著不透过文字编译器、 IDE 提供的机制
向他们说明程式执行环境的资讯,那各类工具支援都难以做得很精准到位。
Facebook 为了解决型态问题还发展出 propTypes 这种鬼东西欸,我看了只觉得呵呵
: 而维护程式码品质的工具 eslint, prettier
: 分别是 linter 和 code formatter
: 可以避免许多问题
嗯,已知用火…
: 而 commonjs, es module 则是补上了模组功能
: 在这些东西出现前 js的确是很难用
: 所以请大家把讨论范围限定在现代的JavaScript
好啦好啦,你终于长大,已经不是小孩子囉~
你是未来世界的主人翁~ 乖哦~