首頁 > web前端 > css教學 > HTML不是編程語言嗎?

HTML不是編程語言嗎?

William Shakespeare
發布: 2025-03-21 09:52:13
原創
431 人瀏覽過

HTML is Not a Programming Language?

HTML並非編程語言。

這句話我聽過無數遍,令人厭倦。通常,後面會跟著諸如“它沒有邏輯”或“它不是圖靈完備的”之類的說法……所以,顯然它不是編程語言。彷彿事情就此結束,討論也該停止了。

但真的應該如此嗎?

我想探討一下我經常聽到的那些用來貶低HTML的論點,並提出我自己的反駁,以說明這些說法並不完全正確。

我的目標不是證明HTML是或不是編程語言,而是表明用來聲稱它不是編程語言的三個主要論點存在缺陷或不正確,從而從邏輯角度使結論無效。

“HTML是一種標記語言,而不是編程語言”

這個說法本身聽起來不錯……但它是錯誤的:標記語言可以是編程語言。並非所有標記語言都是(大多數都不是),但它們可以是。如果我們繪製一個編程語言和標記語言的維恩圖,它將不是兩個獨立的圓圈,而是兩個略微相交的圓圈:

一種使用變量、具有控制結構、循環等的標記語言,也可以是編程語言。它們不是相互排斥的概念。

TeX和LaTeX就是既被認為是標記語言,也被認為是編程語言的例子。用它們進行開發可能並不實用,但這是可能的。我們可以在網上找到一些例子,比如BASIC解釋器或火星探測器控制器(它贏得了2008年ICFP編程大賽的評委獎)。

雖然某些標記語言可能被認為是編程語言,但我並不是說HTML就是其中之一。關鍵是最初的說法是錯誤的:標記語言可以是編程語言。因此,說HTML不是編程語言因為它是一種標記語言,是基於一個錯誤的陳述,而你從這個前提得出的任何結論都將是絕對錯誤的。

“HTML沒有邏輯”

這一說法要求我們澄清“邏輯”的含義,因為定義可能會讓你大吃一驚。

與圖靈完備性(我們肯定很快就會談到)一樣,提出這一論點的人似乎誤解了它的確切含義。我曾要求人們告訴我他們所說的“邏輯”是什麼意思,並得到了以下一些有趣的答案:

邏輯是一種合理的推理或思維方式。

如果我們正在尋找邏輯的字典定義,這很好。但我們談論的是編程邏輯,而不僅僅是作為一般術語的邏輯。我還收到了類似這樣的答案:

編程語言有變量、條件、循環等。 HTML不是編程語言,因為你不能使用變量或條件。它沒有邏輯。

這很好(而且肯定比進入真/假/與/或等更好),但也錯誤。 HTML確實有變量——以屬性的形式——並且可以使用這些變量/屬性以及控制結構來確定顯示的內容。

但是你怎麼控制這些變量?你需要JavaScript!

再次錯誤。一些HTML元素具有內部控制邏輯,不需要JavaScript或CSS即可工作。我說的不是像<link>之類的東西——它們是基本的控制結構,幾十年來一直是標準的一部分。我指的是那些會響應用戶輸入並根據元素的當前狀態和變量的值執行條件操作的元素。以<details>/<summary></summary></details>元組或<dialog></dialog>元素為例:當用戶點擊它們時,如果存在open屬性,它們將關閉;如果不存在,它們將打開。不需要JavaScript。因此,僅僅說HTML不是編程語言因為它缺乏邏輯是具有誤導性的。我們知道HTML確實能夠根據用戶輸入做出決策。 HTML有邏輯,但它與旨在操縱數據的其他語言的邏輯本質上是不同的。我們需要比這更有力的論據來證明HTML不是一種編程形式。

“HTML不是'圖靈完備的'”

好的,這是我們在這場辯論中最常看到的論點。從技術上講(最好的那種正確),說HTML不是圖靈完備的是正確的,但這應該引發比僅僅將其用作結束陳述更大的辯論。

我不會深入探討圖靈完備性的含義,因為有很多關於這個主題的資源。事實上,Lara Schenck在她一篇論證CSS是圖靈完備的文章中很好地總結了這一點:

簡單來說,對於一種語言或機器來說,圖靈完備意味著它能夠做到圖靈機能夠做到的事情:執行任何計算,也就是通用計算。畢竟,編程是為了進行數學運算而發明的,當然,我們現在用它做了更多的事情!

因為大多數現代編程語言都是圖靈完備的,所以人們將其用作編程語言的定義。但圖靈完備性並非如此。它是一個標準,用於識別系統(或其規則集)是否可以模擬圖靈機。它可以用來對編程語言進行分類;它並沒有定義它們。它甚至不只適用於編程語言。例如,遊戲Minecraft(滿足該標準)或紙牌遊戲萬智牌(也滿足該標準)。兩者都是圖靈完備的,但我懷疑任何人都不會將它們歸類為編程語言。

圖靈完備性現在很流行,就像過去有些人認為編譯語言與解釋語言之間的區別是良好的標準一樣。是的。我們不必費很大的勁去回憶一下,當開發者(主要是後端)輕視前端編程(包括JavaScript和PHP)不是“真正的編程”的時候。你仍然有時會聽到它,儘管現在已經褪色、含糊不清、低聲細語了。

編程的定義(或不是)隨著時間的推移而變化。我敢打賭,有人整理穿孔卡片會抱怨用彙編語言打代碼不是真正的編程。沒有什麼普遍的或寫在石頭上的東西。沒有實際的定義。

圖靈完備性是一個公平的標準,我必須說,但它是有偏見的和主觀的——不是在其形式上,而是在其選擇方式上。為什麼一種能夠生成圖靈完備機的語言會被視為“編程語言”,而另一種能夠生成有限狀態機的語言卻不會?這是主觀的。這與其他任何區分“真正的開發者”(提出這一說法的人)和那些不如他們的人的藉口一樣。

雪上加霜的是,很明顯,許多重複“HTML不是圖靈完備的”咒語的人甚至不知道或不理解圖靈完備性是什麼意思。它不是一個獎項或質量標誌。它不是榮譽徽章。它只是一種對編程語言進行分類的方法——對它們進行分組,而不是定義它們。一種編程語言可以是圖靈完備的,也可以不是,就像它可以是解釋的或編譯的、命令式的或聲明式的、過程式的或面向對象的。

那麼,HTML是編程語言嗎?

如果我們可以貶低那些聲稱HTML不是編程語言的主要論點,這是否真的意味著HTML是一種編程語言?不,這並不意味著。因此,這場辯論將持續下去,直到HTML標準發展或編程語言的“當前定義”發生變化。

但是作為開發者,我們必須警惕這個問題,因為在許多情況下,它不是用來激發嚴肅的辯論,而是用來激起爭議,同時隱藏ulterior motives:從獲得輕鬆的互聯網反應,到危險地減少一群人對開發生態系統的貢獻。

或者,正如Ashley Kolodziej在她對HTML的頌歌中精彩總結的那樣:

他們說你不是像其他語言一樣的真正的編程語言,你只是標記語言,從技術上講,我想這是對的。從技術上講,JavaScript和PHP是腳本語言。我還記得,那時了解JavaScript並不酷,那時它也不是一種“真正的”語言。有時,我覺得這些區別毫無意義,就像我們創造了一個詞彙來阻礙你(以及作為開發者的我們自己)。你,作為一種標記語言,擁有你獨特的價值和優勢。知道如何最好地使用你是真正的專業知識,這種專業知識往往被忽視。

無論我們對“HTML是/不是編程語言”的討論採取什麼立場,讓我們來慶祝它,而不是否認它的重要性:HTML是互聯網的支柱。它是一種美麗的語言,擁有大量的文檔和廣泛的語法,但它又如此簡單,可以在一個下午學會,又如此復雜,需要數年才能掌握。無論是否是編程語言,真正重要的是我們擁有HTML。

以上是HTML不是編程語言嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板