文档章节

Drag语言设计

思想永无止境
 思想永无止境
发布于 2016/11/16 22:16
字数 1354
阅读 62
收藏 0

##有虚拟机,跨平台 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<String> array=new List();//如果在构造方法new List(Integer);传入参数则可以固定数组长度
List<String> array=new List<String>();
List<String> array=["str1","str2"];
[String] array=new List();
[String] array=new List<String>();
[String] array=["str1","str2"];
数组的定义(非泛型写法,效果等于[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();//如果在构造方法new Map(Integer);传入参数则可以固定字典长度
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对应多个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

© 著作权归作者所有

思想永无止境
粉丝 4
博文 257
码字总数 292814
作品 0
昌平
程序员
私信 提问
构建前端应用的 JavaScript 库--HyperApp

HyperApp 是一个用于构建前端应用的 JavaScript 库,体积十分轻量,仅 1KB。具有以下特性: 声明式:HyperApp 的设计基于 Elm Architecture。使用函数式范例创建可扩展的基于浏览器的应用程序...

匿名
2017/03/03
1K
1
Roundcube Webmail 1.2.0 发布,支持 PGP

Roundcube Webmail 1.2.0 发布了。 RoundCube Webmail是一个基于浏览器,支持多国语言的IMAP客户端,操作界面看起像一个桌面应用程序。它提供一个e-mail客户端应该具备的所有功能包括 MIME支...

oschina
2016/05/24
1K
1
RoundCube Webmail

RoundCube Webmail是一个基于浏览器,支持多国语言的IMAP客户端,操作界面看起像一个桌面应用程序。它提供一个e-mail客户端应该具备的所有功能包括 MIME支持,地址薄,文件夹操作,信息搜索和...

匿名
2008/09/25
42.7K
3
C# 语言表现树形结构—TreeView高级用法指南

最近由于项目的关系,对Microsoft在各种编程语言中提供的TreeView控件做了一些研究。最初在网上查了一下,除了Microsoft的MSDN有些分散的knowledge, 并没有发现有这方面主题文章,于是有了写...

长平狐
2012/06/11
674
0
C# 语言表现树形结构—TreeView高级用法指南

最近由于项目的关系,对Microsoft在各种编程语言中提供的TreeView控件做了一些研究。最初在网上查了一下,除了Microsoft的MSDN有些分散的knowledge, 并没有发现有这方面主题文章,于是有了写...

长平狐
2012/06/08
182
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql免安装版,服务无法启动没有抱任何错误

1.解压 2.新建my.ini [mysqld]# Remove leading # and set to the amount of RAM for the most important data# cache in MySQL. Start at 70% of total RAM for dedicated server, e......

榴莲黑芝麻糊
18分钟前
0
0
Qt编写安防视频监控系统3-通道交换

一、前言 最开始写通道交换的功能的时候,走了很多弯路,比如最开始用最初级的办法,触发交换的时候,先关闭视频,然后设置新的url重新打开视频,这样处理非常低级而且耗内存还卡还很慢,毕竟...

飞扬青云
18分钟前
0
0
如何远程调试部署在CloudFoundry平台上的nodejs应用

网络上关于如何本地调试nodejs应用的教程已经很多了,工具有Chrome开发者工具,Visual Studio Code,和nodejs周边的一些小工具等等。 在实际情况中,我们可能遇到本地运行良好,但是部署到C...

JerryWang_SAP
39分钟前
5
0
微信扫码访问网站调用默认浏览器打开如何实现?

我们在微信内分享链接或二维码的时候,我们会发现我们的网站是可以在浏览器里正常打开的,但就是不能在微信里打开,提示 “ 已停止访问该网页 ”,无论是聊天框也一样。说是系统检测到您的网...

明尼苏达哈士奇
47分钟前
3
0
一份Java程序员进阶架构师的秘籍,你离架构师还差多远

一、如何定义架构师 Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并...

我最喜欢三大框架
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部