BASIC

BASIC又譯培基，是一種直譯式程式設計語言。名稱的字面意思為“初學者的全方位符式指令程式碼”，設計給初學者使用的程式語言，在完成編寫後不須經由編譯及連結等手續，經過直譯器即可執行，但如果需要單獨執行時仍然需要將其建立成執行檔。BASIC的歷史.1964年，兩位美國數學家兼計算機科學家約翰·克米尼和在FORTRAN語言的基礎上創造了一種新的語言——BASIC，BASIC是一種適用於初學者的人機互動式語言。Basic的名字——Beginner's All-purpose Symbolic Instruction Code，原來被作者寫做BASIC，只是後來被微軟廣泛的叫做Basic了。BASIC語言本來是為達特茅斯學院的大學生們創造的高階語言，目的是使大學生容易使用計算機。儘管初期的BASIC僅有幾十條語句，但由於BASIC在當時比較容易學習，它很快從校園走向社會，成為初學者學習計算機程式設計的首選語言。隨著計算機科學技術的迅速發展，特別是微型計算機的廣泛使用，計算機廠商不斷地在原由的BASIC基礎上進行功能擴充，出現了多種BASIC版本，例如TRS-80 BASIC、Apple BASIC、GWBASIC、IBM BASICA甚至在當時超過其他語言。在微控制器上亦可以使用BASIC程式設計，不過多數情況下要安裝BASIC的ROM。早期的BASIC語言：在大型機和小型機時代.最原始的BASIC語言是在1964年由約翰·克米尼和設計，並且在他們的指導下由Dartmouth的學生實現的。當時設計BASIC語言的目的是讓學生能在Dartmouth的分時作業系統上寫程式。這種語言是為了解決以前語言的複雜的問題，而設計的一種新的語言。它特別針對了那些新的要用到分時系統，但是卻沒有以往學生那樣有很深厚的數學功底，又對學習這些數學知識不感興趣的那些學生。能夠使用一臺電腦來幫助教學和研究在那個時候是非常新穎的一件事情。在那段時間中，隨著其他形式的BASIC語言的出現，人們就把Kemeny和Kurtz的最原始的BASIC語言形式被人們稱為Dartmouth BASIC。BASIC語言的8個設計原則是：這種語言一部分基於FORTRAN II，一部分基於ALGOL 60，並且在此之上增加了一些東西使之適和於分時功能。的程式，比如用辛普森法則進行數值積分的計算效率上擊敗了FORTRAN II和ALGOL 60。BASIC語言的設計者為了使這種語言廣為傳播，決定讓人免費獲得編譯器。他們同時也向漢諾威地區的高校提供了這種語言並且在促進BASIC語言方面花了很大的功夫。結果是有關於BASIC語言的知識傳播的非常廣泛，並且被很多的製造商實現，逐漸在一些較新的小型機像DEC PDP系列和Data General Nova中盛行起來。BASIC語言同時也在20世紀60年代末70年代初成為了惠普分時BASIC系統的核心，另外也是Pick作業系統的核心。在以上這些例子中，BASIC語言趨向於以直譯器的方式實現，而不是編譯器。在它發行的若干年之後，一些非常有聲望的計算機專家，特別是艾茲赫爾·戴克斯特拉，表達了他們對於使用GOTO語句的看法。他們認為，存在於包括BASIC語言在內的很多語言中的GOTO語句，會使編寫程式變得很糟糕。有些人同時也嘲笑BASIC語言速度太慢迅速增長：家用電腦時期.儘管BASIC語言在一些小型機上使用了，但是它真正進入大學是在1975年的MITS Altair 8800 "kit"微型機的引入。大多數的程式語言需要一個適用的文字編輯器，大量的記憶體和磁碟空間。但是當時的情況則是，那個時候的微型機沒有本地的編輯器，僅有有限的記憶體以及一般將錄音磁帶做為磁碟儲存資料。所有的這些問題，使得像BASIC那樣以解釋形式執行以及擁有內建的程式碼編輯器的語言能夠在這些限制下執行。BASIC語言同時還具有的優勢就是它在那些對微型機感興趣的年輕的設計師和計算機愛好者中相當出名，以及在那個時候的電子工業中BASIC語言被普遍的使用。另外Kemeny和Kurtz在早期在傳播BASIC語言這一方面所花的努力也功不可沒，在那個時候一些愛好者的雜誌中幾乎都被一段一段的提及BASIC語言的文章填滿，或者差不多全部都在關注一個版本和其他版本的比較。最先在像Altair那樣8080機器中出現的BASIC語言之一是Tiny BASIC，一個簡單的BASIC語言的的實現，最初由Li-Chen Wang博士編寫，隨後被Dennis Allison應Bob Albrecht的要求移植到Altair中。Tiny BASIC的設計和全部的原始碼都在1976年於DDJ雜誌中被公佈出來。1975年，MITS釋出了Altair BASIC，由Bill Gates和Paul Allen作為一個叫做Micro-Soft的公司開發，後來Micro-Soft則發展成今天的企業巨頭——微軟的一些版本馬上被捆綁到最初的基於軟盤的CP/M計算機中，這種計算機在小的商業環境中被廣為使用。隨著在CP/M中的BASIC語言知名度的擴張，新的計算機設計中同樣也引入了他們自己的BASIC語言的版本，或者乾脆叫Micro-Soft把BASIC版本移植到他們的平臺中。當三種新的個人計算機在1977年問世的時候，也就是Byte Magazine後來稱作"1977 Trinity"的那段時間，所有的這三種的計算機都用BASIC語言作為他們的程式語言和操作環境。Commodore Business Machines公司一次性的付費買下一個移植到他們PET計算機的6502晶片中Micro-Soft BASIC的一個無限授權版本，於此同時Apple II和TRS-80都引入了一個新的，與這種語言極大相似的語言。這種相似性是非常明顯的因為它們最開始的50個記號版本。因為在這一個時期的BASIC的知名度的上升，一些雜誌。在那個時候，檢查糾正經常會在雜誌的程式碼中出現的印刷錯誤也是雜誌本身的一個作業。BASIC程式也同樣在成熟的書本中被髮布：最初的例子是David Ahl的BASIC Computer Games系列。後來的書，就比如Learn to Program BASIC也同樣將遊戲的程式作為書本導引部分的重點。成熟的語言：個人電腦時期.早在1979年微軟公司就開始和IBM協商給IBM的PC機提供一個燒在BIOS裡面的IBM Cassette BASIC。這些語言引入了許多對原始的家用電腦中BASIC的擴充套件，比如提供了更加好的字串操作功能以及對圖形的支援，另外還有對檔案系統的訪問以及一些額外的資料型別。其中更加重要的則是添加了結構化程式設計的功能，包括一些原始版本中不存在的流程控制語句和支援本地變數的子程式。新的圖形功能同樣為個人電腦中的電子遊戲打下的基礎，類似DONKEY.BAS的一些BASIC程式展示了個人電腦所具有的功能。但是在二十世紀八十年代的後半段，新的電腦則是比起以往的電腦擁有更加強大的資源控制能力。於此同時，計算機漸漸的從一個業餘愛好者感興趣的東西過渡到一個人們日常使用的工具，所以編寫程式對使用者的重要性漸漸地減弱。當然BASIC的重要性也漸漸地減弱起來，儘管依然還有許多的BASIC語言版本。編譯型BASIC語言和CBASIC仍然使用在許多的IBM 4960系統上。隨著微軟公司Visual Basic的釋出BASIC的語言的好運似乎又一次迴歸了過來。很難確切的說Visual Basic到底是不是BASIC語言，因為它較之前的版本有很大的改變——以基於物件以及事件驅動為的設計目標的語言。它唯一顯著的與BASIC語言相關的地方就是相似的語法，但是語法本身也不能完全定義這種語言，因為大多數Visual Basic的開發都是使用「拖動－放置」的方法，開發者不需要為一些常用的物件比如按鈕和捲軸去寫所有的程式碼。這個可以看成是BASIC語言的一種進化，一些早期的Dartmouth BASIC的特有的功能被保留了下來，比如行號和INPUT關鍵字等。有趣的是，BASIC語言最開始的時候是作為一種初學者的語言，微軟最初依舊是將Visual Basic定位於向愛好者提供的一種語言，但是在VB 3.0釋出之後不久就在小型商業程式的使用中迅速的傳播開來。儘管有很多高階的程式設計師始終在嘲笑它，但是VB正是有效的符合了小型商用程式的要求，即重點是簡單的開發，而執行的速度則是次要的因素。在那個時候, Windows 3.1已經是足夠的快了，很多商業有關的程式只要不是牽涉到大量的資料，幾乎是可以在一眨眼之間完成的，即使使用的是一種非常慢的語言。許多公司的老闆發現他們透過很少的一些步驟就可以創建出一個小型的但是有用的程式來滿足他們特定的需求。最終，在VB3的冗長的生命週期中，對於Visual Basic知識的掌握成為了一種非常有用的職業技能.這種語言，就像它的前輩QBASIC一樣，同時也成為了業餘遊戲開發者喜愛的語言之一。BASIC語言的種類.以下是同樣的執行結果，但用不同時期的BASIC的方式所寫的範例。行號型別.這是第一代的BASIC，例如早期BASICA、GW-BASIC……等，BASIC直譯器。這類的BASIC程式的特徵，就是每一行的程式碼前面都有一個數字作為「行號」。由於這種型別的BASIC程式的寫法，很容易濫用GOTO的跳躍指令，以及程式碼沒有辦法使用到縮排去區分割槽段，因此很容易導致麵條式程式碼。10 INPUT "What is your name: ", U$20 PRINT "Hello "; U$30 INPUT "How many stars do you want: ", N40 S$ = ""50 FOR I = 1 TO N60 S$ = S$ + "*"70 NEXT I80 PRINT S$90 INPUT "Do you want more stars? ", A$100 IF LEN(A$) = 0 THEN GOTO 90110 A$ = LEFT$(A$, 1)120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30130 PRINT "Goodbye "; U$140 END無行號型別.這是第二代的BASIC，例如QuickBASIC、PowerBASIC。這時期，同時有功能相近的直譯器與編譯器的版本出現。這類的BASIC程式的特徵，是不使用行號，改使用標籤作為跳躍點，與使用函式或副程式的方式，以及可使用縮排，將程式結構化。INPUT "What is your name: ", UserName$PRINT "Hello "; UserName$DOINPUT "How many stars do you want: ", NumStarsStars$ = STRING$(NumStars, "*")PRINT Stars$DOINPUT "Do you want more stars? ", Answer$LOOP UNTIL Answer$  ""Answer$ = LEFT$(Answer$, 1)LOOP WHILE UCASE$(Answer$) = "Y"PRINT "Goodbye "; UserName$物件導向化.這是第三代的BASIC，例如Visual Basic、REALbasic、StarOffice Basic。這類的BASIC程式的特徵，是匯入類別的應用，使用物件導向的繼承與程式碼封裝寫法。通常也使用「事件驅動」的寫法，雖然下面這個Visual Basic .NET的範例並不是用到事件驅動。Public Class StarsProgramPublic Shared Sub Main()Dim UserName, Answer, stars As String, NumStars As IntegerConsole.Write("What is your name: ")UserName = Console.ReadLine()Console.WriteLine("Hello {0}", UserName)DoConsole.Write("How many stars do you want: ")NumStars = CInt(Console.ReadLine())stars = New String("*", NumStars)Console.WriteLine(stars)DoConsole.Write("Do you want more stars? ")Answer = Console.ReadLine()Loop Until Answer  ""Answer = Answer.Substring(0, 1)Loop While Answer.ToUpper() = "Y"Console.WriteLine("Goodbye {0}", UserName)End SubEnd Class指令.Goto指令.Goto是一種程式執行無條件跳躍的指令，在有行號的BASIC裡後面是接要跳躍目的的行號。在無行號的BASIC裡後面則是接要跳躍目的的標記名稱。END指令.用於終止一個BASIC程式的執行。它的效果有些類似C語言裡的exit函式。所不同的是END不帶有任何的引數，僅僅是一條指令。需要注意的是，在Visual Basic中end指令用於強制退出整個程式，