基础语法

编码

默认情况下, Z1h 源码文件以utf-8编码 允许在代码中使用任意字符集, 例如英文、中文、日文、维语等

Z1h的语法兼容大部分Golang、Python、JavaScript和Java的语法, 有上述编程语言经验的开发者可以尝试直接进行编码

标记

  • 代码语句由多个"标记"组成, 可以是关键字, 标识符, 常量, 字符串, 符号
  • 程序中可能会使用到这些分隔符:括号 (), 中括号 [] 和大括号 {}
  • 程序中可能会使用到这些标点符号:. , ; : ? ! * ^ ' "

以下Z1h语句由 6 个标记组成

print('版本' + VERSION)

6个标记分别是(每行一个):

1. print
2. (
3. '版本'
4. +
5. VERSION
6. )

行分隔符

分号 ; 明确表示一行语句的结束. 但与此同时, Z1h的编译器也支持大多数场景下智能的自动分行

如果你打算将多个语句写在同一行, 则必须使用 ; 人为区分

以下为两个语句:

print("Hello")
print("World")

print("Hello"); print("World")

标识符

标识符用来命名变量、类型等程序实体. 一个标识符实际上就是一个或是多个字符(英文、数字、中文或其它语言字符、特殊符号)组成的连续字符串, 第一个字符不能是数字. 且对大小写敏感.

以下是有效的标识符:

zwr
Zwr
z_w_r
$zwr
z1h语言
...

以下是无效的标识符:

1ab(以数字开头)
if(不能和关键字相同)
a+b(不允许包含运算符)

保留字

保留字即关键字, 我们不能把它们用作任何标识符名称

下面列举了 Z1h 代码中会使用到的 33 个关键字或保留字:

break    case     var     const        continue  defer
chan     default  else    fallthrough  for       in
func     go       goto    if           import    global
true     false    nil     null         undefined try
catch    finally  throw   with         as        
package  return   switch  synchronized

除了以上介绍的这些关键字, Z1h 语言还有预定义标识符:

len cap new del has append bool
string bytearray
int8 uint8 byte
int16 uint16 rune
int32 uint32 
int64 uint64 
float32 float64
nil panic

注释

注释//开头, 示例如下:

// 输出2的3次方
2 ** 3

也可以用以下方式注释多行代码

/*
    author: Zwei.Ren
*/

空格

语句中适当使用空格能让程序更易阅读.

无空格:

area=math.Pi*2*2

在变量与运算符间加入空格, 程序看起来更加美观, 如:

area = math.Pi * 2 * 2

语言特性

以下展示了Z1h的各种语言特色功能, 供有其它语言基础的开发者快速参考、适应

go

使用go关键字后面跟着函数调用, 可以将这个函数的执行过程放在另一个协程(新手可以粗暴理解为新的进程)

go是Go语言的一个特色功能, Z1h也借鉴了这种语法

具体实现可参考并发

defer

defer用来声明一个延迟函数, 把这个函数放入到一个栈上, 当代码块结束之前被调用, 也可以说是运行到最外层方法体时调用. 我们经常用他来做一些资源的释放, 比如关闭io操作.

类似于其他语言的 try... catch... finally... 中的finally, 当然差别还是明显的.

defer是Go语言的一个特色功能, Z1h也借鉴了这种语法

a = {
    Say: tag => {print(`I am ${this.name}, tag = ${tag}`)}
}
defer a.Say("Defer 2") // 栈底, 最后输出
defer a.Say("Defer 1")
a.name = "test1"
a.Say("Eval 1")
return a.name = "test2"

synchronized

用来给代码块加锁

synchronized是Java语言的一个特色功能, Z1h也借鉴了这种语法

具体实现可参考并发

with..as..

对于事先需要设置,事后做清理工作的任务, 可以通过with..as..{...}的方法自动执行Close方法

with..as..是Python语言的一个特色功能, Z1h也借鉴了这种语法

具体实现可参考函数

三元运算符

支持Java/JavaScript、Python风格的三元运算符

// Java
print('Java三元运算符:', (true ? '是' : '否'))
// Python
print('Python三元运算符:', ('肯定' if false else '否定'))

具体实现可参考运算符

请注意, 使用三元运算符的时候最好都用小括号包起来, 以免产生歧义

字符串

类似JavaScript, 支持 'xxx'、"xxx"、 `name=${n}` 三种字符串声明方式

请注意, 如果使用单引号"企图声明字符串字面值时, 里面只有一个字符, 那么会被声明成int32类型(又称rune/char类型)而非字符串类型