213 lines
4.3 KiB
Markdown
213 lines
4.3 KiB
Markdown
# 基础语法
|
||
|
||
## 注释
|
||
|
||
Fig 支持两种注释格式:
|
||
|
||
单行注释:
|
||
```go
|
||
// 这是一个单行注释
|
||
var x = 10; // 注释可以在语句后面
|
||
```
|
||
|
||
多行注释:
|
||
```go
|
||
/* 这是一个
|
||
多行注释 */
|
||
/* 注释内可以有 // 嵌套的单行注释 */
|
||
```
|
||
|
||
注释不能嵌套多个多行注释:`/* /* 嵌套 */ */` 会导致错误。
|
||
|
||
## 变量声明
|
||
|
||
### 可变变量
|
||
```go
|
||
var name = "Fig";
|
||
var count = 0;
|
||
count = count + 1; // 可以重新赋值
|
||
```
|
||
|
||
### 常量
|
||
```go
|
||
const PI = 3.14159;
|
||
const MAX_SIZE = 100;
|
||
// PI = 3.14; // 错误:常量不能重新赋值
|
||
```
|
||
|
||
常量必须在声明时初始化。
|
||
|
||
### 类型注解(可选)
|
||
```go
|
||
var name: String = "Fig";
|
||
var age: Int = 14;
|
||
const VERSION: Double = 0.4;
|
||
```
|
||
|
||
类型注解提供额外的类型信息,但解释器会在运行时进行类型检查。
|
||
|
||
## 标识符命名
|
||
|
||
### 规则
|
||
- 可以包含字母、数字和下划线
|
||
- 不能以数字开头
|
||
- 区分大小写
|
||
- 支持 Unicode 字符
|
||
|
||
### 有效示例
|
||
```go
|
||
var count = 0;
|
||
var user_name = "Alice";
|
||
var 计数器 = 0; // 中文标识符
|
||
var π = 3.14159; // Unicode 符号
|
||
var _private = true; // 以下划线开头
|
||
```
|
||
|
||
### 无效示例
|
||
```
|
||
var 123abc = 0; // 不能以数字开头
|
||
var my-var = 0; // 不能包含连字符
|
||
```
|
||
|
||
## 基本字面量
|
||
|
||
### 数字
|
||
```go
|
||
// 整数
|
||
var a = 42; // 十进制
|
||
var b = -100; // 负数
|
||
var c = 0; // 零
|
||
|
||
// 浮点数
|
||
var d = 3.14;
|
||
var e = 1.0;
|
||
var f = -0.5;
|
||
var g = 1.23e-10; // 科学计数法
|
||
```
|
||
|
||
### 字符串
|
||
```go
|
||
var s1 = "Hello";
|
||
var s2 = 'World';
|
||
var s3 = "包含\"引号\"的字符串"; // 转义引号
|
||
var s4 = "第一行\n第二行"; // 转义换行符
|
||
```
|
||
|
||
多行字符串直接跨行书写:
|
||
```rust
|
||
var message = "这是一个
|
||
多行字符串
|
||
可以包含多行内容";
|
||
```
|
||
|
||
### 布尔值
|
||
```go
|
||
var yes = true;
|
||
var no = false;
|
||
```
|
||
|
||
### 空值
|
||
```dart
|
||
var nothing = null;
|
||
```
|
||
|
||
## 分号使用
|
||
|
||
所有语句都必须以分号结束:
|
||
|
||
```go
|
||
var x = 10; // 正确
|
||
var y = 20 // 错误:缺少分号
|
||
|
||
func add(a, b) {
|
||
return a + b; // return 语句需要分号
|
||
} // 函数体右花括号后不需要分号
|
||
```
|
||
|
||
表达式作为独立语句时也需要分号:
|
||
```go
|
||
1 + 2 * 3; // 表达式语句需要分号
|
||
io.println("test"); // 函数调用语句需要分号
|
||
```
|
||
|
||
## 表达式与语句
|
||
|
||
### 表达式
|
||
表达式会产生一个值(包括 `null`):
|
||
```go
|
||
1 + 2 // 值为 3
|
||
x * y // 值为乘积
|
||
funcCall(arg) // 值为函数返回值
|
||
```
|
||
|
||
### 语句
|
||
语句执行操作但不产生值:
|
||
```go
|
||
var x = 10; // 声明语句
|
||
if condition {} // 条件语句
|
||
return value; // 返回语句
|
||
```
|
||
|
||
表达式可以作为语句使用(表达式语句):
|
||
```go
|
||
1 + 2; // 计算但丢弃结果
|
||
io.println("hi"); // 函数调用作为语句
|
||
```
|
||
|
||
## 关键字
|
||
|
||
Fig 语言的关键字包括:
|
||
|
||
| 类别 | 关键字 |
|
||
| -------- | ----------------------------------------------------------- |
|
||
| 声明 | `func`, `var`, `const`, `struct`, `interface`, `import` |
|
||
| 控制流 | `if`, `else`, `while`, `for`, `return`, `break`, `continue` |
|
||
| 错误处理 | `try`, `catch`, `throw`, `Finally` |
|
||
| 逻辑运算 | `and`, `or`, `not` |
|
||
| 类型相关 | `is`, `impl`, `new`, `public` |
|
||
|
||
这些关键字不能用作标识符名称。
|
||
|
||
## 操作符
|
||
|
||
### 算术运算符
|
||
`+`, `-`, `*`, `/`, `%`, `**`(幂运算)
|
||
|
||
### 比较运算符
|
||
`==`, `!=`, `<`, `>`, `<=`, `>=`
|
||
|
||
### 逻辑运算符
|
||
`and`, `or`, `not`, `&&`, `||`, `!`
|
||
|
||
### 位运算符
|
||
`&`, `|`, `^`, `~`, `<<`, `>>`
|
||
|
||
### 赋值运算符
|
||
`=`, `:=`, `+=`, `-=`, `*=`, `/=`, `%=`, `^=`
|
||
|
||
### 其他运算符
|
||
`.`(成员访问), `?`(三元运算), `...`(可变参数), `->`(箭头), `=>`(双箭头)
|
||
|
||
## 空白字符
|
||
|
||
Fig 对空白字符没有特殊要求:
|
||
- 空格和制表符可以互换使用
|
||
- 缩进不影响程序语义
|
||
- 操作符周围的空格是可选的(但建议添加以提高可读性)
|
||
|
||
## 代码示例
|
||
|
||
```go
|
||
// 完整的程序示例
|
||
import std.io;
|
||
|
||
func calculate(a: Int, b: Int) -> Int {
|
||
var result = a * b;
|
||
return result + 10;
|
||
}
|
||
|
||
const x = 5;
|
||
const y = 3;
|
||
var answer = calculate(x, y);
|
||
io.println("结果是:" + answer.toString());
|
||
``` |