溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何實現(xiàn)Drag語言設(shè)計

發(fā)布時間:2022-01-10 11:36:01 來源:億速云 閱讀:112 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)如何實現(xiàn)Drag語言設(shè)計 ,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

有虛擬機,跨平臺

drag虛擬機,類似python虛擬機、java虛擬機。

既是靜態(tài)語言,又是動態(tài)語言。

當(dāng)類實現(xiàn)dynamic接口時,那么這個類支持動態(tài)添加屬性和添加方法的操作。否則,這個類會在編譯時檢查操作是否合法。

一切皆對象,一切對象皆源于類。

類似去掉java的原生類型。

虛擬機內(nèi)置類型

Object
DynamicBooleanByteIntegerLongFloatDoubleString
Map
List

區(qū)分Float和Double采用數(shù)字后面使用_d或_f 區(qū)分Integer和Long采用數(shù)字后面使用_i或_l

既可以定義引用類型,也可以不定義引用類型

Integer a=10;也可以a=10; 不定義引用類型時,默認(rèn)是Object類型。

既可以使用{}也可以使用縮進或者兩者混合,但強制代碼縮進。

public class A{    void printString(){
        print("str");
    }
}public class A    void printString()
        print("str");

if和for、swith和while

沒有swith,沒有while

if

//普通版if(){}else if(){}else{}//簡寫版if(){}ef(){}el{}

for

for(Boolean)//類似whilefor(Var;Boolean;Increment)//正常的forfor(Var in Iterator)//類似python

支持goto

goto只能在方法內(nèi)使用,且只能往后goto到一個標(biāo)記處。 類似java的break 標(biāo)簽,但不限于在循環(huán)內(nèi)使用。

[String] ss=["str1","str2"];for(s in ss)    if(s=="str2")
    goto A
print("run...");//這句代碼會被跳過:A//跳到這里

支持多行字符串代碼編寫方式

String s="ss
sssss
";

注釋

同java,但單行支持#

命名規(guī)則

同java,但不能使用$

父類定義的非私有屬性子類不能定義重名的屬性。

進制

默認(rèn)10進制 2進制:數(shù)字開頭使用28進制:數(shù)字開頭使用816進制:數(shù)字開頭使用16_ 以此類推。

支持返回多個返回值

public static String,Integer getInfo()    return "zs",10;public static main(List s)    String name,Integer age=getInfo();

數(shù)組

類似java的list

數(shù)組的定義(泛型寫法)List<String> array=new List();//如果在構(gòu)造方法new List(Integer);傳入?yún)?shù)則可以固定數(shù)組長度List<String> array=new List<String>();List<String> array=["str1","str2"];
[String] array=new List();
[String] array=new List<String>();
[String] array=["str1","str2"];
數(shù)組的定義(非泛型寫法,效果等于[Object])List array=new List();List array=new List<String>();List array=["str1","str2"];
[] array=new List();
[] array=new List<String>();
[] array=["str1","str2"];

使用:

[String] array=["str1","str2"];
String v=array[0];
String v=map.get(0);

字典

字典的定義(泛型寫法)Map<String:Integer> map=new Map();//如果在構(gòu)造方法new Map(Integer);傳入?yún)?shù)則可以固定字典長度Map<String:Integer> map=new Map<String:Integer>();Map<String:Integer> map={"key1":10,"key2":20}
{String:Integer} map=new Map();
{String:Integer} map=new Map<String:Integer>();
{String:Integer} map={"key1":10,"key2":20}
字典的定義(非泛型寫法,效果等于{Object:Object})Map map=new Map();Map map=new Map<String:Integer>();Map map={"key1":10,"key2":20}
{} map=new Map();
{} map=new Map<String:Integer>();
{} map={"key1":10,"key2":20}

支持一個key對應(yīng)多個value

{String:Integer:Integer} map={"key1":10:11,"key2":20:21}

使用:

{String:Integer} map={"key1":10,"key2":20}Integer v=map["key1"];Integer v=map.get("key1");

{String:Integer:Integer} map={"key1":10:11,"key2":20:21}Integer v1,Integer v2=map["key1"];Integer v1,Integer v2=map.get("key1");

普通類

默認(rèn)一個普通的類就是靜態(tài)類(相對于動態(tài)類來說)。 定義靜態(tài)類型類:

class A{
}

使用靜態(tài)類型對象:

A a=new A();
a.name="tzc"//編譯錯誤A沒有a屬性a=new A();
a.name="tzc"//編譯錯誤Object沒有a屬性

接口

使用interface關(guān)鍵字定義。

interface A{
}

或者:

interface class A{
}

接口是特殊的類。 方法都是實例的公有的,沒有屬性,必須繼承才能new。

常量類

使用constant關(guān)鍵字定義。

constant A{
}

或者:

constant class A{
}

常量類是特殊的類。 屬性、方法都是靜態(tài)的,不能被繼承。

終態(tài)類

使用final關(guān)鍵字定義。

final A{
}

或者:

final class A{
}

終態(tài)類是特殊的類。 不能被繼承。

final關(guān)鍵字基本同java,但可以有以下用法:

{String:Integer} map=final {"key1":10,"key2":20}//map里的值不能修改,也不能添加和刪除元素[String] array=final ["str1","str2"]//array里的值不能修改,也不能添加和刪除元素Student stu=new final Student("zhangsan",20);//stu里的屬性不能修改,也不能添加和刪除屬性

動態(tài)類

使用dynamic關(guān)鍵字定義。

dynamic A{//這樣定義表示該類實現(xiàn)Dynamic接口}

或者:

dynamic class A{//這樣定義表示該類實現(xiàn)Dynamic接口}

或者實現(xiàn)Dynamic接口:

class A implement Dynamic{
}

動態(tài)類是特殊的類。 能避免編譯類型檢查。

使用動態(tài)類型對象:

A a=new A();
a.name="tzc"//編譯并運行正確Dynamic a=new A();
a.name="tzc"//編譯并運行正確a=new A();
a.name="tzc"//編譯錯誤Object沒有a屬性

new時使用dynamic:

class A{
}
a=new dynamic A();//如果A沒有實現(xiàn)Dynamic那么a是一個實現(xiàn)A并且實現(xiàn)Dynamic的子類的對象,相當(dāng)于創(chuàng)建了一個匿名類。a.name="tzc"//編譯并運行正確a=dynamic 10;//a是一個繼承Integer并且實現(xiàn)Dynamic的子類的對象a=dynamic String;//a是一個繼承String并且實現(xiàn)Dynamic的子類的對象

可代替javascript在前端瀏覽器使用,需要瀏覽器支持,而開發(fā)者只需要導(dǎo)入相應(yīng)的庫就行了。

API,核心的API只有內(nèi)置類型,要想開發(fā)還得添加不同的庫。

基礎(chǔ)版的API類似JavaSE 高級版的API類似JavaEE

關(guān)于如何實現(xiàn)Drag語言設(shè)計 就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI