※ 引述《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
好啦好啦,你終於長大,已經不是小孩子囉~
你是未來世界的主人翁~ 乖哦~