Dyalect是一款編程語言,您可以將其添加到.NET Core使用,可以在軟件上快速編輯相關的代碼項目,支持復雜類型元組、數組、地圖、迭代器、范圍、模式匹配、異常處理、模組、整數、布爾等功能,讓用戶可以通過這款軟件構建新的程序,您可以在軟件上添加異常處理功能,可以使用任何數據類型作為異常對象,例如,您可以拋出諸如元組,數組等的復合值,Dy使用特殊的Err數據類型來表示所有異常,此類型具有多個構造函數,用于表示不同類型的錯誤,您也可以使用構造函數創建地圖,提供的編輯功能還是非常豐富的
Dyalect軟件功能
Dyalect是用于.NET Core平臺的動態編程語言。它輕巧,快速,現代。Dyalect(或簡稱Dy)是用C#編寫的,除了標準的.NET Core庫外,它們的依賴項為零,這意味著它可以在Windows,MacOS和Linux上無縫運行。此外,您可以在任何這些平臺上使用相同的二進制文件!
Dy不使用DLR,也不編譯為IL(.NET程序集)。相反,它在自己的高能虛擬機之上運行。它編譯速度快,可以用作嵌入式語言或您選擇的腳本語言。它也是學習編程的好語言。
Dyalect提供了現代語法,其靈感來自于C#,Swift,Go和Rust等語言,一流的函數,協程,表達模塊,動態類型系統,該系統具有使用新功能擴展現有類型的能力等等。
Dyalect軟件特色
模組
任何帶有代碼的文件(或目標文件)都稱為模塊。因此,此模塊的名稱與文件的名稱相同(擴展名除外)。模塊用于分隔功能塊。每個程序都可以導入一個模塊,并可以訪問其公共成員。
Dyalect中的模塊是代碼重用和面向組件編程的主要工具。
自定義類型
Dyalect允許定義自定義類型。語法非常簡單:輸入Point(x,y)
異常處理
Dy支持結構化異常處理,該結構化異常處理被多種編程語言(包括C#等語言)采用
范圍
Dy具有用于生成值范圍的內置函數。Dy中的范圍是迭代器,因此以非嚴格方式執行。從根本上講,范圍接近IEnumerable<>.NET。
通常,可以使用靜態Iterator.range方法實例化范圍
模式匹配
模式匹配是編寫條件的更簡潔和聲明的方式。模式可以測試某個值是否具有特定形狀,并從該值中提取。例如,您可以測試值是否是特定長度的,并將該的某些元素綁定到變量。
Dyalect控制臺
Dyalect控制臺(或dya)是一個跨平臺的命令行實用程序,可以用作交互式環境和Dyalect編譯器/解釋器的接口。Dya支持可在交互式環境中直接執行的命令行開關和命令。
Dyalect使用說明
Dy具有C風格的語法,深受Swift,Go和C#等語言的啟發。Dy中的分號是可選的,但是如果要在一行上放置多個,則可能需要使用分號。例如,以下代碼不需要分號:
yield 1
yield 2
然而,這確實做到了:
yield 1; yield 2
像C Dy一樣,使用parens進行分組,例如:
Dy不是對身份敏感的語言(例如,Python)。相反,Dy在代碼塊中使用C樣式大括號:
實際上,Dy中的所有控件結構都需要大括號,而括號是完全可選的。例如,此C#代碼在Dy中無效,甚至無法編譯:
循環也是如此。
Dy是一種自由格式的語言,這意味著在大多數情況下,Dy也將忽略換行符。但是有時可能會考慮到它們。這里的規則非常直觀,簡單(與Swift相似)。
例如,以下代碼:
x = foo
(1, 2, 3)
表示:寫入x的值foo并返回一個元組(1,2,3)。是的,Dy有元組。是的,return關鍵字仍然在我們這里,但是是可選的(除非您想盡早脫離某個功能)。
現在是第二個代碼示例:
x = foo (1, 2, 3)
這具有完全不同的含義。它的內容為:調用foo具有三個參數(分別為和)的函數1,2并將3結果寫入變量x。
在這種特殊情況下,Dy在嘗試確定我們在此處是函數調用還是在元組時會考慮換行符。
與數組和索引器類似的東西。返回一個元素的數組:
x = foo
[1]
從具有索引的數組中獲取元素1:
x = foo[1]
好吧,讓我們前進。
變數
從上面的代碼中可以看到,您可以var像這樣使用關鍵字聲明一個新變量:
var one = 1
var two = 2
上面的代碼按照該詞的正確含義創建了兩個變量-您可以隨時更改它們的值:
one = 2
two = 1
但是,在很多情況下,這樣的作實際上是沒有意義的。為什么要在返回one變量2時two返回變量1?因此,Dy引入了只讀變量的概念:
let one = 1
let two = 2
現在,如果您嘗試更改其中任何一個的值,都會收到編譯錯誤。let在大多數情況下,當您不需要或計劃更改變量的值時,使用它是有意義的。換句話說,最好考慮let 默認使用。
控制流
Dyalect并沒有發明子,而是使用了與其他編程語言非常相似的控制流構造。最基本的是當然是有條件的if-else商,你已經看到上面的代碼示例:
else 子句是可選的,如果愿意,可以將其省略。
Dy支持以while,do-while和for。形式的循環。while是其中最基本的-執行直到條件成立true:
一while true { },除非你決定循環將永遠執行break它的執行。do-while與該代碼非常相似,唯一的例外是即使內部條件while不等于,它也將執行至少一次true。
for 如果要遍歷的元素,可以派上用場:
當然,所有這些構造都具有比此處顯示的功能更多的功能,但是您應該了解基本概念。
一切都是一種表達
Dy是一種以表達為中心的語言,這意味著Dy中的幾乎所有內容都是一種表達。(順便說一句,表達式總是產生一個值)。
考慮以下代碼示例:
這段代碼是正確的,但是Dy允許您以其他方式編寫它:
實際上,即使大括號內的代碼塊也可以單獨用作表達式!
循環也是表達式(甚至可以產生值):
上面的代碼計算為8。
職能
像許多其他語言一樣,Dy支持一流功能的概念。這些功能可以視為常規值。您可以將它們存儲在變量中,作為參數傳遞給其他函數,依此類推。例如:
可以使用C#語法創建匿名函數:
(x, y) => x + y
但是,盡管在C#中此類函數與常規命名函數在根本上有所不同,但是在Dy中它們之間的唯一區別是缺少匿名函數的名稱(并且可以通過將函數分配給變量來添加該名稱):
您可以通過本例中的兩個函數的名稱來引用它們,并以完全相同的方式使用它們。匿名函數甚至可以包含帶有多個的主體:
Dyalect中的函數可以具有可選參數。您可以通過為其分配默認值來使任何函數參數成為可選參數:
函數參數的默認值必須是原始類型(整數,浮點數,字符,字符串或nil)。函數可以具有任意數量的可選參數(如果不需要,則可以沒有)。
Dyalect函數的另一個有趣的功能是參數。您可能已經注意到,所有函數參數都具有不同且唯一的名稱。為什么不在函數調用中使用它們?Dyalect允許-結果是,您可以使用參數的名稱以及它們在參數列表中的位置將參數傳遞給函數:
當您通過名稱傳遞參數時,可以按您喜歡的任何順序提供名稱,例如,您可以將函數調用sum(x, y, z)為sum(z:, y: x:)。您還可以混合使用位置參數和命名參數。但是,有一個重要的限制-位置參數應始終位于命名參數之前。換句話說,調用這樣的函數是錯誤的:
sum(x: 1, 2, 3)