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

看板Soft_Job (軟體人)作者 (全新開始)時間5年前 (2020/11/03 09:46), 5年前編輯推噓12(15324)
留言42則, 23人參與, 5年前最新討論串1/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 好啦好啦,你終於長大,已經不是小孩子囉~ 你是未來世界的主人翁~ 乖哦~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.183.84 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1604367983.A.10C.html

11/03 10:14, 5年前 , 1F
笑死,在蛇蛇圈也是有已知用火的感覺
11/03 10:14, 1F

11/03 10:15, 5年前 , 2F
推推
11/03 10:15, 2F

11/03 10:16, 5年前 , 3F
可惜 ts 的 union type 沒有好用到可以取代 exception
11/03 10:16, 3F

11/03 10:36, 5年前 , 4F
漂亮
11/03 10:36, 4F

11/03 10:49, 5年前 , 5F
很精闢
11/03 10:49, 5F

11/03 10:58, 5年前 , 6F
各位觀眾,新一代鄙視鏈已出現!
11/03 10:58, 6F
其實我不鄙視 js,畢竟當初發展的時空背景跟現在完全不同, 當年誰能料到瀏覽器輔助開發者的功能會變成現在大家開發應用程式的基礎? 我只是受不了 js、ts 分不清楚就要說 js 好棒棒的論點,這太瞎了。

11/03 10:59, 5年前 , 7F
感謝TS,不然開發前端面對JS真心痛苦
11/03 10:59, 7F

11/03 11:15, 5年前 , 8F
說ES6很棒 但是還要打包 考慮不同瀏覽器行為
11/03 11:15, 8F

11/03 11:15, 5年前 , 9F
promise 是語言的一部分 寫在規格裡
11/03 11:15, 9F

11/03 11:15, 5年前 , 10F
部署難度差那麼多 我還是覺得js難用
11/03 11:15, 10F

11/03 11:15, 5年前 , 11F

11/03 11:15, 5年前 , 12F
如果規格沒有定義 promise 要怎麼定義 async await?
11/03 11:15, 12F

11/03 11:34, 5年前 , 13F
型別檢查那段我可能沒寫清楚
11/03 11:34, 13F

11/03 11:34, 5年前 , 14F
我指的是 js + JSDoc + tsc checkJS
11/03 11:34, 14F

11/03 11:34, 5年前 , 15F
開發時用 tsc檢查型別
11/03 11:34, 15F

11/03 11:34, 5年前 , 16F
跑的時候 node.js 直接跑不用編譯
11/03 11:34, 16F

11/03 11:34, 5年前 , 17F
在語法上是合格的 js
11/03 11:34, 17F

11/03 11:34, 5年前 , 18F
可以說他是 js 也可以說他是 ts
11/03 11:34, 18F
好啊,你不是寫 ts,你是寫 js,但這樣就更妙了。 語言是語言,開發工具是開發工具,這是兩回事。 為什麼進步的 tsc 可以拿來為 js 語言護航? 工具都能為語言加分的話,那恐怕會讓 js 被人笑更慘哦~ 就算你說工具的進步和語言的進步密切相關, js 有 let 有 const,有 node 的 cjs 和後面 export import 等概念後, tsc 抓錯的能力才能大幅提升,但這改變不了 js 語言本身就是比其他語言破, 讓人寫得進階一點就要背一堆特例,記一堆怪異行為,用一堆外部工具輔助的本質啊~ 這樣的語言給人抱怨只是剛好而已好不好…

11/03 11:39, 5年前 , 19F
promise 是函式庫??定義在 ECMAScript Spec 裡面的是
11/03 11:39, 19F

11/03 11:39, 5年前 , 20F
函式庫??
11/03 11:39, 20F

11/03 11:44, 5年前 , 21F
半瓶水響叮噹 看到promise那段就懶得看了
11/03 11:44, 21F

11/03 11:51, 5年前 , 22F
用ts鄙視js XDDDD
11/03 11:51, 22F
也不是鄙視,就只是學會 ts 這種能提供 js 型態資訊給開發工具的語言之後, 若非維護舊專案,否則就不想寫純 js 專案了。 講白了現在除非新專案是 node 程式,不然寫給外部使用者的前端純 js 專案還不是要轉譯, 有多少團隊敢假設對方瀏覽器都很新,直接用最新的 ES 語法? 既然都要轉譯,那為啥不寫 ts 就好?

11/03 11:52, 5年前 , 23F
promise不是物件嗎? 囧
11/03 11:52, 23F

11/03 11:53, 5年前 , 24F
可是IE不支援promise捏 訂在spec 瀏覽器不支援還要繞
11/03 11:53, 24F

11/03 11:53, 5年前 , 25F
一圈 似乎不太方便
11/03 11:53, 25F

11/03 11:56, 5年前 , 26F
樓上不覺得這聽起來像是 IE 的問題嗎?
11/03 11:56, 26F

11/03 12:00, 5年前 , 27F
如果公司要你支援IE 那就變成RD的問題了
11/03 12:00, 27F

11/03 12:06, 5年前 , 28F
你不想要 exception,go rust c歡迎你
11/03 12:06, 28F

11/03 12:08, 5年前 , 29F
除了ocaml系列語言 rust kotlin 其他人說要避免空指
11/03 12:08, 29F

11/03 12:08, 5年前 , 30F
針解引用我都當笑話
11/03 12:08, 30F

11/03 12:35, 5年前 , 31F
笑死
11/03 12:35, 31F

11/03 13:13, 5年前 , 32F
我用react都用tsx取代jsx,ts真的建議去學一下。
11/03 13:13, 32F

11/03 13:45, 5年前 , 33F
2020 年還在說 promise 只是函式庫不是語言特性 如果不是
11/03 13:45, 33F

11/03 13:45, 5年前 , 34F
平行時空就是時空旅人
11/03 13:45, 34F

11/03 18:37, 5年前 , 35F
Promise 是函式庫?
11/03 18:37, 35F

11/03 20:41, 5年前 , 36F
typescript寫起來真的頗舒服
11/03 20:41, 36F

11/03 22:13, 5年前 , 37F
promise/async/await 的部分講錯了 = =
11/03 22:13, 37F

11/04 00:30, 5年前 , 38F
11/04 00:30, 38F

11/04 16:27, 5年前 , 39F
個人覺得有錯直接回傳狀態 再由其他函數處理比較好
11/04 16:27, 39F
這不就是 Go 語言的做法? 很好,以後你去呼叫函式之前都要注意他有沒有可能拋執行期錯誤, 然後不斷檢查有沒有錯誤訊息了。 ※ 編輯: dream1124 (118.160.95.12 臺灣), 11/05/2020 14:59:59

11/05 16:45, 5年前 , 40F
不需要像go那麼繁複
11/05 16:45, 40F

11/05 21:04, 5年前 , 41F
推ts
11/05 21:04, 41F

11/05 23:16, 5年前 , 42F
推TS就是證明JS就是個垃圾
11/05 23:16, 42F
文章代碼(AID): #1VeBPl4C (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1VeBPl4C (Soft_Job)