大多數情況下,人們用編程語言是否會隱式地轉換數據類型來判斷一門語言是否為弱類型語言,比如 C。
而實際上,對於除了比較經典的語言外,大部分人對於其他常見語言的強、弱類型是分不清楚的——或者說,是不一致的。因此總會有人來爭論它。如果我們以開篇的概念來作為基礎,那麼矛盾就會顯現:
比如 Pascal 曾計劃作為強類型語言,但整體上卻給類型系統引入了一個漏洞,所以技術上來講它是弱類型的。
那麼到底什麼才是強類型,什麼才是弱類型呢?我無法回答你,因為業界本身就沒有對它進行一個完整的定義。所以如果你用強類型語言還是弱類型語言來區分之,是相當不准確的。——因為你無法解釋清楚究竟什麼才是強類型什麼才是弱類型。
大多數情況下,我們用類型安全、內存安全、動態類型檢查和靜態類型檢查來定義語言——這樣就明確多了。
其實大多數情況下,我們對強弱類型的理解是不同的,大部分人會按照開篇的概念來理解,但有時候也會有其他的想法——這是很正常的,因為這個定義本身就不是嚴格的技術定義。所以由於一開始我並沒有深究這個問題,導致我以“弱類型”來描述了 Swift 語言,而實際上按照我們的普遍定義,它應當是強類型語言——因為它並不能隱式轉換數據類型。
但是說它是弱類型就一定不對嗎?按照我“小眾”的定義,弱類型指的是在聲明的時候不需要顯式地寫出值類型,比如大部分情況下,Swift 有類型推斷可以依賴。所以以此同理,我會認為 C 語言是強類型語言。
你可能覺得很可笑,但是我仍舊厚著臉皮說我是對的,因為對於弱類型的定義只有普遍的理解而並沒有嚴格的定義。
但同樣,我也說明了 Swift 是類型安全的語言,這一點是正確的。
混淆
說起類型安全,你可能就會看到,大部分人用強類型來指代類型安全,他們說 Swift 是強類型語言的時候,其實就是在說:Swift 是一門類型安全的語言。——因為大部分情況下,類型安全的表現和強類型的表現差不多——比如不能隱式地轉換值的類型。
但這裡我還要講,當我們討論一門語言是靜態類型語言還是動態類型語言的時候,又會有不少人說靜態類型語言是強類型語言,因為它的行為也符合強類型的定義。
你看,如果我們說一個語言是強類型語言,那麼它是類型安全的呢?還是說它是靜態類型語言呢?或者兩者都有?
還是說典型的C、C艹,說它是強類型語言,因為它是靜態語言,有些人說不是,因為它不是類型安全的;比如說流行的 Python,它是弱類型語言,因為它不是靜態類型語言對吧?可是有人就要反對了:Python 不允許類型隱式轉換啊它其實是強類型!
所以我們應當避免用強弱來區分編程語言的行為,你這麼做,並不能給聽眾帶來多少益處,恐怕唯一的作用就是讓初學者更加糊塗。
延伸閱讀
本文由 落格博客 原創撰寫:落格博客 » 編程語言的強類型、弱類型
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1630.html
我來給你刷波評論,來做測試吧,頭像挺好看!
你能收到郵件嗎?我勒個擦我自己怎麼還是收不到=。=
刷的這條收到了哦~如果你再能收到這個,那就一切OK啦。怎麼有種三次握手的趕腳
草草草,完美了,原來是扔到垃圾郵件裡了……
握手成功,握手成功,沒有reset恭喜恭喜?
像我這種常年不看垃圾郵件的人……我竟然真的被它給坑了!好吧,我得去翻翻……看來我後來加的一段代碼起作用了,待會寫一篇文章嘿嘿。
我的收藏夾已經準備好了…折騰wp的經驗還是比較少的?
哈哈,我的經驗也不多,都是臨時google嘿嘿。
至少你比我多玩了好久wp~哎不說啦,早點休息吧,發個推紀念下這R檔!
嘿嘿,給你來個漂亮的晚安:)我順手也把UI美化了一下~
哇,這郵件的UI確實挺美的!
其實蠻喜歡像python這種動態的、腳本式的OOP語言~
貌似AlphaGo是Golang的?
說實在的我好難接受Python的語法,用起來好頭痛,但它確實方便好用啊,,,又簡單,練練就會用了。 狗的話看意思還是C和C艹來的吧。
唔……我來匯報個bug,回复沒有郵件提醒。另外我是不是得弄個gravatar了呢……
Python那本書依舊在吃灰,不過tiobe的統計顯示……python勢頭挺猛
真的假的!你看看是不是在垃圾箱裡=。=你每次的回复我都會有郵件提醒的呀,我回頭自己再試試看。
我檢查了下,真的沒有耶,你去查下發信記錄,順便自己評論試試。PS我這頭像還是很萌的~
頭像是挺萌的……