##有虚拟机,跨平台 drag虚拟机,类似python虚拟机、java虚拟机。
##既是静态语言,又是动态语言。 当类实现dynamic接口时,那么这个类支持动态添加属性和添加方法的操作。否则,这个类会在编译时检查操作是否合法。
##一切皆对象,一切对象皆源于类。 类似去掉java的原生类型。
##虚拟机内置类型
Object
Dynamic
Boolean
Byte
Integer
Long
Float
Double
String
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)//类似while
for(Var;
Boolean;
Increment)//正常的for
for(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进制:数字开头使用2_ 8进制:数字开头使用8_ 16进制:数字开头使用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
【运维|Drag语言设计】转载于:https://my.oschina.net/tangzhichao/blog/789369
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 接口|axios接口报错-参数类型错误解决
- Python专栏|数据分析的常规流程
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- 云原生微服务技术趋势解读
- 韵达基于云原生的业务中台建设 | 实战派
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export