蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務 價值

  aardio 編程語言快速入門——語法速覽

發(fā)布日期:2022/8/11 10:34:18      瀏覽量:

本文僅供有編程基礎的用戶快速了解常用語法。如果『沒有編程基礎』 ,那么你可以通過學習任何一門編程語言去彌補你的編程基礎,不同編程語言雖然語法不同 —— 編程基礎與經驗都是可以互通的。我經??吹揭恍┬率终f自己沒有編程基礎或經驗,然后過了三年、五年,我看到他還是在說自己沒有編程基礎或經驗。僅僅是掌握編程基礎知識或者積累基本的編程經驗 —— 通過任何你喜歡的編程語言都不難做到。編程真正困難的并不是怎么拿到入場券 —— 而是如何寫出優(yōu)秀的軟件。

有的新手跟我說:“我沒有編程基礎,學了幾個小時,都沒有掌握編程基礎 ……你的文檔是怎么寫的,你的教程是怎么寫的 ……你們這些做編程語言的人到底是怎么想的 ……”。其實零基礎前提下只想花幾個小時就能學會一門新編程語言 —— 這只有百年不遇的天才能做到。aardio 很小也很簡單。編寫 aardio 程序也很簡單,幾句代碼就可以寫一個可運行的程序,沒有任何復雜的操作。aardio 的文檔和教程對很多基礎知識都有講解,也提供了大量可直接運行與使用的范例 —— 很適合新手。不止一次有用戶向我反饋,下載 aardio 只是簡單地看了一下教程就把程序寫出來了。 也有不少用戶向我反饋,嘗試學習過很多編程語言都沒有成功 —— 但是學習 aardio 只用了很短的時間就找到感覺了。

 

第一個控制臺程序//導入庫import console;//加載動畫console.showLoading("加載動畫測試");sleep(1000); //暫停 1 秒//輸出字符串console.log(’測試字符串’);//輸出變量console.dump({a=123;b=456});//以 JSON 格式輸出變量console.dumpJson({a=123;b=456});//暫停并等待按鍵console.pause(true);第一個窗口程序import win.ui;/*DSG{{*/var winform = win.form(text="aardio form")winform.add(button={cls="button";text="測試";left=435;top=395;right=680;bottom=450;color=14120960;font=LOGFONT(h=-14);note="點這里";z=2};edit={cls="edit";left=18;top=16;right=741;bottom=361;edge=1;multiline=1;z=1}//按鈕回調事件winform.button.oncommand = function(){winform.edit.text = "測試"; //修改控件屬性//顯示窗口winform.show();//啟動界面消息循環(huán),保持窗口顯示,并響應用戶操作win.loopMessage();調用靜態(tài) API//加載 DLLvar dll = raw.loadDll("user32.dll");//調用 API 函數(shù)dll.MessageBox(0,"測試","標題",0);

aardio 已經默認加載了一些常用的系統(tǒng) DLL 對象,例如 ::User32, ::Kernel32, ::Shell32,::Ntdll 等。

所以上面的代碼可以簡化為:

