[討論] 請大家聊聊靜態語言的缺點

作者: fshfsh (魚~*)   2020-11-22 09:46:58
繼上個系列串
我想問問大家認為靜態型別的缺點是什麼呢?
本人寫Java也寫JS,最近也在碰Python
我自己寫Java,一開始覺得宣告比較麻煩,需要思考這個變數是什麼型別
(其實說實在,Java的變數最常使用也就幾個,我正常刷Leetcode除非特殊情況否則很少會想不出要用什麼型別的變數)
優點是很明顯的,一旦後面的型別錯了,IDE直接跳錯,也不給編譯
我上一份工作需要寫Java後端和JS前端,Java通常不會有型別錯誤的情況發生,除非是打API撈資料再cast成Java object的過程才有可能出錯
而JS則是變數很好宣告,直接const就好了
但前前後後的變數,自己都要記得很清楚這個變數的型別
萬一做一個動態頁面(我們是陽春的jQuery) ,搞不清楚狀況
光要找出問題就要debug很久
我聽說動態型別和靜態型別都各有其擁護者,想請問靜態型別的缺點,或是說動態型別的優點是什麼呢?
作者: dream1124 (全新開始)   2020-11-22 10:08:00
現在主流語言的設計都嘛抄來抄去,大家長得越來越像可彈性標註型態 + 可彈性調整語法檢查嚴謹度的編譯器才是趨勢。動態靜態已不太是重點
作者: OrzOGC (洞八達人.拖哨天王)   2020-11-22 10:30:00
對新手有一點點不友善 python近乎亂寫XD
作者: kyushu (蘇打綠嚇倒我了)   2020-11-22 10:46:00
我主要寫C/C++,Python,靜態型別對我來說沒什麼特別缺點,倒是動態型別常常要teace源頭倒底是啥型別
作者: shter (飛梭之影)   2020-11-22 10:50:00
JS比較常運用的情況是值可能是一個物件或 boolean false有些function找到東西時會回傳物件,沒找到就回傳 false而不需要預先定義 Function 回傳值或變數的型態JS的型別習慣是在處理的時候做型別轉換成 Function 需要的如要計算的話不論來源字串/數值都一律 parseInt parseFloat
作者: alihue (wanda wanda)   2020-11-22 11:00:00
不用一直擔心型別 runtime err 很不方便
作者: lturtsamuel (港都都教授)   2020-11-22 11:01:00
其實我覺得很多人的問題只是選的語言不夠強的問題有了 sum type, tuple 跟 macro 以後其實我很少有表達不出來的類型了
作者: alihue (wanda wanda)   2020-11-22 11:28:00
static 很多 type bug 可以在 compile time 就解決了
作者: EricTCartman (阿ㄆㄧㄚˇ)   2020-11-22 11:42:00
靜態型別的缺點就是你要浪費時間去做動態型別機制但你可以選擇不用動態型別 所以就沒了這缺點 yeah
作者: koharuhu (靠北的惆悵..)   2020-11-22 16:59:00
我怎覺得這篇只是另開戰場...要寫出有品質的Code 重點在人而不在工具語言
作者: superpandal   2020-11-22 17:18:00
java不會看到型別錯誤 只是因為不夠動態 至於記不記得 ide是種加成不代表原本問題不存在寫的不夠動態
作者: alihue (wanda wanda)   2020-11-22 17:30:00
不要動不動就放大絕有問題都是人,語言都是工具,這裡是軟體版好嗎難道你用工具都不會選一下,看優缺點?
作者: newhandfun (新手方)   2020-11-22 17:41:00
同意樓上,如果將人的因素考量進去就很難談了。不過大家看起來都是在鞭js太奇葩,而不是編譯與否或是弱強型態與否
作者: x246libra (楓)   2020-11-22 17:48:00
動態寫的爽, 維護慘,靜態寫的微累不方便, 維護佳.java 也可以很動態,全部都用object就可以,眼神死
作者: dream1124 (全新開始)   2020-11-22 18:04:00
語言是人發明的,討論工具就說一切都是人的問題也沒錯只是那些人要這樣說的話,你下次就可以直指語言發明者大罵了,發明這什麼該死的鳥東西。
作者: jej (晃奶大馬桶)   2020-11-22 18:31:00
java喔 一票老屁股連lambda都還沒跟上在那邊說什麼動態語言的優缺點重點是老屁股們 你們有跟上時代嗎?說缺點 很明顯的是要寫很多東西 一樣是工廠類別有 lambda 和沒有lambda就明顯差很多
作者: netburst (133 134 592)   2020-11-22 20:37:00
推樓上
作者: wulouise (在線上!=在電腦前)   2020-11-22 20:52:00
Lambda某種程度對易讀性的確有提高
作者: askaleroux (FalconTW)   2020-11-23 01:40:00
沒什麼缺點
作者: ssccg (23)   2020-11-23 10:34:00
缺點就是要多寫一些東西啊,寫不對compiler還不會讓你過像generic有時候你就知道是對的,但是type inference過不了
作者: lturtsamuel (港都都教授)   2020-11-23 10:48:00
但也有時候是你以為你對了
作者: rodion (r-kan/reminder)   2020-11-23 11:56:00
缺點就是靜態本身阿 靜態代表細節的強迫確定 但這與軟體發展往更高度抽象化的目標背道而馳所以靜態語言的產品相對安全穩固 但對於開發本身來說 就得接受一個較為"吹毛求疵"(當然這也有好的一面)的體驗
作者: meowyih (meowyih)   2020-11-23 12:21:00
你一面說用來用去就那幾個類型,一面又說寫到後面會忘記類型是甚麼,聽起來不覺得怪怪的嗎? 不是數字就是文字,不是單一變數就是陣列,忘記也太誇張了 XD
作者: newhandfun (新手方)   2020-11-23 15:11:00
動靜態跟強弱型態要分開來,也有靜態弱型態的語言......
作者: typepeter (∵Peter∴笑點)   2020-11-23 18:53:00
與其講強弱型態 感覺沒泛型才可怕 其他還好
作者: Dodoroiscute (再想想)   2020-11-23 20:17:00
作者: billy8407 (suprmenode)   2020-11-23 21:15:00
Python 也可以標註型態了更何況是動態語言,註名清礎對自己debug也好,動靜態其實到還好
作者: satanbaby (撒旦北鼻)   2020-11-24 03:05:00
沒有缺點
作者: superpandal   2020-11-24 06:56:00
靜態語言加上物件要動態就是要考慮型別錯誤阿 有問題嗎 XD 當然人很重要
作者: JasperChang (PeterChou)   2020-11-24 21:28:00
缺點就是比動態好太多
作者: mepowerlmay (用心,找對人)   2020-11-30 00:42:00
分享到fb 大家一起輪啦

Links booklink

Contact Us: admin [ a t ] ucptt.com