“易語言”十分鐘入門教程 易語言” 第 第 第 第 第 第 第 第 第 第 1 分鐘:序曲 2 分鐘:“易語言”初相識 3 分鐘:第一個程序 4 分鐘:第一個類庫 5 分鐘:猜數(shù)字游戲 6 分鐘:基本語法 7 分鐘:面向?qū)ο?8 分鐘:特色語法 9 分鐘:答題時間 10 分鐘:收工嘍 親愛的朋友, 您愿意花十分鐘的時間, 來了解一門全新的編程語言 “易語言” 嗎? 分鐘: 第 1 分鐘:序曲只有十分鐘,時間緊迫,讓我們立刻開始,不多說一句廢話(這一句話本身算不 算廢話?哈哈)。 其實用不著那么緊張, 以人均每分鐘閱讀 300 字計算, 分鐘足以讀完 3000 字。 10 況且我也不打算寫那么長,因為還要給親愛的讀者留足思考時間。 本文作為十分鐘入門教程,無法面面俱到,只能重點介紹初學(xué)者著重關(guān)注、關(guān)心 或感興趣的部分。本文的主要目的是:讓讀者在很短的時間內(nèi)對“易語言”有一 個大概的了解和感性的認(rèn)識。如果想獲取更深入、更詳盡、更權(quán)威、更條理、更 富邏輯性(或者更抽象、更死板?)的資料,請去拜讀易語言官方提供的《“易 語言” 白皮書》 ——這本書寫的很好, 文筆比我強多了! 本文大量參考該白皮書。 (在本文中,我偶爾會把“易語言”說成“飛揚易語言”或“易語言”,總之都 是一樣?xùn)|東。) 分鐘: 語言” 第 2 分鐘:“易語言”初相識先通過簡單幾句話,了解一下飛揚易語言的大概: 完全面向?qū)ο螅?具有類和接口的完整概念 (從現(xiàn)在開始忘掉結(jié)構(gòu)化編程吧) 具有自動垃圾回收機制(你只管創(chuàng)建對象,而不必自己釋放,輕松多了) 源代碼將被編譯為本地機器碼,程序具有很高的執(zhí)行效率(當(dāng)然還是比不 上 C 語言) 同一套源代碼,可以被編譯為多個操作系統(tǒng)(Windows/Linux/...)下的 可執(zhí)行文件,這是其跨平臺機制 可將源代碼編譯為易語言類庫,以達(dá)到代碼復(fù)用。同一個易語言類庫可以 在多個平臺下通用。此外,還可以使用 C/C++開發(fā)易語言“本地類庫”。開發(fā) 類庫非常輕松。 有一個“系統(tǒng)”類庫(類似于原易語言中的“核心支持庫”)為程序提供 最核心支持,是程序運行所必需的,其文件大小只有 150K,小巧玲瓏。 有一個跨平臺的圖形用戶界面(GUI)類庫,基于 wxWidgets,目前還不 太成熟。 目前各方面的類庫都非常缺乏,不過時間會完善一切 將會有一個包括“可視化界面設(shè)計”在內(nèi)的完善的集成開發(fā)環(huán)境(IDE), 其大部分代碼將使用飛揚易語言自身編寫。(暫時先用文本編輯器寫程序吧, 呵呵,推薦 emEdit,對漢字的語法高亮支持比較好) 飛揚易語言有不少特色語法,如“友好名稱(類自然語言編程)”、“三 聯(lián)判斷式”、“多返回值”、“雙向賦值”、“屬性表”等等。 我想有必要再強調(diào)一遍:“易語言”跟原來的易語言(1.x - 4.x)是完全不同 的兩個編程語言(如果非要找出相同點話,它們都是易語言公司的產(chǎn)品,作者都 是吳濤)。前者在編程理念上要先進(jìn)許多,是未來發(fā)展的趨勢;后者在編程資源 上更具優(yōu)勢,是已經(jīng)逐漸成熟的實用產(chǎn)品。 分鐘: 第 3 分鐘:第一個程序公開 類 啟動類 { 公開 靜態(tài) 啟動() { 控制臺.輸出行("祖國您好!"); } } 請將以上代碼存為 hello.ef 文件,注意編碼格式必須是 Unicode(little endian)。 編譯命令行: ec hello.ef -ecl_name="程序" -starter_cls="啟動類" -out_mode=runable -out=hello.exe 以上命令行將編譯生成 hello.exe 文件,要執(zhí)行此程序,請確保易語言系統(tǒng)庫 文件“系統(tǒng).ncl”在當(dāng)前目錄下。 hello.exe 的執(zhí)行結(jié)果是在屏幕上輸出:祖國您好! 還記得嗎?吳濤教給我們的第一個易語言(舊版)程序也是“祖國您好!”。許 多人喜歡寫的“Hello world”,不過是一句淡淡的問候而已,哪象“祖國您好!” 這樣飽含深情?中國永遠(yuǎn)不缺少國際主義者,但我們急需的是民族主義者! (親愛的朋友,如果您只有三分鐘的時間,現(xiàn)在可以回去工作或休息了。但是我 誠摯地邀請您在百忙之中仍然抽出七分鐘時間來繼續(xù)讀完本文!) 分鐘: 第 4 分鐘:第一個類庫把上面的“第一個程序”的源代碼文件拿過來,不做任何改動,就可以把它編譯 為易語言類庫。 編譯命令行: ec hello.ef -out_mode=ecl -ecl_name="liigo" 其中, -out_mode=ecl” “ 表示編譯類庫 (而不可執(zhí)行文件) “-ecl_name="liigo"” , 指定的編譯后的類庫名稱(請您務(wù)必把其中的“l(fā)iigo”替換成您自己的名字, 因為這是您編譯的第一個易語言類庫啊,很有紀(jì)念意義呀)。 執(zhí)行上面的命令行,將編譯出類庫文件“l(fā)iigo.ecl”(如果您已經(jīng)把“l(fā)iigo” 替換為您的名字“張三”,那么生成的文件就是“張三.ecl”)。“.ecl”是易 語言類庫的固定后綴名,其含義是“Eyuyan Class Library”(易語言類庫)。 現(xiàn)在知道了吧,寫類庫跟寫程序一樣簡單啊。 要使用編譯后的類庫,需注意兩點:1、“引入”該類庫;2、確保此類庫位于系 統(tǒng)環(huán)境變量“ECLS_PATHS”所指定的目錄中(或位于當(dāng)前目錄中)。 分鐘: 第 5 分鐘:猜數(shù)字游戲 “猜數(shù)字”這個小游戲?qū)嵲谑欠浅7浅7浅=?jīng)典。通過這個小小的游戲源代碼, 我們不僅可以學(xué)到飛揚易語言的基本語法(定義類、定義類方法、定義變量、如 果、循環(huán)、方法調(diào)用……),還可以充分領(lǐng)略到面向?qū)ο蟮木幊趟枷搿?接下來的三分鐘里,我們的主題就是它了!第 5 分鐘,請您把它編譯成可執(zhí)行 文件(編譯方式見下文),自己玩游戲吧;第 6 分鐘,我將分別解釋其中涉及 的飛揚易語言基本語法;第 7 分鐘,我將講解其中的面向?qū)ο笏枷搿?公開 類 啟動類 //第 1 行 { 公開 靜態(tài) 啟動() //第 3 行 { 猜數(shù)字 猜 = 創(chuàng)建 猜數(shù)字(); //第 5 行 //猜數(shù)字 猜 = 創(chuàng)建 全自動猜數(shù)字(); 猜.猜(); //第 7 行 } } 類 猜數(shù)字 { 私有 整數(shù) 內(nèi)定數(shù)字 = 66; //TODO: 隨機選擇一個數(shù) 公開 猜() {循環(huán) (猜數(shù)字() == 假) //第 17 行 { } } 私有 邏輯 猜數(shù)字() { 控制臺.輸出行("請猜 1-100 中的一個數(shù):"); 整數(shù) 數(shù) = 獲取數(shù)字(); 控制臺.輸出(數(shù)); 如果(數(shù) == 內(nèi)定數(shù)字) //第 28 行 { 控制臺.輸出行("猜對了,恭喜??!"); 返回 真; } 如果(數(shù) > 內(nèi)定數(shù)字) //第 34 行 控制臺.輸出行("太大了,再來一次。 "); 否則 控制臺.輸出行("太小了,再來一次。 "); 返回 假; //第 39 行 } 擴展 整數(shù) 獲取數(shù)字() { 返回 控制臺.輸入整數(shù)(); } } 類 全自動猜數(shù)字 <基類 = 猜數(shù)字> //第 49 行 { 整數(shù) 當(dāng)前數(shù)字 = 0; 擴展 整數(shù) 獲取數(shù)字() { 當(dāng)前數(shù)字++; //第 55 行 返回 當(dāng)前數(shù)字; } } //第 13 行 編譯方法:將以上代碼存為“猜數(shù)字.ef”文件(注意編碼格式必須是 Unicode(little endian)),然后執(zhí)行以下命令行: ec 猜數(shù)字.ef -ecl_name="程序" -starter_cls="啟動類" -out_mode=runable -out=猜數(shù)字.exe 分鐘: 第 6 分鐘:基本語法第 1 行,定義類,“類”“公開”為關(guān)鍵字(注:“公開”“擴展”“私有” “靜態(tài)”等在白皮書中被稱為屬性,其實與關(guān)鍵字類似,下面不再明確區(qū)分); “//”為注釋的開始,直至本行結(jié)束(另一種多行注釋形式是“/* ... */”) 第 3 行,定義類成員方法“啟動()” 第 5 行,定義類型為“猜數(shù)字”的變量“猜”,創(chuàng)建類型為“猜數(shù)字”的對象, 并將創(chuàng)建后的對象賦值給變量“猜”(即變量“猜”引用了該對象) 第 7 行,調(diào)用“猜”(嚴(yán)格的說是“變量‘猜’所引用的對象”)的成員方法 “猜()” 第 13 行, 定義一個 “私有” 的、 數(shù)據(jù)類型為 “整數(shù)” 的類成員變量 “內(nèi)定數(shù)字” , 并指定初始值為 66 第 17 行,“循環(huán)”語句,只要小括號內(nèi)的條件(“猜數(shù)字()”返回值為“假”) 成立,就循環(huán)執(zhí)行花括號中的代碼(直至小括號內(nèi)的條件不成立) 第 28 行,“如果”語句,判斷兩個變量“數(shù)”和“內(nèi)定數(shù)字”的值是否相等, 相等則執(zhí)行后面花括號中的代碼 第 34 行,“如果 - 否則”語句,判斷變量“數(shù)”的值是否大于“內(nèi)定數(shù)字” 的值,大于則執(zhí)行第 35 行,否則執(zhí)行第 37 行 第 39 行,“返回”語句,結(jié)束本方法,并返回相應(yīng)的值(此處為“假”) 第 49 行,定義一個類“全自動猜數(shù)字”,并指定其“基類”是“猜數(shù)字” 第 55 行,將變量“當(dāng)前數(shù)字”的值自增 1,即在原有值的基礎(chǔ)上加 1 分鐘: 第 7 分鐘:面向?qū)ο蟋F(xiàn)實世界是由萬事萬物(對象)組成的。在程序中以對象的概念抽象地描述和表 達(dá)現(xiàn)實世界中的萬事萬物,這就是面向?qū)ο蟮脑O(shè)計思想。 這里簡單講一下面向?qū)ο笾械摹胺庋b”“繼承”和“多態(tài)”的概念。 看一下“猜數(shù)字”這個類,其數(shù)據(jù)成員“內(nèi)定數(shù)字”是“私有”的,其方法成員 “猜數(shù)字()”也是“私有”的,也就是說,它們對外界來說是不可見的,也就是 說,它們被嚴(yán)格限制只能在“猜數(shù)字”這個類內(nèi)部使用。既然不能被類外面的代 碼直接操作,那么這個類就保持了相對的獨立性。“獲取數(shù)字()”這個成員方法 是“擴展”的,即它允許外界(子類)有條件的使用。只有成員方法“猜()”是 “公開”的,允許界面任意使用。通過“私有”“擴展”“公開”機制,類既對 外隱藏了實現(xiàn)細(xì)節(jié),同時又對外公開了操作接口。這就是“封裝”的概念。 再看“全自動猜數(shù)字”這個類,它并沒有定義“猜()”這個成員方法,但外界卻 可以調(diào)用它的“猜()”,為什么呢?這是因為“全自動猜數(shù)字”的基類是“猜數(shù) 字”,“猜()”正是從其基類“猜數(shù)字”中“繼承”而來的。面向?qū)ο笾小袄^承” 的概念,類似于現(xiàn)實生活中子女繼承父輩的財產(chǎn)。子類只能繼承基類中“公開” 和“擴展”的成員,而不能繼承“私有”成員。 “多態(tài)”的概念就更復(fù)雜一些,更難理解,也更難解釋。通俗的說,就是根據(jù)對 象的類型(而非變量的類型)動態(tài)地(程序運行時,而非編譯時)決定應(yīng)該調(diào)用 的成員方法。多態(tài)機制通常依賴于基于繼承和覆蓋(子類定義“與其父類‘公開 或擴展的成員方法’聲明形式相同的”成員方法,子類中的方法將覆蓋基類中的 方法)。 下面根據(jù)這幾句代碼具體講解一下: 猜數(shù)字 猜 = 創(chuàng)建 猜數(shù)字(); //猜數(shù)字 猜 = 創(chuàng)建 全自動猜數(shù)字(); 猜.猜(); 把第二行注釋起來僅執(zhí)行第一行,與把第一行注釋起來僅執(zhí)行第二行,程序有截 然不同的運行結(jié)果,其中的主要“秘密”就在于多態(tài)機制。而在本程序中,多態(tài) 機制主要體現(xiàn)在“獲取數(shù)字()”這個成員方法上——它是一個“擴展”方法,可 以被覆蓋,也已經(jīng)被覆蓋(基類“猜數(shù)字”中定義了一個“獲取數(shù)字()”,子類 “全自動猜數(shù)字”中也定義了一個“獲取數(shù)字()”,后者覆蓋前者)。程序之所 以會出現(xiàn)兩個運行結(jié)果,也正是因為有兩個“獲取數(shù)字()”,至于哪個“獲取數(shù) 字()”被執(zhí)行,取決于對象的真實類型(創(chuàng)建時確定,且永不改變):如果對象 的類型是“猜數(shù)字”(第一行),那么“猜數(shù)字.獲取數(shù)字()”被調(diào)用;如果對 象的類型是“全自動猜數(shù)字”(第二行),那么“全自動猜數(shù)字.獲取數(shù)字()” 被調(diào)用。您可能還在疑惑,這兩個類只有一個“猜()”方法啊,定義于基類“猜 數(shù)字”中的“猜()”方法能夠調(diào)用到子類“全自動猜數(shù)字”中的“獲取數(shù)字()” 方法嗎?可以的,因為子類的“獲取數(shù)字()”覆蓋了基類的“獲取數(shù)字()”。這 是多態(tài)的精髓,也是最難理解之處。 面向?qū)ο蟮乃枷氩皇呛芸炀涂梢灶I(lǐng)會和掌握的,需要細(xì)致的品味和長期的實踐。 面向?qū)ο笫且婚T科學(xué),許多人一輩子都在學(xué)習(xí)。 分鐘: 第 8 分鐘:特色語法友好名稱——用類自然語言格式書寫程序: 友好名稱 如果定義了如下友好名稱: 友好名稱 將<某>寫到屏幕 = 控制臺.輸出行(某); 那么程序可以這么寫: '將 123 寫到屏幕上'; '將"易語言"寫到屏幕上'; '將<x>寫到屏幕上'(x=100.123); 三聯(lián)判斷式: 三聯(lián)判斷式 可以這么寫 “如果(0 < x < 10)” 而不必象 C/C++,Java,C#那樣必需寫成 , “if(x > 0 && x < 10)”。“0 < x < 10”,數(shù)學(xué)中最通用的寫法,多自然呀,為什么其 它編程語言就是不支持呢?我想所有程序員學(xué)數(shù)學(xué)都早于學(xué)編程, 一開始看到怪 怪的“x > 0 && x < 10”,必然有此疑問,可是各編程語言設(shè)計大師就是對此 視而不見! 方法多返回值: 方法多返回值 定義一個具有多返回值的方法: 文本,整數(shù) 取姓名和年齡() { 返回("中國", 5000); } 調(diào)用以上方法,接收多返回值: 文本 姓名; 整數(shù) 年齡; (姓名,年齡) = 取姓名和年齡(); 雙向賦值運算符“<=>”——交換兩個變量的值: 雙向賦值運算符 整數(shù) a = 1, b = 2; a <=> b; //執(zhí)行后,a == 2; b == 1; 如果沒有雙向賦值運算符,大概要寫成“c = a; a = b; b = c;”或“a = a + b; b = a - b; a = a - b;”或“a = a ^ b; b = a ^ b; a = a ^ b;”,多麻煩 啊。 分鐘: 第 9 分鐘:答題時間有了易語言,為什么還要重新搞“易語言” 有了易語言,為什么還要重新搞“易語言”? 易語言(舊版)已經(jīng)漸趨成熟和穩(wěn)定,進(jìn)一步改造的空間已經(jīng)很小了。 “易語言”跟原易語言比,有哪些本質(zhì)改進(jìn)? 易語言”跟原易語言比,有哪些本質(zhì)改進(jìn)? 完全面向?qū)ο蟆⒆詣永厥?、可自行開發(fā)類庫、純文本源代碼、多文件工程、 與 C/C++等語言水乳交融。 已經(jīng)有很多編程語言了,我們還需要一個全新的編程語言嗎? 已經(jīng)有很多編程語言了,我們還需要一個全新的編程語言嗎? 匯編語言誕生時,C 語言誕生時,C++誕生時,Pascal 誕生時,Java 誕生時,C# 誕生時,都會有相同的疑問,答案都是一個:“需要”。 “易語言”也一樣。 C/C++語言等水乳交融 體現(xiàn)在哪里? 語言等水乳交融” “與 C/C++語言等水乳交融”體現(xiàn)在哪里? 可以使用 C/C++等語言開發(fā)易語言本地類庫,和易語言自身開發(fā)的類庫完全等 效,可相互引用,融合互補。 比較相似? “易語言”在哪些方面跟 Java 比較相似? 易語言” 語法方面基本照抄;面向?qū)ο蠓矫婊菊粘欢加凶詣永厥諜C制;都有“引 用”的概念,都沒有“指針”的概念;都可以跨平臺;都有自已的類庫;都支持 Unicode、多線程、類反射;都有類似“Class Path”“Java Doc”“JNI”等東 東…… 這么像? 為什么跟 Java 這么像? 語法方面沒得說,兩者都抄 C 語言;其它方面,我覺得“易語言”向目前最先進(jìn) 的編程理念靠攏是正常的,也是合理的。 不同? 哪些方面跟 Java 不同? 編譯型語言,直接執(zhí)行機器碼,運行效率高(Java 是由 JVM 解釋執(zhí)行字節(jié)碼, 配合 JIT) 最精巧的運行時環(huán)境(Runtime Environment), ; 連同核心類庫僅 150K; 以“類庫”而非“包(package)”為單位引入(import);最源代碼文件的路徑?jīng)] 有嚴(yán)格要求(Java 要求源文件必須位于特定子目錄中);不限制一個源代碼文 件只能寫一個公開類;類的構(gòu)造方法固定為“初始化()”,析構(gòu)方法固定為“清 理()”(Java 類的構(gòu)造方法名稱與類名稱相同,沒有析構(gòu)函數(shù));類庫不僅可 以用“易語言”自身開發(fā),還可以使用其它編程語言(如匯編,C/C++,Delphi) 開發(fā);暫時不支持異常處理機制;前面提到的特色語法; 垃圾收集器(GC)的質(zhì)量和效率如何? 垃圾收集器(GC)的質(zhì)量和效率如何? 尚未經(jīng)過實踐檢驗,不好說。根據(jù)我個人不嚴(yán)格測試,在 10000 個對象相互引用 且存在大量的循環(huán)引用的情況下,垃圾收集器工作正常,平均每次回收動作約耗 時 20 毫秒。GC 工作期間好像會中斷程序執(zhí)行。每次回收間隔約 6 到 10 秒,應(yīng) 該可調(diào)。具體的垃圾收集算法不詳。 現(xiàn)在有多少類庫可用? 現(xiàn)在有多少類庫可用? 從易語言公司提供的測試版中的示例代碼中, 涉及到了三個類庫 “系統(tǒng).ncl” “用 戶界面.ncl”“工具.ncl”,但并未同時公開類庫接口。故可以認(rèn)為目前沒有可 供使用的類庫。根據(jù)我個人理解,這次發(fā)布測試版主要目的是測試基本語法和編 譯器,而不是類庫。
|