::User32.MessageBox(0,"測試","標題",0);靜態(tài)結構體var info = {INT size = 8;INT time;::User32.GetLastInputInfo( info )

因為 aardio 函數(shù)支持多返回值,且結構體默認為傳址輸出參數(shù) —— 會添加到返回值中,所以上面的代碼也可以這樣寫:

var ok,info = ::User32.GetLastInputInfo( {INT size = 8;INT time;注釋語句// 單行注釋多行注釋,首尾星號數(shù)目必須相同。變量、賦值var n = null;var str = "字符串";

aardio 中的變量默認為當前名字空間變量,使用 var 語句可以定義局部變量。

語句、語句塊var n = null;var str = "字符串";

語句尾部可以加分號也可以不加。
語句塊首尾加 { } 標記,var 語句支持語句塊作用域。

數(shù)值var num = 123.01; //10 進制數(shù)值var hex = 0xEFEF; //16 進制數(shù)值var num2 = 123_456; //可用下劃線作為分隔符var num3 = 2#010; //可在 # 號前自定義進制算術運算var num = 3 + 2; //加,值為 5var num = 3 - 2; //減,值為 1var num = 3 * 2; //乘,值為 6var num = 3 / 2; //除,值為 1.5var num = 3 % 2; //取模,值為 1var num = 3 ** 2; //乘方,值為 9位運算import console;//按位取反var n = ~2#101;//顯示2#11111111111111111111111111111010console.printf("2#%b", n)//按位與var n = 2#101 & 2#100;//顯示2#100console.printf("2#%b", n)//按位或var n = 2#101 | 2#110;//顯示2#111console.printf("2#%b", n)//按位異或var n = 2#101 ^ 2#110;//顯示2#011console.printf("2#%b", n);//按位左移var n = 2#101 << 1;//顯示2#1010console.printf("2#%b", n);//按位右移var n = 2#101 >> 1;//顯示2#10console.printf("2#%b", n);//按位無符號右移var n = -2 >>> 18;//顯示 16383console.log(n);console.pause();字符串var str = "普通字符串??芍苯影瑩Q行符,不能包含回車符??梢杂?"" 表示一個雙引號。";var str2 = `反引號的作用與雙引號一樣。可直接包含換行符,不能包含回車符。可以用 `` 表示一個反引號。`;var str3 = ’轉義字符串忽略回車換行,反斜桿作為轉義符使用例如 \r\n 表示回車換行’;var str4 = /*段注釋可以賦值為字符串。首尾星號數(shù)目必須配對。忽略首尾緊鄰星號的第一個空行(如果有的話),其他換行總是會規(guī)范化為回車換行符,也就是 ’\r\n’。var str5 = //行注釋也可賦值為字符串,不含回車換行//在文件路徑前加 $ 符號,可將該文件編譯為字符串var str6 = $"~/aardio.exe"二進制字符串、文本編碼var bin = ’字符串可以包含任意二進制數(shù)據(jù),例如 \0’var UTF8 = "字符串可以包含文本,默認為 utf-8 編碼"var utf16 = ’轉義字符串后加 u 字符表示 UTF-16 編碼字符串’u

aardio 在很多地方都支持自動編碼轉換,例如調用 Unicode(UTF-16) 版本的 API 函數(shù)時,UTF-8 字符串可自動轉換為UTF-16 編碼字符串( 支持雙向自動轉換),例如以下兩句代碼的作用是相同的:

::User32.MessageBox(0,"內容","標題",0);::User32.MessageBox(0,’內容’u,’標題’u,0);

在調用 ::User32.MessageBox 時,aardio 會自動檢測并優(yōu)先使用 Unicode 版本的 ::User32.MessageBoxW() 函數(shù)。當然,也可以主動在 API 函數(shù)名后加上大寫的 W 尾標聲明這是 Unicode 版本函數(shù)(即使該函數(shù)名尾部并沒有 W,也可以添加 W 尾標)。

字符串連接//使用 ++ 操作符連接字符串var str = "字符串1" ++ "字符串2";//如果 ++ 前后有引號,可省略一個 + 號。var str = "字符串1" + "字符串2";//用 string.concat() 函數(shù)連接支持多參數(shù),支持 null 值var str = string.concat("字符串1","字符串2")讀寫文件//寫文件string.save("/test.txt","要保存在文件的字符串")//讀文件var str = string.load("/test.txt");文件路徑文件路徑開始可用單個斜杠(或反斜杠)表示應用程序根目錄。應用程序根目錄在開發(fā)時指工程目錄,發(fā)布后指 exe 目錄。var str = string.load("\res\test.txt");//文件路徑中正斜杠可自動轉換為反斜杠var str = string.load("/res/test.txt");文件路徑開始用波浪線表示 exe 所在目錄。aardio 不需要生成 exe 就可以運行調試,此時波浪線表示 aardio.exe 所在目錄。var str = string.load("~/res/test.txt");aardio 很多讀文件的函數(shù)都兼容工程內嵌資源目錄。不需要修改代碼,所以 "\res\test.txt" 可以是資源目錄。如果讀取文件失敗,string.load() 會返回 null 值(不報錯)。var str = string.load("\res\test.txt");將文件轉換為完整路徑。將路徑傳給第三方組件時,建議這樣轉換一下。var path = io.fullpath("\res\test.txt");

注意在 aardio 中雙引號內不需要轉義反斜杠。所以不用寫為 “\\res\\test.txt”,單引號內才需要這樣寫。

在 aardio 中一般不必要使用 “./dir/test.txt” 這樣的相對當前目錄路徑。因為當前目錄可以任意更改,你不知道什么時候某個第三方組件是不是悄悄幫你改了當前目錄。

嵌入文件到字符串

在文件路徑前加上 $ 操作符可將該文件編譯為字符串對象。
在編譯該代碼時文件必須存在,程序發(fā)布后就不再需要這個文件了。

示例:

var str = $"\dir\test.txt";

不要用這個方法包含資源目錄下的資源文件,
因為這等于將同一個文件重復包含了多次,會不必要地增加發(fā)布體積。

名字空間//導入其他庫文件,同時也導入該庫創(chuàng)建的名字空間import console;//打開名字空間namespace test.a.b{//定義當前名字空間變量console = 123;//..console 等價于 global.console..console.log(console);console.pause(true);

默認名字空間為全局名字空間,也就是 global 名字空間。在其他名字空間訪問 global 名字空間必須在變量前加上兩點( … ) 。例如 global.console 等價于 …console 。

在 aardio 中使用 import 導入其他庫文件,同時也導入該庫創(chuàng)建的名字空間。
導入名字空間只是引入模塊,訪問該名字空間仍然要寫完整的名字空間路徑。

表 (table)

table(表)是aardio中唯一的復合數(shù)據(jù)類型,除了非復合的基礎數(shù)據(jù)類型以外,aardio 中幾乎所有的復合對象都是表,即使是變量的命名空間也是表。表的本質是一個集合,可以用于容納其他的數(shù)據(jù)成員,并且表也可以嵌套的包含其他的表(table),在aardio里表幾乎可以容納一切其他對象。

表可以包含鍵值對:

tab = {a = 123;str = "字符串";[123] = "不符合變量命名規(guī)則的鍵應放在下標內。";["鍵 名"] = "不符合變量命名規(guī)則的鍵應放在下標內。";鍵名 = {test = "表也可以包含表";

表也可以包含數(shù)組:

//在表中創(chuàng)建數(shù)組var array = {[1] = 123;[2] = "數(shù)組的值可以是任何其他對象";[3] = { "也可以嵌套包含其他表或數(shù)組"}//數(shù)組的鍵可以省略,下面這樣寫也可以(并且建議省略)var array = {123;"數(shù)組的值可以是任何其他對象";{ "也可以嵌套包含其他表或數(shù)組"}

在表中允許使用類 JavaScript 語法,用冒號代替等號分隔鍵值,用逗號代替分號分隔元素,并可用引號包含鍵名。

示例:

var tag ={"name1":123,"name2":456}

注意如果鍵名以下劃線開始,則為常量字段(值為 非 null 值時不可修改) —— 可通過元屬性 _readonly 禁用此規(guī)則(參考語法手冊)。

成員操作符var tab = {a = 123; b = 456};用點號訪問表成員,點號后面必須跟合法的標識符var item = tab.a;用下標操符符 [] 訪問表成員,[] 里可以放任何表達式。var item = tab["a"];用直接下標操符符 [[]] 訪問表成員,[[]] 里可以放任何表達式。直接下標不會觸發(fā)元方法,用于 null 值也會返回 null 而不是報錯。var item = tab[["a"]];null 值

未定義的變量值默認為 null 。
獲取表對象不存在的成員值時也會返回 null 而不會報錯。
如果對象本身是 null 值,使用點號、普通下標獲取成員值會報錯,改用直接下標 [[]] 則不會報錯,而是會返回 null 值。

用 # 操作符獲取 null 值長度返回 0 而不是報錯。

將表對象的成員賦值為 null 就可以刪除該成員。

在邏輯運算中,null 值為 false。

取數(shù)組或字符串長度import console;var array = {123;456};console.log("數(shù)組長度",#array);var str = "abcd";console.log("字符串長度",#str);var n = null;console.log("null 值長度為 0",#n);console.pause();

使用 # 操作取數(shù)組或字符串的值,也可以取 null 值的長度( 返回 0 )。

if 語句import console;var enabled = true;if (enabled) {console.log(’enabled 的值為 true’);console.pause(true);

注意在邏輯運算中,非 0、非 null、非 false 為 true,反之為 false。

如果要準確判斷一個變量的值是否為 true 或 false ,則應使用恒等操作符,如下:

import console;var enabled = false;if (enabled === false ) {console.log(’enabled 的值為 false,不是 0,也不是 null’);elseif( enabled ){console.log(’enabled 的值為真’);else{console.log(’enabled 值為:’,enabled);console.pause(true);

上面的 elseif 也可以改為 else if。

邏輯操作符

邏輯非 既可以用 not 也可以用 ! 。
邏輯與 既可以用 and 也可以用 && 或者 ? 。
邏輯與 既可以用 or 也可以用 || 或者 : 。

aardio 語句在設計時試圖兼容其他語言的一些基本語法,所以很多語法有類似上面的替代寫法,例如可以用 begin end 替代 { } 包含語句塊。

三元運算符var n = 1;// ret 值為 truevar ret = n ? true : 0;

要特別注意 ? 實際上是邏輯與操作符,: 實際上是邏輯或操作符。如果 a ? b : c 這個表達式里 b 為 false,則該表達式總是返回 c。這與其他類 C 語言的三元操作符不同,請注意區(qū)分。

定義函數(shù)//定義函數(shù):add = function(a, b) {return a + b,"支持多個返回值";//調用函數(shù)var num,str = add(1, 2);要特別注意,函數(shù)可以返回多個值??梢杂?() 將多個返回值轉換為單個調用參數(shù)。var str = tostring( ( add(1, 2) ) );for 循環(huán)語句import console;for(i=1;10;1){console.log(i);console.pause();for in 循環(huán)語句import console;var tab = {a = 123;b = 456;for(k,v in tab){console.log(k,v)console.pause();while 循環(huán)語句import console;var i = 0;while (i < 100) {i++;console.log(i);if(i==10){break; //中止循環(huán)console.pause();while var 語句import console;//用法1,while條件中使用一個var語句while(var i = console.getNumber( "請輸入數(shù)值,輸入0退出:" )console.log( i )//用法2,while條件中使用var語句、循環(huán)前執(zhí)行語句、條件判斷語句while(var i;i = console.getNumber( "請輸入數(shù)值,輸入100退出:" );i != 100 ) {console.log( i )//用法3,省略var語句,僅使用循環(huán)前執(zhí)行語句、條件判斷語句var i = 0;while( ;i++; i<10 ) {console.log(i)//用法4,省略var語句,循環(huán)前執(zhí)行語句,僅使用條件判斷語句while(i>0){i--;console.log(i);console.pause(true);while var 模擬 for 循環(huán)import console;while( var i = 0; i++ ; i < 5 ) {console.log( i )console.pause(true);break label, continue label, break N, continue N 語句

break 語句中斷并退出當前循環(huán)語句。
continue 語句跳過當前循環(huán)體剩下的部分,繼續(xù)執(zhí)行下一次循環(huán)。

break label,continue label 通過為循環(huán)指定一個標號以中斷指定的循環(huán)。
break N,continue N 通過指定循環(huán)語句的嵌套層次以中斷指定的循環(huán)。

import console;import console;var i, j;for (i = 0; 2; 1 ) { loop1:for (j = 0; 2; 1) { loop2:if (i == 1 && j == 1) {continue loop1;else {console.log("i = " + i + ", j = " + j);console.pause(true);

注意循環(huán)標號寫在循環(huán)體內部開始處。

//定義類class cls{//構造函數(shù)ctor(name,...){this.name = name;this.args = {...}//屬性value = staticNum;//成員函數(shù)add = function(v){this.value = this.value + v;return this.value;//打開類的名字空間namespace cls{staticVar = "類的靜態(tài)變量值";staticNum = 2;//調用類創(chuàng)建對象var obj = cls();//調用對象函數(shù)var v = obj.add(5);

類內部可以用 this 訪問當前創(chuàng)建的實例對象。
類總是先調用構造函數(shù) ctor 才會初始化其他成員。

每個類都有自己的名字空間。
類創(chuàng)建的所有實例共享同一名字空間。
類名字空間的成員也就是類的靜態(tài)成員。

self,this,owner

self 表示當前名字空間。
this 在類內部表示當前創(chuàng)建的實例對象。

每個函數(shù)都有自己的 owner 參數(shù)( 無法使用外部函數(shù)的 owner 參數(shù) )。如果用點號作為成員操作符獲取并調用對象的成員函數(shù),則點號前面的對象是被調用成員函數(shù)的 owner 參數(shù),否則被調用函數(shù)的 owner 參數(shù)為 null。例如 obj.func() 調用 obj 的成員函數(shù) func,則 obj 是 obj.func 的 owner 參數(shù)。

注意一個獨立的 aardio 代碼文件編譯后也相當于一個匿名的函數(shù)。獨立運行的 aardio 代碼文件 owner 參數(shù)默認為 null ,使用 import 語句加載的庫文件,owner 參數(shù)為加載路徑、或資源文件數(shù)據(jù)。

owner 在元方法中表示左操作數(shù)。

在迭代器函數(shù)中,owner 表示迭代目標對象。

aardio 允許用 call, callex, invoke 等函數(shù)調用其他函數(shù)并改變 owner 參數(shù)的值。

aardio 制作的一些開源軟件

通用輸入法狀態(tài)提示工具 ImTip:

極簡錄屏工具 Gif123:


系統(tǒng)五筆助手 WubiLex:




  業(yè)務實施流程

需求調研 →

團隊組建和動員 →

數(shù)據(jù)初始化 →

調試完善 →

解決方案和選型 →

硬件網(wǎng)絡部署 →

系統(tǒng)部署試運行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓

售后服務

馬上咨詢: 如果您有業(yè)務方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術,還有行業(yè)經驗積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生