指令碼語言是一種特殊的計算機語言,你可以用它來向其他軟體發出指令,如網路瀏覽器、伺服器或獨立的應用程式。今天許多最流行的編碼語言都是指令碼語言,如JavaScript、PHP、Ruby、Python和其他一些語言。
由於指令碼語言使編碼更簡單、更快速,它們被廣泛用於網路開發就不足為奇了。
然而,這並不是它們的唯一應用領域。還有用於作業系統、統計分析軟體、辦公應用程式、遊戲引擎和許多其他種類平臺的指令碼語言。
什麼是指令碼語言?
指令碼語言可以在一個特定的執行環境中執行不同的動作,如自動執行任務、增強上級軟體的功能、執行配置、從資料集中提取資料等。
指令碼語言可以通過兩種方式產生:
- 執行時環境可以引入自己的指令碼語言,如GNU作業系統的Bash或微軟Office應用程式的VBA。
- 執行時環境可以採用現有的指令碼語言,例如,MongoDB的
mongo
shell是圍繞JavaScript建立的。
另一方面,有時是指令碼語言首先存在,並誕生了它自己的父平臺–無論這聽起來多麼奇怪。
這就是Node.js的情況,它是一個後端執行環境,它的誕生是為了讓網路開發者不僅在前端使用JavaScript,而且在後端也使用,遵循 “JavaScript無處不在 “的正規化。
指令碼在程式設計中意味著什麼?
指令碼的動作本質上是寫一系列的命令,由應用程式或指令碼引擎逐一解釋。儘管指令碼指導平臺做什麼(給它一個指令碼來閱讀和解釋),但執行是由執行時環境而不是由指令碼語言本身來完成。
這就是指令碼語言與程式語言的不同之處,比如Java,你可以 “只寫一次,在任何地方執行”(Java的官方口號,意思是Java程式可以作為獨立的應用程式在任何環境中執行;自從被創造出來後,它也成為WORA原則,指的是跨平臺能力)。
指令碼語言與程式語言
儘管 “指令碼語言 “和 “程式語言 “這兩個詞經常被交替使用,但它們並不是一回事。
特定平臺與平臺無關
指令碼語言是特定平臺的,而程式語言是平臺無關的(跨平臺),因為它們有自我執行的能力。例如,你可以在任何作業系統上執行一個Java程式。
(大部分)解釋的與編譯的
雖然程式語言是編譯的,但指令碼語言大多是解釋的–儘管有一些指令碼語言既是編譯的又是解釋的,如Python和Groovy。
“編譯 ”意味著程式語言有自己的編譯器,在執行前將語法翻譯成機器程式碼。相比之下,指令碼語言在執行時由它們所執行的平臺的直譯器逐行進行解釋。
在執行時更快與更慢
由於實現上的差異,程式語言比指令碼語言執行得更快,因為它們不必實時編譯。編譯器在執行前還執行集體錯誤處理,而直譯器一行一行地評估程式碼,因此每次遇到錯誤時都會暫停(或完全停止)。
這也增加了指令碼語言的總執行時間,即使在現代和更快的硬體上,這比以前問題更小。
更多與更少的程式碼密集型
程式語言的程式碼密集度更高,因為你必須手動完成許多事情,而在指令碼語言的情況下,這些事情是由平臺處理的。如果你使用指令碼語言,你必須寫更少的程式碼。
獨立的應用程式與作為堆疊一部分的應用程式
有一些事情你根本無法用指令碼語言來做。最重要的是,你不能用指令碼語言建立獨立的桌面和移動應用程式,因為沒有執行時環境來解釋它們。
例如,你只能將WordPress和Laravel等PHP框架用於網站和網路應用,因為它們使用網路瀏覽器作為其執行環境。同樣,WordPress的移動應用程式在移動執行環境中執行,如Capacitor,它結合了網路檢視。
指令碼與程式語言 – 差異概述
因此,指令碼語言與程式語言的主要區別如下:
指令碼語言 | 程式語言 |
特定的平臺 | 平臺不可控(跨平臺) |
(主要是)解釋式 | 編譯的 |
執行時較慢 | 執行時較快 |
程式碼密集度較低 | 程式碼密集度較高 |
建立作為堆疊一部分的應用程式 | 建立獨立的應用程式 |
關於指令碼語言的困惑
有一些關於指令碼語言的困惑是你經常會遇到的,所以在進入最佳指令碼語言之前,我們先來看看這些困惑。
最重要的是,談論前端與後端指令碼語言並沒有什麼意義,儘管你在網上看到的許多文章都使用這種分組方式。
實際上,目前只有一種前端指令碼語言在使用,那就是JavaScript(以前也有其他的,比如ActionScript和JScript,但現在都已經廢棄了)。
在指令碼語言的背景下,重要的不是前端與後端,而是指令碼語言可以執行的執行環境。
請注意,”前端 “只是指網路瀏覽器可以解釋的東西(影象、字型、標記、樣式表、指令碼、其他型別的靜態檔案)。例如,嘗試直接從web瀏覽器中開啟一個PHP檔案:你不能,因為PHP應用伺服器必須解釋它–所以PHP在web開發的背景下是一種後端指令碼語言,而在指令碼語言的背景下是伺服器棧(如LAMP)的應用層。
除了Web開發(前端和後端指令碼),指令碼語言還可以用於多種用途,如程式設計和配置作業系統和特定的應用程式/環境,運算元據集,自動化任務,以及許多其他用途。
一種指令碼語言也可以在多種環境中執行。
哪些不是指令碼語言
在討論最好的指令碼語言之前,讓我們看看那些有時被錯誤地稱為指令碼語言的編碼語言,但你不能用它們來編寫指令碼:
- 標記語言,如HTML和XML。在HTML中,有事件處理的屬性,如onclick和onmouseover,但這些仍然是JavaScript的回撥。
- 樣式表語言,如CSS、Sass和LESS。
- 任何一種建立在任何指令碼語言之上的庫或框架,如jQuery、PostCSS、React、Vue、Angular、Rails、Grails、Django、Laravel、WordPress和其他。
- 被編譯成指令碼語言的語言,如TypeScript和CoffeeScript。
- SQL,因為它是用於管理關聯式資料庫管理系統(RDBMS)中的資料,如MySQL和MariaDB。他們不允許你編寫動態功能。然而,許多RDBMS有外殼,讓你使用指令碼語言(如MySQL Shell中的JavaScript或Python)。
- 一個或多個指令碼語言的執行環境,如NodeJS。
13種最佳指令碼語言
有許多偉大的指令碼語言值得在本指南中提及,但它們已不再處於活躍的開發狀態。然而,以下13種指令碼語言是定期更新的,而且也在生產中使用。
因此,如果你正在考慮學習一種新的指令碼語言作為新的職業道路,它們都值得一試。
1. JavaScript/ECMAScript
JavaScript
JavaScript是ECMA-262標準的一個實現,該標準定義了ECMAScript(ES)通用指令碼語言。換句話說,JavaScript是ECMAScript語言的一種方言,因此它沒有獨立的規範,但使用與ECMAScript相同的語法。
JavaScript有一流的函式(函式被視為變數),並支援基於原型的物件導向的程式設計(現有的物件被作為原型重複使用)。
程式碼示例
ECMAScript使用的是大括號式的語法。下面的JavaScript程式碼例子將1到10的數字相加,並將結果輸出到控制檯(你可以在你的網路瀏覽器的JavaScript控制檯中通過點選F12來測試):
let total = 0, count = 1; while (count <= 10) { total += count; count += 1; } console.log(total); // 55
Source: Eloquent JavaScript by Marijn Haverbeke: Introduction
使用案例和環境
JavaScript是現代網路瀏覽器使用的指令碼語言,例如Chrome的V8引擎和Mozilla的SpiderMonkey引擎。除了前端網路開發,它也可以在非瀏覽器環境中使用。NodeJS執行環境的建立是為了讓網路開發者能夠在後端使用它。
一些NoSQL資料庫管理系統的外殼,如MongoDB和Apache CouchDB,以及一些關係型資料庫管理系統,如前面提到的MySQL外殼,也使用它作為指令碼語言。
2. PHP
PHP
PHP是一種通用的、開源的指令碼語言,用於後端網路開發。這個縮寫最初代表 “個人主頁”,因為PHP最初是為了給靜態HTML頁面新增動態功能而建立的。
從那時起,PHP已經發展成為一種獨立的語言,所以現在這個縮寫是在 “超文字前處理器 “的意義上使用。PHP是鬆散型的(不必宣告變數的資料型別),可以嵌入到HTML文件中,並且也有物件導向的特性。
程式碼示例
PHP有一個類似C語言的語法。下面的PHP程式碼例子建立了一個有四個元素的數字陣列,在它們之間迴圈,每項乘以2,並在迴圈結束後取消 $value
變數的設定。
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); ?>
Source: PHP documentation: Control Structures
使用案例和環境
PHP 可以在不同的 HTTP 伺服器上執行,其中 Apache 和 Nginx 是最流行的。
最常見的PHP伺服器棧是LAMP(Linux,Apache,MySQL,PHP),LEMP(Linux,Nginx,MySQL,PHP),以及WAMP(Windows,Apache,MySQL,PHP)和MAMP(macOS,Apache,MySQL,PHP)。
許多流行的內容管理系統(CMS),如WordPress、Drupal和Joomla,以及Web應用框架,如Laravel、Symfony和CodeIgniter,也都使用了PHP語言,它們都建立在PHP語言之上,並以額外的功能來增強它。
你也可以使用PHP進行本地WordPress開發。請看我們關於Javascript和PHP的主要區別的深入指南。
3. Python
Python
Python目前是GitHub上第二大最流行的編碼語言(僅次於JavaScript)。它因其清晰簡潔的語法而受到喜愛–用Python編碼時,你需要輸入的東西比大多數語言少得多。
Python是一個自由和開放的專案,由Python軟體基金會管理。它支援結構化、物件導向和函數語言程式設計正規化,並有一個廣泛的標準庫,是常用的Python模組的集合。
程式碼示例
Python不使用大括號,分號是可選的,所以程式碼很容易讀和寫。下面的Python程式碼例子在0到4之間的整數中迴圈,並將它們列印出來:
count = 0 while count < 5: print(count) count += 1
Source: Learn Python: Loops
使用案例和環境
最流行的 Python 實現是 CPython,用 C 語言編寫。它也是你和Python語言一起下載的參考實現。儘管Python是一種解釋型語言,但CPython同時使用了編譯和解釋步驟。首先,它將原始碼編譯成位元組碼(與機器碼不同),在執行時進行解釋。
除了CPython,Python還有其他的執行時環境,最重要的是PyPy,它省略了編譯步驟,只做JIT(即時)解釋。Python的實現是跨平臺的,意味著它們可以在多個作業系統上執行,包括Linux、Windows和macOS。
Python語言經常被用於機器學習、後端網路開發(Django是最流行的網路框架)、資料分析、自動化、科學計算和網路抓取。
要了解學習Python的最佳方法,請檢視我們關於Python教學的博文。
4. Ruby
Ruby
Ruby是一種開源的、通用的指令碼語言,具有緊湊和易於閱讀的語法。它遵循物件導向程式設計的原則,可以讓你寫出簡潔而有邏輯的程式碼,使其成為最容易學習的程式語言之一。在Ruby中,所有東西都是一個物件–甚至包括在大多數語言中屬於基元的型別,如布林和整數。
物件導向的概念,如繼承、混合和元類,也被大量使用。
儘管Ruby有一個純粹的物件導向的設計,但它也支援程式性程式設計(在類之外定義的函式和變數屬於 Self
物件)和功能性程式設計(通過匿名函式、閉包和延續)。
程式碼示例
Ruby有一個類似於Python的簡潔的語法。下面的Ruby程式碼示例將 KaraokeSong
類定義為 Song
類的一個子類:
class KaraokeSong < Song def initialize(name, artist, duration, lyrics) super(name, artist, duration) @lyrics = lyrics end end
Source: Programming Ruby reference guide: Classes, Objects, and Variables
使用案例和環境
Ruby主要用於後端網路開發,為一些強大的網路應用框架提供動力,如Ruby on Rails。許多流行的網站和應用程式都執行在Ruby on Rails上,如Airbnb、Shopify、GitHub和Hulu。
Ruby也是許多流行的網路開發工具所使用的語言,最明顯的是Sass CSS前處理器、Jekyll靜態網站生成器和Vagrant虛擬機器環境。
Ruby的預設實現是YARV(Yet Another Ruby Virtual Machine)。它改變了Ruby的原始直譯器Matz’s Ruby Interpreter(也是Ruby MRI或CRuby),該直譯器曾因速度和可擴充套件性問題而受到批評。
還有幾個競爭性的Ruby執行環境,如JRuby(讓你在Java虛擬機器上執行Ruby),mruby(一個輕量級的實現,你可以嵌入到你的應用程式中),TruffleRuby(Oracle的Ruby直譯器建立在GraalVM上),Rubinius(Ruby的雲原生虛擬機器),以及其他。
5. Groovy
Groovy
Groovy是一種為Java虛擬機器(JVM)編寫的令人難以置信的靈活語言,既可以作為指令碼語言,也可以作為程式語言。它是一個開放原始碼專案,由Apache軟體基金會維護。Groovy是一種物件導向的語言,擴充套件了 java.lang.Object
超類。
它同時支援靜態和動態型別(型別檢查可以在編譯時和執行時進行),並對列表、關聯陣列、正規表示式和標記語言(如HTML和XML)提供本地支援。
你可以將Groovy與現有的Java庫一起使用。
程式碼示例
Groovy有一個與Java相容的語法,使用大括號。下面的Groovy程式碼示例定義了李蓮英類的緯度和經度屬性以及 getAt()
方法:
@Immutable class Coordinates { double latitude double longitude double getAt(int idx) { if (idx == 0) latitude else if (idx == 1) longitude else throw new Exception("Wrong coordinate index, use 0 or 1") } }
Source: Groovy Documentation: Semantics
使用案例和環境
由於Groovy可以編譯成Java位元組碼,你可以把它作為一種類似於Java的通用程式語言。在這種情況下,你可以在執行前使用groovyc編譯器(相當於javac)將原始碼編譯成位元組碼。
然而,也有許多Groovy的實現,讓你把它作為一種指令碼語言使用。最受歡迎的是Grails網路應用框架(以前稱為Groovy on Grails)和Gradle構建自動化工具,但也有其他一些。
6. Perl
Perl
Perl是一種通用的指令碼語言,已經存在了三十多年(從1987年開始)。最初,它是作為一種用於報告處理的UNIX指令碼語言建立的。這也是它名字的由來,因為Perl的縮寫是 “實用提取和報告語言(Practical Extraction and Reporting Language)”。
Perl語言在20世紀90年代開始流行,當時程式設計師們開始廣泛使用它來編寫CGI(Common Gateway Interface)指令碼,這是一種較早的網路伺服器介面規範(目前,它主要被傳統網站使用)。
儘管是比較早的參與者,Perl仍然是TIOBE指數中的第11位,也是GitHub上最受歡迎的語言的第21位(截至2020年10月)。
程式碼例項
Perl的語法與C語言相似。下面的Perl程式碼示例首先定義了計算並返回一個數字的平方的 square()
子程式,然後傳遞數值8作為引數,執行該子程式,並將結果儲存到 $sq
變數中:
sub square { my $num = shift; my $result = $num * $num; return $result; } $sq = square(8);
Source: Perl docs: Perl Intro
使用案例和環境
儘管這些天來,Perl 並不是網路開發者最經常的選擇,但它還是可以成功地用於後端開發。除了CGI執行環境,它還可以在Apache和Nginx網路伺服器上執行–LAMP棧實際上是LAMPP,代表Linux、Apache、MySQL、PHP和Perl。
還存在一些Perl網路開發框架,其中Catalyst、Mojolicious和Dancer是最流行的框架。
Perl被一些著名的網站和應用程式所使用,如亞馬遜、IMDB、Booking.com和BBC iPlayer。它也被用於其他領域,如網路程式設計和系統管理。你還可以檢視Perl綜合檔案網路(CPAN),那裡有25000多個開源Perl專案供你下載。
7. Lua
Lua
Lua是一種快速和輕量級的指令碼語言。lua “一詞在葡萄牙語中是 “月亮 “的意思,因為該語言是由巴西里約熱內盧的天主教大學開發和維護的。Lua支援程式性、物件導向和函數語言程式設計正規化。
由於Lua的直譯器是用C語言編寫的,它可以很容易地使用其C API嵌入到應用程式中。也就是說,你可以使用Lua來擴充套件現有的以C語言編寫的應用程式,如C、C++、C#、Java、Perl、Ruby和其他語言。
程式碼示例
Lua有一個簡潔易讀的語法,類似於Python和Ruby。下面的Lua程式碼例子顯示瞭如何使用 if-then-else
語句。首先,它對 op
變數進行評估,然後根據其值進行基本的算術運算:
if op == "+" then r = a + b elseif op == "-" then r = a - b elseif op == "*" then r = a * b elseif op == "/" then r = a / b else error("invalid operation") end
Source: Programming in Lua reference guide: Statements
使用案例和環境
預設的Lua實現並不直接解釋原始碼,而是首先將其編譯成位元組碼,然後在Lua虛擬機器上執行。由於所有這些都是在執行時發生的,所以你不需要執行手動編譯步驟(儘管你可以選擇在執行時之前編譯Lua以提高效能)。
還有其他的Lua實現,如 LuaJIT、LuaVela和其他許多實現。
Lua經常被用來開發視訊遊戲,如《憤怒的小鳥》、《魔獸世界》和《嚴峻的凡丹戈》。由於它很容易嵌入,它也是嵌入式裝置的經常性選擇,如機頂盒、汽車的儀表盤(如沃爾沃)、IP攝像機(如思科)等。
它也可以用於網路開發,因為Apache和Nginx伺服器都有一個Lua模組(這裡是Apache的mod_lua,這裡是Nginx的ngx_http_lua_module)。維基百科選擇Lua作為其模板指令碼語言,Adobe Photoshop Lightroom的使用者介面也是用Lua編寫的。
8. Bash
Bash
Bash既是GNU作業系統的命令列直譯器(shell)的名字,也是屬於指令碼語言的名字。Linux “實際上是使用Linux核心的GNU作業系統(核心是作業系統的核心部分,它是作業系統載入的第一個程式)。
它是原始UNIX的Bourne shell(sh)的替代品–Bash的首字母縮寫代表 “Bourne Again SHell”(”重生的外殼 “的雙關語)。
除了作為Bourne shell語法的超集,Bash還包括其他shell指令碼語言的功能,如KornShell(ksh)和C shell(csh)–例如,命令列編輯和命令歷史。你可以在互動式模式下使用Bash(一次執行一條命令並等待機器的回覆)和指令碼模式(一次執行一組命令–Bash指令碼)。
程式碼示例
像大多數CLI指令碼語言一樣,Bash有一個簡單的、描述性的語法。下面的Bash程式碼例子從當前資料夾中選擇一個檔案,並輸出一個包含檔名稱和索引的資訊:
select fname in *; do echo you picked $fname \($REPLY\) break; done
Source: Bash Reference Manual: Conditional Constructs
使用案例和環境
你可以使用Bash對你的作業系統進行修改和執行不同的操作,比如執行命令,執行大多數人都會使用圖形使用者介面的任務(比如建立、移動或刪除資料夾和檔案),定製和自動化管理任務,連線到遠端伺服器,以及其他許多操作。
Bash是許多基於Unix的作業系統的預設外殼,包括大多數Linux發行版和所有macOS版本,直到2019年用Z shell(Zsh)取代Bash的macOS Catalina。你也可以在Windows 10上執行Bash指令碼,使用微軟開發的Windows Subsystem for Linux(WSL)相容層。
9. PowerShell
PowerShell
最初,PowerShell是一種僅用於Windows作業系統的命令列外殼和指令碼語言。此後,微軟將其開源並從只能建立Windows應用程式的.NET Framework轉移到.NET Core,可以為Windows、Linux和macOS建立應用程式。這意味著PowerShell現在是跨平臺的。
它也從Windows PowerShell改名為PowerShell Core,與底層框架相對應。與大多數命令列shell不同,PowerShell接受並返回.NET物件而不是純文字,這為任務自動化提供了新的機會。
程式碼示例
PowerShell有一個緊湊的語法,使得在命令列中工作更快。下面的PowerShell程式碼例子建立了一個boot.ini檔案的備份,並將其儲存到boot.bak檔案中:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Source: PowerShell Documentation: Working with Files and Folders
使用案例和環境
您可以在Windows、Linux、macOS作業系統和一些ARM裝置(如可穿戴裝置、多媒體播放器、平板電腦和其他消費類電子裝置)上使用PowerShell。
你可以使用PowerShell進行系統管理、任務自動化和配置管理。要找到PowerShell模組和指令碼,你也可以檢視PowerShell Gallery和微軟的官方樣本指令碼集。
10. R
R
R既是一種軟體環境,也是一種指令碼語言,你可以用它來進行統計計算、資料分析和圖形顯示。它是一個免費和開源的GNU專案,也是S統計計算語言的一個實現(現在已經不在積極開發中)。
R允許你使用許多不同的統計技術,如經典的統計測試、聚類、時間序列分析、線性和非線性建模,以及其他。
程式碼示例
R的語法與大多數指令碼語言不同,也有一些不尋常的元素–例如,主要的賦值運算子是 <-
,而不是 =
等號,而且它有無迴圈–在Sharon Machlis的《R初學者指南》中可以看到更多關於R語法的怪癖。
下面的R程式碼例子為 fruit
向量(R中包含相同型別元素的基本資料結構)定義了一個 names
屬性,使用字母數字名稱(orange
, banana
, apple
, peach
)來幫助識別其組成部分。之後, lunch
(或另一個)子向量可以使用其別名訪問每個元件:
> fruit <- c(5, 10, 1, 20) > names(fruit) <- c("orange", "banana", "apple", "peach") > lunch <- fruit[c("apple","orange")]
Source: An Introduction to R: Index vectors; selecting and modifying subsets of a data set
使用案例和環境
R軟體環境是跨平臺的;你可以在Windows、Linux和macOS作業系統上執行它。預設的R實現也可以從其他一些指令碼語言中獲得,如Python和Perl。這意味著,你可以使用這些指令碼語言訪問R的所有統計功能。
除了預設的R環境,你也可以在其他環境中使用R指令碼語言,比如pqR(代表 “相當快的R版本”)和Renjin(在Java虛擬機器之上的R實現)。
11. VBA
VBA
VBA是Visual Basic for Applications的縮寫,它是Visual Basic 6程式語言的一個實現(自2008年以來沒有在積極開發)。它是為微軟Office應用程式建立的,使開發人員能夠將重複的任務自動化,增加新的功能,並與文件的終端使用者互動。
與Visual Basic類似,VBA遵循事件驅動的程式設計正規化,將使用者行為等事件置於驅動程式流程的中心。
由於Microsoft Office應用程式有一個圖形使用者介面,你可以將VBA指令碼附加到選單按鈕、鍵盤快捷鍵、巨集(可程式設計模式)和OLE事件(物件連結和嵌入,讓你從另一個應用程式控制;這是微軟的專有技術)。
程式碼示例
由於VBA是基於Visual Basic(它是BASIC的增強版),它使用的語法類似於BASIC(初學者多用途符號指令程式碼)系列的語言–這意味著它對初學者非常友好。
下面的VBA程式碼示例使用 SignatureInfo
物件的 GetCertificateDetail()
方法來獲取數字證書的到期日:
Sub GetCertDetails() Dim objSignatureInfo As SignatureInfo Dim varDetail As Variant strDetail = objSignatureInfo.GetCertificateDetail(certdetExpirationDate) End Sub
Source: Office VBA Reference: SignatureInfo object
使用案例和環境
VBA指令碼語言被嵌入到大多數微軟Office應用程式中,分別是Access、Excel、Office for Mac、Outlook、PowerPoint、Project、Publisher、Visio和Word–在微軟的文件網站上每一個都有單獨的參考指南,而一般的VBA概念則在庫參考中詳細說明。
除了微軟的Office應用程式,還有其他應用程式也支援VBA,如AutoCAD和CorelDRAW。
12. Emacs Lisp
Emacs Lisp
Emacs Lisp是一種特定領域的指令碼語言,為GNU Emacs文字編輯器設計。它是Lisp程式語言家族的一種方言(名字來自LISt Processor)。
由於Emacs Lisp被設計為在程式碼編輯器中使用,它帶有該環境特有的功能集,如文字掃描和解析、緩衝區(可編輯文字的物件)和顯示管理,以及其他。
Emacs Lisp指令碼語言與編輯器介面本身緊密結合,所以每個命令也是一個Lisp函式,你可以從你的指令碼中呼叫,定製引數也是Lisp變數。
程式碼例項
Emacs Lisp的語法是基於全括號的字首符號,如果你以前沒有使用過任何Lisp語言,一開始會有點難讀。
下面的Emacs Lisp程式碼例子定義了兩個變數(符號),並給每個變數分配了一個值列表–一個樹木列表(pine
, fir
, oak
, maple
)到符號trees
,一個食草動物列表(gazelle
, antelope
, zebra
)到符號 herbivores
:
(setq trees '(pine fir oak maple) herbivores '(gazelle antelope zebra))
Source: An Introduction to Programming in Emacs Lisp: Setting the Value of a Variable
使用案例和環境
Emacs文字編輯器是一個跨平臺的應用程式,你可以安裝在Windows、Linux和MacOS機器上。
使用Emacs Lisp指令碼語言,你可以擴充套件和定製程式碼編輯器,重複和自動處理,建立圖表,將焦點限制在特定區域(為了安全),搜尋正規表示式,儲存文字,定義模式和鍵盤對映,向使用者提問,以及執行許多其他操作。
還有一些Emacs Lisp的配置框架–Doom Emacs和Spacemacs是最著名的。
13. GML
GML
首字母縮寫GML代表GameMaker語言。它是遊戲開發中使用的特定領域指令碼語言的一個好例子。GML是屬於GameMaker Studio 2的專有指令碼語言,這是一個跨平臺的遊戲引擎和開發平臺,由YoYo Games擁有和維護。
儘管GML主要用於控制遊戲物件,但它不是一種物件導向的語言,而是一種程式性語言。它允許你從任何遊戲物件中呼叫自定義指令碼。
除了GML指令碼語言,GameMaker Studio 2還有一個視覺化的指令碼工具,叫做拖放(DnD)。由於GameMaker Studio 2的靈活性,你也可以將DnD與你的GML指令碼混合起來。
程式碼示例
GML的語法類似於JavaScript和其他類似C的語言。
下面的GML程式碼示例使一個遊戲物件以每步5畫素的速度向螢幕上的滑鼠指標水平移動。一旦它到達指標的當前位置,指令碼就會建立一個爆炸效果層,執行它(螢幕上有一個爆炸效果),然後銷燬這個例項(爆炸效果被刪除):
if mp_linear_step(mouse_x, mouse_y, 5, 0) { instance_create_layer(x, y, "Effects", obj_Explosion); instance_destroy(); }
Source: GameMaker Studio 2 Docs – Scripting – GML Reference – Movement and Collisions – Motion Planning
使用案例和環境
GML是由GameMaker Studio 2解釋的,如果你想用這種指令碼語言開發遊戲,你需要購買。
價格取決於你想要建立遊戲的平臺–Mac和Windows遊戲是最便宜的;跨平臺(Windows、macOS、Ubuntu)桌面遊戲、HTML5網頁遊戲、UWP(Universal Windows Platform)遊戲和跨平臺(Android、Fire、iOS)移動遊戲處於中等水平;而PS4、Xbox One和Nintendo Switch是最昂貴的。
用GML製作的視訊遊戲的一些例子包括《黑洞》、《10秒忍者X》、《死亡賭注》、《Deltarune》和其他一些遊戲。
小結
毫無疑問,指令碼語言是迷人的。它們有許多不同的變化、語法和實現方式,可以用來做很多事情。
從建立動態網站,到自動化系統管理,到建立視訊遊戲,等等。
關於指令碼語言,需要記住的最重要的三點是。
它們不能獨立執行,而總是需要一個帶有該指令碼語言直譯器的環境(實現,執行時間)。
有時你可以使用通用的指令碼語言來訪問主要為其他程式設計或指令碼語言建立的環境和平臺。想想JRuby (讓你在Java虛擬機器上執行Ruby),Renjin (同樣在JVM上的R實現),Rpy2 (你可以從Python中使用的R介面),就是很好的例子。
最後,在學習一種新的指令碼語言之前,使用TIOBE指數或GitHut檢查一下它目前的流行程度總是一個好主意。
根據它,你還可以找到更多或更少的樣本指令碼、GitHub倉庫、模組庫、參考指南、詳細的手冊和應用展示,這將有助於你開始使用該語言……並獲得報酬更高的專案和工作!
評論留言