Re: [討論] 請大家聊聊 JavaScript的缺陷
※ 引述《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
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
11/03 10:59, 7F
推
11/03 11:15,
5年前
, 8F
11/03 11:15, 8F
推
11/03 11:15,
5年前
, 9F
11/03 11:15, 9F
→
11/03 11:15,
5年前
, 10F
11/03 11:15, 10F
→
11/03 11:15,
5年前
, 11F
11/03 11:15, 11F
→
11/03 11:15,
5年前
, 12F
11/03 11:15, 12F
推
11/03 11:34,
5年前
, 13F
11/03 11:34, 13F
→
11/03 11:34,
5年前
, 14F
11/03 11:34, 14F
→
11/03 11:34,
5年前
, 15F
11/03 11:34, 15F
→
11/03 11:34,
5年前
, 16F
11/03 11:34, 16F
→
11/03 11:34,
5年前
, 17F
11/03 11:34, 17F
→
11/03 11:34,
5年前
, 18F
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
11/03 11:39, 19F
→
11/03 11:39,
5年前
, 20F
11/03 11:39, 20F
噓
11/03 11:44,
5年前
, 21F
11/03 11:44, 21F
推
11/03 11:51,
5年前
, 22F
11/03 11:51, 22F
也不是鄙視,就只是學會 ts 這種能提供 js 型態資訊給開發工具的語言之後,
若非維護舊專案,否則就不想寫純 js 專案了。
講白了現在除非新專案是 node 程式,不然寫給外部使用者的前端純 js 專案還不是要轉譯,
有多少團隊敢假設對方瀏覽器都很新,直接用最新的 ES 語法?
既然都要轉譯,那為啥不寫 ts 就好?
→
11/03 11:52,
5年前
, 23F
11/03 11:52, 23F
推
11/03 11:53,
5年前
, 24F
11/03 11:53, 24F
→
11/03 11:53,
5年前
, 25F
11/03 11:53, 25F
→
11/03 11:56,
5年前
, 26F
11/03 11:56, 26F
→
11/03 12:00,
5年前
, 27F
11/03 12:00, 27F
推
11/03 12:06,
5年前
, 28F
11/03 12:06, 28F
→
11/03 12:08,
5年前
, 29F
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
11/03 13:13, 32F
噓
11/03 13:45,
5年前
, 33F
11/03 13:45, 33F
→
11/03 13:45,
5年前
, 34F
11/03 13:45, 34F
噓
11/03 18:37,
5年前
, 35F
11/03 18:37, 35F
→
11/03 20:41,
5年前
, 36F
11/03 20:41, 36F
→
11/03 22:13,
5年前
, 37F
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
11/05 16:45, 40F
推
11/05 21:04,
5年前
, 41F
11/05 21:04, 41F
推
11/05 23:16,
5年前
, 42F
11/05 23:16, 42F
討論串 (同標題文章)
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章
11
45