如何实现Drag语言设计
admin
2023-08-02 18:26:12
0

有虚拟机,跨平台

drag虚拟机,类似python虚拟机、java虚拟机。

既是静态语言,又是动态语言。

当类实现dynamic接口时,那么这个类支持动态添加属性和添加方法的操作。否则,这个类会在编译时检查操作是否合法。

一切皆对象,一切对象皆源于类。

类似去掉java的原生类型。

虚拟机内置类型

Object
DynamicBooleanByteIntegerLongFloatDoubleString
Map
List

区分Float和Double采用数字后面使用_d或_f 区分Integer和Long采用数字后面使用_i或_l

既可以定义引用类型,也可以不定义引用类型

Integer a=10;也可以a=10; 不定义引用类型时,默认是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只能在方法内使用,且只能往后goto到一个标记处。 类似java的break 标签,但不限于在循环内使用。

[String] ss=["str1","str2"];for(s in ss)    if(s=="str2")
    goto A
print("run...");//这句代码会被跳过:A//跳到这里

支持多行字符串代码编写方式

String s="ss
sssss
";

注释

同java,但单行支持#

命名规则

同java,但不能使用$

父类定义的非私有属性子类不能定义重名的属性。

进制

默认10进制 2进制:数字开头使用28进制:数字开头使用816进制:数字开头使用16_ 以此类推。

支持返回多个返回值

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

数组

类似java的list

数组的定义(泛型写法)List array=new List();//如果在构造方法new List(Integer);传入参数则可以固定数组长度List array=new List();List array=["str1","str2"];
[String] array=new List();
[String] array=new List();
[String] array=["str1","str2"];
数组的定义(非泛型写法,效果等于[Object])List array=new List();List array=new List();List array=["str1","str2"];
[] array=new List();
[] array=new List();
[] array=["str1","str2"];

使用:

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

字典

字典的定义(泛型写法)Map map=new Map();//如果在构造方法new Map(Integer);传入参数则可以固定字典长度Map map=new Map();Map map={"key1":10,"key2":20}
{String:Integer} map=new Map();
{String:Integer} map=new Map();
{String:Integer} map={"key1":10,"key2":20}
字典的定义(非泛型写法,效果等于{Object:Object})Map map=new Map();Map map=new Map();Map map={"key1":10,"key2":20}
{} map=new Map();
{} map=new Map();
{} map={"key1":10,"key2":20}

支持一个key对应多个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");

普通类

默认一个普通的类就是静态类(相对于动态类来说)。 定义静态类型类:

class A{
}

使用静态类型对象:

A a=new A();
a.name="tzc"//编译错误A没有a属性a=new A();
a.name="tzc"//编译错误Object没有a属性

接口

使用interface关键字定义。

interface A{
}

或者:

interface class A{
}

接口是特殊的类。 方法都是实例的公有的,没有属性,必须继承才能new。

常量类

使用constant关键字定义。

constant A{
}

或者:

constant class A{
}

常量类是特殊的类。 属性、方法都是静态的,不能被继承。

终态类

使用final关键字定义。

final A{
}

或者:

final class A{
}

终态类是特殊的类。 不能被继承。

final关键字基本同java,但可以有以下用法:

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

动态类

使用dynamic关键字定义。

dynamic A{//这样定义表示该类实现Dynamic接口}

或者:

dynamic class A{//这样定义表示该类实现Dynamic接口}

或者实现Dynamic接口:

class A implement Dynamic{
}

动态类是特殊的类。 能避免编译类型检查。

使用动态类型对象:

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没有实现Dynamic那么a是一个实现A并且实现Dynamic的子类的对象,相当于创建了一个匿名类。a.name="tzc"//编译并运行正确a=dynamic 10;//a是一个继承Integer并且实现Dynamic的子类的对象a=dynamic String;//a是一个继承String并且实现Dynamic的子类的对象

可代替javascript在前端浏览器使用,需要浏览器支持,而开发者只需要导入相应的库就行了。

API,核心的API只有内置类型,要想开发还得添加不同的库。

基础版的API类似JavaSE 高级版的API类似JavaEE

相关内容

热门资讯

葬礼感人一幕!婴儿抱着哈梅内伊... 7月4日至9日,伊朗为已故最高领袖哈梅内伊及其4位亲属(女儿、女婿、儿媳和外孙女)举行葬礼。9日,他...
凤凰直击俄军解救任务:无人机开... 乌克兰武装部队7月10日已向康城(康司坦丁诺夫卡)彼邻的德鲁日基夫卡市部署了约数十个单位的兵力,其中...
张玉卓任中国工程院党组书记、院... 7‍‍月11日,中国工程院官网更新了该院领导信息。中国工程院第九届院领导班子组成如下:张玉卓同志任党...
美国设定时间要求伊朗承诺停止袭... 【环球网报道 记者 姜蔼玲】据美国Axios新闻网当地时间10日报道,美国要求伊朗公开承认霍尔木兹海...
新华鲜报丨创历史新高 上半年3... 出入境人数创历史新高、外国人入境游持续火爆、出入境政务服务更便利贴心……7月10日,国家移民管理局通...
山东迎战“巴威”,多地水库提前... 今年第9号台风“巴威”正朝山东奔来。根据央视新闻报道,“巴威”今天(7月11日)零时再度增强为强台风...
哈梅内伊葬礼结束,灵柩移入陵墓 据凤凰卫视报道,伊朗已故最高领袖哈梅内伊的安葬仪式已经结束,他的灵柩被移入陵墓。哈梅内伊网站公布了相...
广西抗洪军人在救援途中,偶遇自... 7月9日上午在广西贵港市港北区执行城市清淤任务的陆军第75集团军某旅官兵突然接到新的救援任务有数百名...
美媒:万斯等人仍与伊朗间接对话... 据凤凰卫视报道,美国总统特朗普7月10日宣布,美国与伊朗的停火已经结束,但双方将继续谈判。知情人士透...
空调显示E5故障代码的维修方法 空调3匹机,开机制冷运行后出现E5故障代码,断电后重新开机,打到制冷运行约3分钟后,又出现E5故障代...