(本?文?作?于?2013年?并?發(fā)?表?在?其?它?平臺,因?時(shí)?間太久?個(gè)?別?配?圖?已?不?能加?載?)對于經(jīng)常開發(fā)應(yīng)用軟件的人來說,都希望創(chuàng)建一個(gè)幫助系統(tǒng),幫助使用者了解自己軟件的功能與應(yīng)用方法。如何創(chuàng)建自己軟件的幫助系統(tǒng)呢?本文就這方面的問題談?wù)勛约旱膽?yīng)用方法,也希望通過自己的實(shí)際應(yīng)用經(jīng)驗(yàn)?zāi)軐ε笥褌冇兴鶐椭?/span>
Windows 98及以上版本的幫助文件與Windows 95的有比較大的改變,它使用一種基于HTML文件特征的幫助文件,用Internet Explorer顯示幫助內(nèi)容,支持HTML、ActiveX、Java、腳本(Java腳本和VB腳本)以及HTML圖像格式(.JPEG、GIF、PNG),它的圖標(biāo)也變了,后綴名為chm,Windows 98稱之為Compiled HTML Help File。為了敘述方便,下面就稱之為chm文件。典型的Windows 98規(guī)范的幫助文件(.chm文件)的窗口和Windows 98資源管理器差不多,左側(cè)是目錄、索引和搜索這三個(gè)功能項(xiàng),通過選項(xiàng)卡切換;右側(cè)是HTML文件的顯示部分,改變了原來幫助文件目錄窗口和主題窗口分離的情況。由于HTML文件具有多媒體表現(xiàn)力,因此chm文件的內(nèi)容不再局限于文字和靜態(tài)圖像,在其中可以插入GIF動(dòng)畫,也可以利用瀏覽器的插件在文檔中播放聲音文件、動(dòng)畫影片、或其它格式的多媒體內(nèi)容。加入U(xiǎn)RL地址可與因特網(wǎng)聯(lián)系在一起,這樣chm文件就不局限于包裝好的內(nèi)容了,它是微軟公司的下一代聯(lián)機(jī)幫助系統(tǒng)。同時(shí),chm文件的核心是充分利用HTML文件的表現(xiàn)能力,對分散的HTML文件作整體的包裝,這也是目前在Web網(wǎng)頁以外利用HTML文件的一個(gè)趨勢。如果你用這個(gè)方式制作學(xué)習(xí)教程、電子圖書和雜志,或?yàn)橛脩籼峁┊a(chǎn)品目錄和宣傳材料,比已經(jīng)流行的PDF文件更簡潔和方便。
chm文件從結(jié)構(gòu)上來看可分為兩個(gè)部分:運(yùn)行器和文檔內(nèi)容。運(yùn)行器是操作系統(tǒng)的一部分,而文檔內(nèi)容隨其所附的應(yīng)用程序而變化。這與以前的Winhelp的結(jié)構(gòu)沒有多少差別。不過運(yùn)行器部分有了較大的改進(jìn),運(yùn)行器很小巧并且不直接運(yùn)行HTML文件,而是操作一個(gè)ActiveX 的組件,控制支持ActiveX 組件的網(wǎng)頁瀏覽器,如微軟的Explorer 3.0以上版本的瀏覽器。它的一個(gè)好處是能跨平臺運(yùn)行,只要有不同平臺上的運(yùn)行器和瀏覽器,chm文件不再需要重新編制。 制作chm文件的工具是微軟公司的Htmlhelp Workshop工具包,目前,最新的HTML Help Workshop版本是4.74。這是中文版的,安裝Htmlhelp Workshop很方便,只要按照提示進(jìn)行即可。它的使用也很方便,沒有編程和寫語言的要求,只要你會(huì)制作HTML文件就行了。
制作chm文件很方便,也很簡單。大量的工作是以編寫HTML文件為主,它的每個(gè)主題就是一個(gè)HTML文件,這些主題應(yīng)該事先編輯好,并用Internet Explorer檢查確認(rèn)無誤。主題文件可以用任何一個(gè)HTML編輯器編輯,也可用Htmlhelp Workshop編輯。如果不熟悉HTML文件的編輯,還可用Word,因?yàn)閃ord 97以上版本可以把Word文檔(.doc文件)另存為HTML文件,還可以將Word文檔批量轉(zhuǎn)換成HTML文件。這樣就可以完全按照編輯Word文檔的習(xí)慣編輯成Word文檔,再轉(zhuǎn)換成HTML文件。
運(yùn)行Htmlhelp Workshop時(shí),它的工作窗口很簡單,菜單欄上有五個(gè)命令,分別是“文件”、“視圖”、“測試”、“工具”、“幫助”。下面的工具欄有五個(gè)按鈕,分別是“新建”、“打開”、“編譯HTML文件”、“校驗(yàn)編譯文件”、“聯(lián)機(jī)幫助”。下面介紹具體步驟:
一、創(chuàng)建幫助文本
創(chuàng)建幫助文本是創(chuàng)建幫助系統(tǒng)的第一步。所謂幫助文本,就是針對自己開發(fā)的應(yīng)用軟件的功能、使用方法的介紹和說明。這里,以我開發(fā)的《通信工程(概)預(yù)算系統(tǒng)》為例,談?wù)勂鋷椭到y(tǒng)的創(chuàng)建過程。用WORD2000創(chuàng)建《通信工程(概)預(yù)算系統(tǒng)幫助》文本。
通信工程(概)預(yù)算系統(tǒng)主界面
通信工程(概)預(yù)算系統(tǒng)幫助文本
二、創(chuàng)建分頁網(wǎng)頁文件
根據(jù)幫助系統(tǒng)框架結(jié)構(gòu),將每一段需要分頁顯示的幫助文本用WORD2000轉(zhuǎn)換成網(wǎng)頁文件。下圖是通信工程(概)預(yù)算系統(tǒng)幫助需要的分頁網(wǎng)頁文件。
分頁網(wǎng)頁文件
三、創(chuàng)建項(xiàng)目文件
啟動(dòng)Htmlhelp Workshop系統(tǒng),打開主界面。
新建一個(gè)方案
單擊Htmlhelp Workshop菜單或工具欄中的“新建”命令,這時(shí)出現(xiàn)“選擇新建內(nèi)容”的對話框。這里有五個(gè)選項(xiàng):“方案”、“文本”、“HTML文件”、“目錄”、“索引”。選擇“方案”,接著出現(xiàn)“方案”向?qū)В嬖V你這個(gè)向?qū)Э梢赞D(zhuǎn)換的文件格式,一般情況下我們是要?jiǎng)?chuàng)建方案(.hhp)文件,不需要轉(zhuǎn)換。直接進(jìn)入“下一步”指定放置的目錄和輸入文件名就可以了,單擊“下一步”,進(jìn)入了“現(xiàn)有文件”對話框,如果你想將已經(jīng)存在的文件包含進(jìn)“方案”里,在下面列表中選擇。這里一般空著,這些文件(包括已經(jīng)編輯好的主題文件)以后可以添加。進(jìn)入“下一步”后再“確定”就進(jìn)入了Htmlhelp Workshop工作窗口。在窗口的上方是3個(gè)選項(xiàng)卡,分別是“方案”、“目錄”、“索引”。在“方案”窗口的左側(cè)是7個(gè)按鈕,它們的功能名稱自上而下分別是:“改變項(xiàng)目選項(xiàng)”、“添加/刪除主題文件”、“添加/修改窗口定義”、“HHTML幫助API信息”、“校驗(yàn)HTML源文件”、“保存項(xiàng)目、目錄和索引文件”、“保存全部文件并編譯”。
單擊“改變項(xiàng)目選項(xiàng)”按鈕,出現(xiàn)“選項(xiàng)”對話框,光標(biāo)在“常規(guī)”選項(xiàng)卡的“標(biāo)題”文本框內(nèi)閃爍,在這里加入標(biāo)題,編譯后這個(gè)標(biāo)題將出現(xiàn)在chm文件窗口的標(biāo)題欄中。其它的內(nèi)容暫時(shí)用系統(tǒng)的默認(rèn)值。然后單擊“添加/刪除主題文件”按鈕,再選擇“添加”按鈕,把作為封面頁的HTML文件添上。封面頁的文件一定要有,否則編譯的幫助文件運(yùn)行后,系統(tǒng)會(huì)報(bào)錯(cuò)。好了,簡單的“方案”編輯就完成了。
四、創(chuàng)建目錄文件
單擊“目錄”選項(xiàng)卡,這時(shí)系統(tǒng)彈出一個(gè)對話框,提示你“方案”還沒有關(guān)聯(lián)目錄文件(.hhc),你可以創(chuàng)建一個(gè)新的目錄文件,或者指定一個(gè)現(xiàn)有的。這里選擇“創(chuàng)建一個(gè)新目錄文件”,進(jìn)入下一步請你選定一個(gè)新目錄文件的名稱和存放路徑,指定后出現(xiàn)目錄編輯窗口。在目錄窗口的左側(cè)有11個(gè)按鈕,前5個(gè)分別是:“目錄工具”、“插入標(biāo)題”、“插入頁面”、“編輯選擇”、“刪除選擇”,中間4個(gè)箭頭用來調(diào)整指定標(biāo)題或頁面的位置,最后兩個(gè)已在項(xiàng)目編輯窗口中出現(xiàn)過。根據(jù)需要插入標(biāo)題或頁面目錄,按下“插入標(biāo)題”或“插入頁面”按鈕,都會(huì)彈出“目錄條目”對話框,在“條目標(biāo)題”文本框中輸入條目的標(biāo)題,并根據(jù)情況選定對應(yīng)的主題(HTML文件),單擊“條目標(biāo)題”下的“添加”按鈕,在彈出的對話框的下面“文件或URL地址”文本框中輸入文件名或URL地址并確定;單擊“高級”選項(xiàng)卡,在“圖像索引”欄中為條目指定圖標(biāo),比如包含其它條目的條目可以用書形圖標(biāo),而頁面條目的可以用問號圖標(biāo)。如果在單擊“插入頁面”按鈕之前所選擇的條目不包含別的條目,也不被別的條目所包含,那么會(huì)詢問“是否要?jiǎng)?chuàng)建一個(gè)起始條目”,選擇了“是”會(huì)增加起始條目(一級條目),選擇了“否”會(huì)增加一個(gè)子條目。標(biāo)題可以不添加主題文件或URL地址,也可放置需要的主題文件,作為標(biāo)題的說明內(nèi)容。標(biāo)題可以分為多級,要按照制作的內(nèi)容統(tǒng)一考慮。如果覺得不滿意,可以用左側(cè)的箭頭進(jìn)行調(diào)整,也可以選定該條目,單擊鼠標(biāo)右鍵,不但可以調(diào)整,還可以插入標(biāo)題、主題或目錄文件。編輯目錄文件是制作chm文件最關(guān)鍵的工作,目錄文件應(yīng)該包含一個(gè)chm文件所有目錄(主題),而每個(gè)目錄又包含條目標(biāo)題(名稱)和該條目的主題文件,要避免條目標(biāo)題與對應(yīng)的主題不一致的情況出現(xiàn)。等所有目錄都添加好后目錄就算完成了。
創(chuàng)建目錄
已生成的幫助文件
完成目錄編制后,一個(gè)chm文件已具備了雛形,索引的內(nèi)容暫時(shí)空著。保存項(xiàng)目文件和目錄文件后就可以編譯,編譯就是把所有用到的HTML文件統(tǒng)統(tǒng)壓縮后包裝在一起,形成一個(gè)后綴名是.chm的文件。在主工具欄按鈕中可以找到編譯按鈕和試運(yùn)行按鈕,也可直接按項(xiàng)目窗口左下方的“保存全部文件并編譯”按鈕進(jìn)行編譯。編譯后再運(yùn)行就可以看到作品的面貌了。目錄的內(nèi)容在編譯后顯示在chm文件窗口的左側(cè),可以展開標(biāo)題后顯示以下的目錄,單擊目錄可以打開相應(yīng)的主題文件,顯示相應(yīng)的內(nèi)容。如果發(fā)現(xiàn)問題,還可以進(jìn)行修改調(diào)整。
五、創(chuàng)建索引文件
在Htmlhelp Workshop的工作窗口上單擊“索引”選項(xiàng)卡,和創(chuàng)建目錄文件一樣,也會(huì)彈出一個(gè)對話框,操作也是一樣的。進(jìn)入索引編輯窗口,左側(cè)也有11個(gè)按鈕,有8個(gè)是已經(jīng)熟悉的,還有3個(gè)分別是:“索引工具”、“插入關(guān)鍵字”、“排序關(guān)鍵字”。所謂關(guān)鍵字是用戶可能用到的并與一個(gè)或多個(gè)幫助主題文件關(guān)聯(lián)在一起的字、詞或短語,索引文件(.hhk)也是一個(gè)HTML文件,它包含若干個(gè)關(guān)鍵字,當(dāng)用戶打開chm文件后,單擊索引標(biāo)簽并輸入一個(gè)關(guān)鍵字后,chm文件將顯示與這個(gè)關(guān)鍵字有關(guān)的主題的列表,非常方便地找到相關(guān)主題。單擊“插入關(guān)鍵字”按鈕,出現(xiàn)一個(gè)“索引項(xiàng)”對話框,在“常規(guī)”選項(xiàng)卡的“關(guān)鍵字”文本框中輸入關(guān)鍵字,單擊“添加”按鈕指定與該關(guān)鍵字相關(guān)聯(lián)的主題文件。如果想跳轉(zhuǎn)到另一個(gè)關(guān)鍵字,在“索引項(xiàng)”對話框中按“高級”選項(xiàng)卡,選中下面的“目的地是另一個(gè)關(guān)鍵字”,單擊“常規(guī)”選項(xiàng)卡,單擊“添加”按鈕,在“文件或URL地址”框中輸入要跳轉(zhuǎn)的關(guān)鍵字,單擊“確定”。
創(chuàng)建索引
六、創(chuàng)建搜索
chm文件的“搜索”選項(xiàng)卡允許用戶在所有主題文件中搜索字、詞或短語,將它們的標(biāo)題顯示出來,而且在主題中用醒目的方式來顯示。打開一個(gè)方案文件,單擊“方案”選項(xiàng)卡的“改變方案選項(xiàng)”,在“選項(xiàng)”對話框的“編譯”選項(xiàng)卡中選中“編譯全文搜索信息”即可。 上述介紹的是編制HTML幫助文件的基本步驟,上手很容易。但它的功能遠(yuǎn)非這些,如在窗口定義中可以設(shè)計(jì)你所喜愛的形式,幾乎所有的窗口要素都可以改變。向HTML文件中插入快捷方式、相關(guān)主題、關(guān)鍵字鏈接、聯(lián)想鏈接、HTML Help ActiveX控件、Java腳本、彈出式窗口等等,詳細(xì)的內(nèi)容請參考Htmlhelp Workshop的幫助文件,或微軟的相應(yīng)網(wǎng)頁。相信你試過以后一定會(huì)喜歡它。
azor 同時(shí)支持 C# (C sharp) 和 VB (Visual Basic)。
主要的 Razor C# 語法規(guī)則
Razor 代碼塊包含在 @{ ... } 中
內(nèi)聯(lián)表達(dá)式(變量和函數(shù))以 @ 開頭
代碼語句用分號結(jié)束
變量使用 var 關(guān)鍵字聲明
字符串用引號括起來
C# 代碼區(qū)分大小寫
C# 文件的擴(kuò)展名是 .cshtml
C# 實(shí)例
<!-- Single statement block -->
@{ var myMessage ="Hello World"; }
<!-- Inline expression or variable -->
<p>The value of myMessage is: @myMessage</p>
<!--Multi-statement block -->
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Here in Huston it is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>
運(yùn)行實(shí)例 ?
主要的 Razor VB 語法規(guī)則
Razor 代碼塊包含在 @Code ... End Code 中
內(nèi)聯(lián)表達(dá)式(變量和函數(shù))以 @ 開頭
變量使用 Dim 關(guān)鍵字聲明
字符串用引號括起來
VB 代碼不區(qū)分大小寫
VB 文件的擴(kuò)展名是 .vbhtml
實(shí)例
<!-- Single statement block -->
@Code dim myMessage = "Hello World" End Code
<!-- Inline expression or variable -->
<p>The value of myMessage is: @myMessage</p>
<!-- Multi-statement block -->
@Code
dim greeting = "Welcome to our site!"
dim weekDay = DateTime.Now.DayOfWeek
dim greetingMessage = greeting & " Here in Huston it is: " & weekDay
End Code
<p>The greeting is: @greetingMessage</p>
運(yùn)行實(shí)例 ?
它是如何工作的?
Razor 是一種將服務(wù)器代碼嵌入在網(wǎng)頁中的簡單的編程語法。
Razor 語法是基于 ASP.NET 框架,專門用于創(chuàng)建 Web 應(yīng)用程序的部分 Microsoft.NET 框架。
Razor 語法支持所有 ASP.NET 的功能,但是使用的是一種簡化語法,對初學(xué)者而言更容易學(xué)習(xí),對專家而言更有效率的。
Razor 網(wǎng)頁可以被描述成帶以下兩種類型內(nèi)容的 HTML 網(wǎng)頁: HTML 內(nèi)容和 Razor 代碼。
當(dāng)服務(wù)器讀取頁面時(shí),它首先運(yùn)行 Razor 代碼,然后再發(fā)送 HTML 頁面到瀏覽器。在服務(wù)器上執(zhí)行的代碼能夠執(zhí)行一些在瀏覽器上不能完成的任務(wù),比如,訪問服務(wù)器數(shù)據(jù)庫。服務(wù)器代碼能創(chuàng)建動(dòng)態(tài)的 HTML 內(nèi)容,然后發(fā)送到瀏覽器。從瀏覽器上看,服務(wù)器代碼生成的 HTML 與靜態(tài)的 HTML 內(nèi)容沒有什么不同。
帶 Razor 語法的 ASP.NET 網(wǎng)頁有特殊的文件擴(kuò)展名 cshtml(Razor C#)或者 vbhtml(Razor VB)。
使用對象
服務(wù)器編碼往往涉及到對象。
"Date" 對象是一個(gè)典型的內(nèi)置的 ASP.NET 對象,但對象也可以是自定義的,一個(gè)網(wǎng)頁,一個(gè)文本框,一個(gè)文件,一個(gè)數(shù)據(jù)庫記錄,等等。
對象有用于執(zhí)行的方法。一個(gè)數(shù)據(jù)庫記錄可能有一個(gè) "Save" 方法,一個(gè)圖像對象可能有一個(gè) "Rotate" 方法,一個(gè)電子郵件對象可能有一個(gè) "Send" 方法,等等。
對象也有用于描述各自特點(diǎn)的屬性。一個(gè)數(shù)據(jù)庫記錄可能有 FirstName 和 LastName 屬性。
ASP.NET Date 對象有一個(gè) Now 屬性(寫成 Date.Now),Now 屬性有一個(gè) Day 屬性(寫成 Date.Now.Day)。下面實(shí)例演示了如何訪問 Data 對象的一些屬性:
實(shí)例
<table border="1">
<tr>
<th width="100px">Name</th>
<td width="100px">Value</td>
</tr>
<tr>
<td>Day</td><td>@DateTime.Now.Day</td>
</tr>
<tr>
<td>Hour</td><td>@DateTime.Now.Hour</td>
</tr>
<tr>
<td>Minute</td><td>@DateTime.Now.Minute</td>
</tr>
<tr>
<td>Second</td><td>@DateTime.Now.Second</td>
</tr>
</td>
</table>
運(yùn)行實(shí)例 ?
If 和 Else條件
動(dòng)態(tài)網(wǎng)頁的一個(gè)重要特點(diǎn)是,您可以根據(jù)條件決定做什么。
做到這一點(diǎn)的常用方法是使用 if ... else 語句:
實(shí)例
@{
var txt = "";
if(DateTime.Now.Hour > 12)
{txt = "Good Evening";}
else
{txt = "Good Morning";}
}
<html>
<body>
<p>The message is @txt</p>
</body>
</html>
是一篇暴露年齡的文章。為什么這么說?因?yàn)楝F(xiàn)在年輕的程序員可能沒有接觸過當(dāng)年紅極一時(shí)的 Visual Basic。28 年前的 1991 年 4 月,Microsoft 發(fā)布了 Visual Basic 1.0 for Windows,次年 9 月,發(fā)布了 Visual Basic 1.0 for DOS。
這在當(dāng)時(shí)引起了很大的轟動(dòng),許多專家把 VB 的出現(xiàn)當(dāng)做是軟件開發(fā)史上的一個(gè)具有劃時(shí)代意義的事件。以現(xiàn)在的眼光來看,VB1.0 版的功能其實(shí)非常弱,但它在推出時(shí)可是第一個(gè) “可視” 的編程軟件。
這使得程序員欣喜之極,都嘗試在 VB 的平臺上進(jìn)行軟件創(chuàng)作。到了 1998 年夏天,Microsoft 發(fā)布了 VB 6,這是 VB.NET 至今仍然無法完全取代的版本。但隨著.NET 的興起,VB 開始走上下坡路。它是如何興起的,又是如何衰落的?讓我們跟著 Matthew MacDonald 的腳步笑看 VB 的風(fēng)起云落吧!
作者介紹:Matthew MacDonald,技術(shù)作家、教師、程序員。著有幾十本圖書,現(xiàn)在教育孩子學(xué)習(xí)編程和科學(xué)。
28 年過去了,我們終于要目睹世界上最流行的語言之一,Visual Basic ,開始衰落了嗎?
我要坦白一件事,在我成為一名受人尊敬的開發(fā)者,使用像 C# 和 Java(以及我們稱之為 JavaScript 的熱門平臺)這樣的現(xiàn)代大括號編程語言之前,我曾經(jīng)是廣受歡迎,又有些不合時(shí)宜的 Visual Basic 的忠實(shí)粉絲。
坦白說,我對 Visual Basic 的迷戀是這樣開始的:當(dāng)我還是個(gè)十幾歲的孩童時(shí),我就學(xué)會(huì)了使用 BASIC 語言編程,但不僅僅是任何 BASIC 語言。我是從 Microsoft 那個(gè)古董級的 DOS 操作系統(tǒng)上開創(chuàng)性的 QuickBASIC 環(huán)境開始的。至今我仍然記得在藍(lán)色背景下用白色文本來編寫代碼的場景。
對于 1998 年的編程來說,QuickBASIC 是不可思議的編程語言。你可以編寫不帶笨拙行號的代碼,在鍵入代碼時(shí)能夠?qū)崟r(shí)捕獲語法錯(cuò)誤,并直接從開發(fā)環(huán)境中啟動(dòng)程序,而不需要用命令行的方式來啟動(dòng)。當(dāng)你完成代碼編寫后,你還可以用這些軟盤來跟你的朋友分享你的程序:
如今,QuickBASIC 只是對遙遠(yuǎn)過去的另一種好奇心。真的是這樣嗎?一個(gè)叫做 QB64 的創(chuàng)新項(xiàng)目創(chuàng)造了現(xiàn)代的 QuickBASIC 復(fù)刻版。它無需模擬器就可以運(yùn)行在 Windows、MacOS 和 Linux 上。當(dāng)你用 QB64 運(yùn)行一個(gè)程序時(shí),它會(huì)運(yùn)用一個(gè)很巧妙的手法:首先將你的 BASIC 代碼翻譯成 C++,然后再進(jìn)行編譯。
對于古老的,基于文本的計(jì)算機(jī)系統(tǒng)來說,QuickBASIC 是一項(xiàng)令人印象深刻的壯舉。但當(dāng) Microsoft 發(fā)布 Windows,將 PC 用戶帶到了一個(gè)由按鍵和點(diǎn)擊組成的圖形世界時(shí),游戲規(guī)則發(fā)生了變化。在 Microsoft 發(fā)布第一個(gè)真正成功的 Windows 3.0 的同時(shí),他們也發(fā)布了 Visual Basic 1.0。
這是個(gè)全新的事物。你可以通過在窗口的表面上繪制按鈕來為程序創(chuàng)建按鈕,就像它是某種藝術(shù)畫布一樣。要讓按鈕執(zhí)行某些操作,你所要做的事就是在設(shè)計(jì)環(huán)境中,雙擊這個(gè)按鈕并編寫一段代碼即可。
而且,你沒有使用神秘的 C++ 代碼,也沒有使用成堆的類、復(fù)雜的內(nèi)存管理以及對 Windows API 的晦澀的調(diào)用。相反,你就像一個(gè)文明人一樣編寫了友好的 VB 代碼。
所有圖形化的魅力讓人印象深刻,但 VB 成功的真正秘訣在于它的實(shí)用性。開發(fā)人員根本就沒有其他工具可以像 VB 那樣繪制出一個(gè)完整的用戶界面并快速編寫代碼。盡管歷史學(xué)家喜歡談?wù)?Visual Basic 的可視化部分,但它的“招牌”能力卻與圖形化的小部件無關(guān)。
相反,VB 是因一個(gè)傳奇性的特性而出名,這個(gè)特性叫做“編輯并繼續(xù)”(edit-and-continue),允許開發(fā)人員運(yùn)行他們的程序,發(fā)現(xiàn)并解決問題,然后繼續(xù)使用新的代碼。這與人們已知的幾乎所有其他編程環(huán)境截然不同,這些環(huán)境迫使開發(fā)人員重新編譯他們的工作,并在每次更改之后重新開始。
最初的 Visual Basic 蓬勃發(fā)展了大約十年。一開始是一個(gè)對初學(xué)者友好的開發(fā)環(huán)境,后來發(fā)展成了一個(gè)足以讓嚴(yán)肅的程序員使用的工具。通過 VB 6 的發(fā)布,這是經(jīng)典 Visual Basic 的最后一個(gè)版本,據(jù)估計(jì),用 VB 編寫的代碼量是很難用的 C++ 編寫的代碼量的十倍。而且,它們并不僅僅是在模仿玩具應(yīng)用程序。
Visual Basic 通過 ASP(Active Server Pages,動(dòng)態(tài)服務(wù)器網(wǎng)頁)進(jìn)入了公司的辦公室,甚至連到網(wǎng)絡(luò),這是另一種非常流行的技術(shù)。現(xiàn)在,你可以創(chuàng)建于 VB 組件交互的 Web 頁面,稱為數(shù)據(jù)庫,并動(dòng)態(tài)編寫 HTML。所有這些幾乎都是在沒有結(jié)構(gòu)的情況下發(fā)生的,除非你自己選擇創(chuàng)建一個(gè)結(jié)構(gòu)。這是 Visual Basic 的一個(gè)不成文主題,它給了你現(xiàn)在的自由,以后你會(huì)后悔的。
經(jīng)典 VB 在很多圈子里聲名狼藉。面向?qū)ο蟮目駸岱肿咏?jīng)常抱怨 VB 缺乏對繼承的支持。(其實(shí)這是一個(gè)奇怪的批評,因?yàn)閷τ诓惶炀毜拈_發(fā)者來說,繼承常常是搬起石頭砸自己的腳的好方法,而這正是 VB 不需要的那種功能。)事實(shí)上,經(jīng)典的 VB 并非面向?qū)ο蟮摹皯袧h”。在它的生命周期結(jié)束時(shí),它已經(jīng)支持接口、多態(tài)性和類庫,而所有這些都是從 COM 借鑒來的,COM 是組件技術(shù)的核心部分,它硬鏈接到 Windows 的每個(gè)版本中。
經(jīng)典 VB 的真正問題在于它太過成功。它極為有效地降低了新程序員的學(xué)習(xí)障礙,使得幾乎任何人都可以使用 VB 進(jìn)行編程。粗心大意的新手、無聊的公司員工和暑期學(xué)生都紛紛涌進(jìn)來,解決了在任何其他平臺上更為困難的挑戰(zhàn),到處都是意大利面條式的代碼。
換句話說,因?yàn)?VB 很容易使用,即使你不是一名訓(xùn)練有素的程序員,VB 也很容易使用,所以很多沒有受過專業(yè)訓(xùn)練的程序員都在使用 VB。而 VB 卻從來沒有采取任何措施來鼓勵(lì)他們糾正自己的壞習(xí)慣。
快進(jìn)到 2002 年,Microsoft 正在做它最擅長的事情,通過引入一種全新的做事方式,顛覆了自己的開發(fā)生態(tài)系統(tǒng)。
這一次,這個(gè)項(xiàng)目是對 COM 的大規(guī)模重構(gòu),而組件技術(shù)是支撐 Windows (以及間接的經(jīng)典 VB)的基礎(chǔ)。對于一家已經(jīng)下過幾次這樣的賭注的軟件巨頭來說,這是一個(gè)孤注一擲的時(shí)刻。
Microsoft 之所以將這次重新啟動(dòng)命名為 .NET,是因?yàn)橐恍┛梢傻脑颍ɑヂ?lián)網(wǎng)技術(shù)仍然是嶄新的、令人興奮的事實(shí),以及因?yàn)?.NET 包含了 Microsoft 一心要推廣的 Web 服務(wù)功能。它深受 Java 的影響,并且包含了許多工具,用于與數(shù)據(jù)庫通信、構(gòu)建網(wǎng)站、編寫多線程程序、通過套接字建立連接的工具,這些幾乎是所有業(yè)務(wù)開發(fā)人員能想象到的用例。
唯一的問題是,為了獲得這些新特性,Microsoft 不得不放棄幾乎所有的經(jīng)典 VB。
如果你仔細(xì)看的話,就會(huì)發(fā)覺,新版本 VB.NET 看起來還是個(gè)老樣子。但它還是有許多大大小小的突破性變化。從大的方面來說,舊的 VB 程序?qū)⑹芾в诶吓f的編程世界中,而一個(gè)極其糟糕的遷移向?qū)缀鯖]有改變這一點(diǎn)。從小的方面來說,經(jīng)典 VB 的程序員必須改變他們計(jì)算數(shù)組元素的方式。他們再也不能像普通人那樣從 1 開始了。現(xiàn)在他們必須從 0 開始,就像正式的程序員一樣。
還有一個(gè)大的方面:開發(fā)人員是眾所周知的抱怨者,而 VB 開發(fā)人員尤甚。不久,一群有影響力的 VB 開發(fā)人員將 Microsoft 的新編程環(huán)境命名為 VB.Fred,并強(qiáng)調(diào)無論它是什么,這種新語言都不是 Visual Basic。
你可能會(huì)認(rèn)為,是 .NET 的變化毀壞了 VB 的基礎(chǔ),并讓 VB 不可避免地走向衰落。但事實(shí)并非如此。事實(shí)上,盡管 VB.NET 朝著一個(gè)新的方向發(fā)展,并作出了一些突破性的改變,這些改變使優(yōu)秀的經(jīng)典 VB 代碼成為無人能識的代碼,但它卻變得非常受歡迎。那是因?yàn)?VB.NET 提供了 VB 開發(fā)人員以前從未有過的東西:尊重。
在 .NET 世界中,VB 和 C# 處于平等的地位。每一行 VB 代碼都可以轉(zhuǎn)換成等效的 C# 代碼行,反之亦然。兩種語言都具有相同的功能,使用相同的組件,并編譯為完全相同的形式,我們稱其為中間語言(intermediate language)。VB 終于擺脫了“丑小鴨綜合癥”。
但是,作為另一種受人尊敬的編程語言,它也存在一個(gè)問題。人們對 VB 的熱情消失了,不再是許多人的首選語言了。這不是因?yàn)?VB 變了,而是因?yàn)?C# 變了。
正如 VB 獲得了與 C# 相同的功能一樣,C# 也獲得了與 Visual Basic 相同的便利。例如,.NET 的類型安全和內(nèi)存管理功能意味著 C# 開發(fā)人員永遠(yuǎn)無須擔(dān)心內(nèi)存泄漏問題,就像 VB 開發(fā)人員一樣。
換句話說,C# 現(xiàn)在有了保護(hù)業(yè)余愛好者、學(xué)生和新程序員的“護(hù)欄”,而又不放棄它的力量。突然之間,VB 不再是什么特別的東西了,它只不過是一個(gè)有能力的程序員工具包中的另一個(gè)工具罷了。
今天,Visual Basic 正處于一個(gè)奇怪的位置。在專業(yè)開發(fā)人員中,幾乎沒有人使用 Visual Basic,它甚至都沒有出現(xiàn)在專業(yè)開發(fā)人員調(diào)查中的清單,也沒有出現(xiàn)在 GitHub 存儲庫中。
然而,Visual Basic 仍然在那兒,將 Office 的宏連接在一起,為舊的 Access 數(shù)據(jù)庫和古老的 ASP 網(wǎng)頁提供支持,并吸引 .NET 新手。TIOBE 索引 試圖通過查看搜索引擎的結(jié)果來衡量語言的流行程度,它仍然將 VB 排在最受關(guān)注的五大編程語言之列。
但這種勢頭似乎已經(jīng)發(fā)生了最后一次變化。2017 年,Microsoft 宣布,它將開始為 C# 添加新的語言功能,而這些功能可能永遠(yuǎn)不會(huì)出現(xiàn)在 Visual Basic 中。這一變化并沒有使 VB 回到丑小鴨狀態(tài),但它確實(shí)消除了 VB 的一些 .NET 狀態(tài)。
事實(shí)上,將 VB 邊緣化的趨勢已經(jīng)存在多年了。嚴(yán)肅的開發(fā)人員都知道,.NET 的關(guān)鍵部分是用 C# 編寫的。他們知道 C# 是演示文稿、書籍、課程和開發(fā)者研討會(huì)的首選語言。如果你想使用 VB,它并不會(huì)影響你構(gòu)建的應(yīng)用程序,但它可能會(huì)妨礙你和其他開發(fā)人員交流的能力。
Visual Basic 本應(yīng)在教育市場有一個(gè)天然的契合點(diǎn)。但即便如此,它仍然是個(gè)“敗家子”,像 C# 和 Python 這樣的現(xiàn)代語言現(xiàn)在已經(jīng)足夠簡單、安全,完全可以作為他們的第一門語言來學(xué)習(xí)。
如果你需要教給小孩更簡單的東西,市場上充斥著像 Scratch 等圖形化編程工具。像 C#、C、JavaScript 這樣的大括號編程語言也有另一種吸引力,因?yàn)樗鼈兌加凶约旱恼Z法。因此,學(xué)過一種編程語言的人很快就能熟練掌握另一種語言。
隨著 Web 開發(fā)的發(fā)展,Microsoft 正眼睜睜地看著機(jī)會(huì)流失。誰不會(huì)被和 VB6 一樣容易使用,還可以編譯成 JavaScript,并與 HTML 表單設(shè)計(jì)器配對的 VB 版本所吸引呢?
是的,它并不是構(gòu)建下一個(gè) Google Maps 的適合工具,但它可以重新喚起 Visual Basic 的吸引力,讓商業(yè)開發(fā)人員、學(xué)生和愛好者創(chuàng)建簡單的在線應(yīng)用程序,而不必像 JavaScript 那樣笨拙。相反,Microsoft 創(chuàng)造了一個(gè)基于 VB 的產(chǎn)品,叫做 LightSwitch,但它隨著 Silverlight 瀏覽器插件的消失而消失。
如果 Microsoft 開發(fā)出另一款面向大眾的編碼產(chǎn)品,它更有可能是一種低代碼模板驅(qū)動(dòng)的工具,比如 PowerApps。
Visual Basic 以前也不是沒受到過威脅,但這一次感覺不一樣了。作為世界上曾經(jīng)最流行的編程語言之一的太陽,似乎終于要落下了。即使這是真的,Visual Basic 在幾十年內(nèi)也不會(huì)消失。相反,它將會(huì)成為另一種遺留產(chǎn)品,一個(gè)被忽視的工具,沒有激情,也沒有未來。不管我們失去了什么特別的東西,或者,最終讓一條老狗擺脫痛苦,這一切,都由你來決定。
原文鏈接:The Rise and Fall of Visual Basic
《構(gòu)建大型 React 應(yīng)用程序的最佳實(shí)踐》
查看文章,歡迎點(diǎn)擊了解更多
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。