Re: [討論] 請大家聊聊 JavaScript的缺陷

作者: dream1124 (全新開始)   2020-11-03 09:46:21
※ 引述《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
好啦好啦,你終於長大,已經不是小孩子囉~
你是未來世界的主人翁~ 乖哦~
作者: hegemon (hegemon)   2020-11-03 10:14:00
笑死,在蛇蛇圈也是有已知用火的感覺
作者: alihue (wanda wanda)   2020-11-03 10:15:00
推推
作者: stopcrying (賣考)   2020-11-03 10:16:00
可惜 ts 的 union type 沒有好用到可以取代 exception
作者: maik060 (^.< 啾咪 ~)   2020-11-03 10:36:00
漂亮
作者: newhandfun (新手方)   2020-11-03 10:49:00
很精闢
作者: angusyu (〒△〒)   2020-11-03 10:58:00
各位觀眾,新一代鄙視鏈已出現!
作者: windclara (null)   2020-11-03 10:59:00
感謝TS,不然開發前端面對JS真心痛苦
作者: vi000246 (Vi)   2020-11-03 11:15:00
說ES6很棒 但是還要打包 考慮不同瀏覽器行為
作者: keev (a)   2020-11-03 11:15:00
promise 是語言的一部分 寫在規格裡
作者: kusakawa (草川)   2020-11-03 11:39:00
promise 是函式庫??定義在 ECMAScript Spec 裡面的是函式庫??
作者: tsao1211 (Sunday)   2020-11-03 11:44:00
半瓶水響叮噹 看到promise那段就懶得看了
作者: chatnoir (對不起)   2020-11-03 11:51:00
用ts鄙視js XDDDDpromise不是物件嗎? 囧
作者: vi000246 (Vi)   2020-11-03 11:53:00
可是IE不支援promise捏 訂在spec 瀏覽器不支援還要繞一圈 似乎不太方便
作者: kusakawa (草川)   2020-11-03 11:56:00
樓上不覺得這聽起來像是 IE 的問題嗎?
作者: vi000246 (Vi)   2020-11-03 12:00:00
如果公司要你支援IE 那就變成RD的問題了
作者: lturtsamuel (港都都教授)   2020-11-03 12:06:00
你不想要 exception,go rust c歡迎你除了ocaml系列語言 rust kotlin 其他人說要避免空指針解引用我都當笑話
作者: WTFCN (WTFCN)   2020-11-03 12:35:00
笑死
作者: jobintan (Robin Artemstein)   2020-11-03 13:13:00
我用react都用tsx取代jsx,ts真的建議去學一下。
作者: tz5514 (屁安)   2020-11-03 13:45:00
2020 年還在說 promise 只是函式庫不是語言特性 如果不是平行時空就是時空旅人
作者: soccer103 (Ferrari)   2020-11-03 18:37:00
Promise 是函式庫?
作者: dreamnook (亞龍)   2020-11-03 20:41:00
typescript寫起來真的頗舒服
作者: fantasystar (小光先生)   2020-11-03 22:13:00
promise/async/await 的部分講錯了 = =
作者: viper9709 (阿達)   2020-11-04 00:30:00
作者: superpandal   2020-11-04 16:27:00
個人覺得有錯直接回傳狀態 再由其他函數處理比較好
作者: sharku (明珠求瑕)   2020-11-05 21:04:00
推ts
作者: strlen (strlen)   2020-11-05 23:16:00
推TS就是證明JS就是個垃圾

Links booklink

Contact Us: admin [ a t ] ucptt.com