[討論] 請大家聊聊靜態語言的缺點
繼上個系列串
我想問問大家認為靜態型別的缺點是什麼呢?
本人寫Java也寫JS,最近也在碰Python
我自己寫Java,一開始覺得宣告比較麻煩,需要思考這個變數是什麼型別
(其實說實在,Java的變數最常使用也就幾個,我正常刷Leetcode除非特殊情況否則很少會想不出要用什麼型別的變數)
優點是很明顯的,一旦後面的型別錯了,IDE直接跳錯,也不給編譯
我上一份工作需要寫Java後端和JS前端,Java通常不會有型別錯誤的情況發生,除非是打API撈資料再cast成Java object的過程才有可能出錯
而JS則是變數很好宣告,直接const就好了
但前前後後的變數,自己都要記得很清楚這個變數的型別
萬一做一個動態頁面(我們是陽春的jQuery) ,搞不清楚狀況
光要找出問題就要debug很久
我聽說動態型別和靜態型別都各有其擁護者,想請問靜態型別的缺點,或是說動態型別的優點是什麼呢?
--
現在主流語言的設計都嘛抄來抄去,大家長得越來越像
可彈性標註型態 + 可彈性調整語法檢查嚴謹度的編譯器
才是趨勢。動態靜態已不太是重點
對新手有一點點不友善 python近乎亂寫XD
我主要寫C/C++,Python,靜態型別對我來說沒什麼特別缺點
,倒是動態型別常常要teace源頭倒底是啥型別
JS比較常運用的情況是值可能是一個物件或 boolean false
有些function找到東西時會回傳物件,沒找到就回傳 false
而不需要預先定義 Function 回傳值或變數的型態
JS的型別習慣是在處理的時候做型別轉換成 Function 需要的
如要計算的話不論來源字串/數值都一律 parseInt parseFloat
不用一直擔心型別 runtime err 很不方便
其實我覺得很多人的問題只是選的語言不夠強的問題
有了 sum type, tuple 跟 macro 以後其實我很少有表
達不出來的類型了
static 很多 type bug 可以在 compile time 就解決了
靜態型別的缺點就是你要浪費時間去做動態型別機制
但你可以選擇不用動態型別 所以就沒了這缺點 yeah
我怎覺得這篇只是另開戰場...要寫出有品質的Code 重點在
人而不在工具語言
java不會看到型別錯誤 只是因為不夠動態 至於記不記
得 ide是種加成不代表原本問題不存在
寫的不夠動態
不要動不動就放大絕有問題都是人,語言都是工具,這裡是
軟體版好嗎
難道你用工具都不會選一下,看優缺點?
同意樓上,如果將人的因素考量進去就很難談了。不過大
家看起來都是在鞭js太奇葩,而不是編譯與否或是弱強
型態與否
動態寫的爽, 維護慘,靜態寫的微累不方便, 維護佳.
java 也可以很動態,全部都用object就可以,眼神死
語言是人發明的,討論工具就說一切都是人的問題也沒錯
只是那些人要這樣說的話,你下次就可以直指語言發明者
大罵了,發明這什麼該死的鳥東西。
java喔 一票老屁股連lambda都還沒跟上
在那邊說什麼動態語言的優缺點
重點是老屁股們 你們有跟上時代嗎?
說缺點 很明顯的是要寫很多東西 一樣是工廠類別
有 lambda 和沒有lambda就明顯差很多
推樓上
Lambda某種程度對易讀性的確有提高
沒什麼缺點
缺點就是要多寫一些東西啊,寫不對compiler還不會讓你過
像generic有時候你就知道是對的,但是type inference過不了
但也有時候是你以為你對了
缺點就是靜態本身阿 靜態代表細節的強迫確定 但這與軟體
發展往更高度抽象化的目標背道而馳
所以靜態語言的產品相對安全穩固 但對於開發本身來說 就得
接受一個較為"吹毛求疵"(當然這也有好的一面)的體驗
你一面說用來用去就那幾個類型,一面又說寫到後面會忘記
類型是甚麼,聽起來不覺得怪怪的嗎? 不是數字就是文字,
不是單一變數就是陣列,忘記也太誇張了 XD
動靜態跟強弱型態要分開來,也有靜態弱型態的語言....
..
與其講強弱型態 感覺沒泛型才可怕 其他還好
Python 也可以標註型態了
更何況是動態語言,註名清礎對自己debug也好,動靜態
其實到還好
沒有缺點
靜態語言加上物件要動態就是要考慮型別錯誤阿 有問題
嗎 XD 當然人很重要
缺點就是比動態好太多
分享到fb 大家一起輪啦
7
就是囉嗦開發時間長而已 其他就沒什麼缺點了 所以說看情形去使用語言 要做個穩定的大專案還是靜態語言妥當 我只是寫個一次性的自動化腳本X
這個問題實在是匪夷所思 以認知科學的觀點看,當然是靜態型別優於動態型別呀! 就像offer文在討論薪水,在那邊 N 來 N 去 在許多重要性質不確定的情況下,很多東西是很難精確的下判斷的 不過如果貴圈的專注層次不在這裡,不在乎,那也就無所謂3
借題發揮一下:static typed for the win 不過還是先切題回答「靜態語言的缺點」: 在大部分常用的靜態語言中,的確可能出現 valid program 不好標注 type 的情況 不過到底有多難標注就完全看是哪個語言跟哪個版本了 -----1
寫MCU的話,看來看去只能用靜態的語言 因為記憶體真的是小不拉基的(了不起10K給你使用),能用記憶體時都要斤斤計較, 一些常見的資料結構使用時要非常非常的小心,像是Linked list之類的 一不小心,記憶體沒有回收,就可能造成死當的情況發生 一些型態沒有宣告就使用的話,那可能真的會造成MCU的災難9
問靜態和動態有缺點。怎麼不想想你公司是怎樣型態 如果你們公司成員 新舊和程度不一樣 就需要靜態語言處理程式,強制要成員遵守並規範。只要規範好,一般猴子也會按照著寫程 式。 動態語言吃的是開發人員素質,要自律,要對程式碼負責。
20
Re: [討論] 刷leetcode的語言選擇最近剛好有在指導一些學生練習,可以來回應一下這個問題 一般最常見語言有三個:C, JAVA, Python 也是最容易找到範例 code 的三個語言 各有不同優點,可以看你的狀況選擇 首先,如果未來有一天18
[請益] 後端 刷題及工作語言的選擇目前在德國留學 畢業後不會在國外定居 往後還是想多陪陪家人 所以會在台灣定居 工作上希望是100%遠端 討厭通勤 最近爬了很多後端的文章 後端兩個很常見的語言java & python12
Re: [討論] 寫三元判斷式code review被打槍從 C++ 的角度來說 三元運算子有機會改變 l-value/r-value 的性質,進而破壞最佳化 舉個簡單例子 可以看到用三元運算子的時候,回傳區域變數竟然要 copy 而不是 move 雖然說 Java 沒有這些XX
Re: [面試] 2019 華碩AICS 經驗 雷到爆每個公司都要理論實作強啊,這邊不知道 你要白眼什麼? : 但我還是禮貌地說 : 「我理解我還有很多要學習的地方,如果有幸錄取還需要請...」 : 我是打算要說「請團隊的前輩多多指教」7
Re: [問卦] 為啥java會在python之前紅JAVA這東西之前真的不知道紅什麼意思的 完全物件導向 使用每個功能 都要宣告物件出來 然後呼叫簡單的內容 也要一串程式碼 又臭又長1
Re: [討論] 請大家聊聊 JavaScript的缺陷小弟介紹自己語言的圖譜。 1.寫 Java 三年(沒在寫了)。 2.被公司逼寫 Nodejs 寫了五年(現在還在寫)轉換成本半年。 3.被公司逼 TS 四年(現在還在寫)轉換成本一個月。 4.被公司逼 GO 兩年(現在還在寫)轉換成本兩周。3
Re: [請益] 比物件導向更先進的程式設計思想?幾個迷思 很多人會講C沒有OOP 實際上C有 OOP是一種paradigm 本質上還是工程師的抽象化能力 有OOP思想的人去寫C 就會有OOP的味道 腦袋裝義大利麵的寫C++還是Java C# Swift 出來都是義大利麵