Skip to content

Common Programming Concepts cn

常见编程概念

在本章中,我们将涵盖Funk与其他语言共享的所有常见概念。具体而言,我们将讨论变量、循环、条件语句、函数和输入/输出。

变量

在Funk中,变量与其他语言的变量概念相似。它是用于在内存中存储数据的标识符。

我们使用 var 语法来定义变量并将它们绑定到类型。一旦变量被绑定,就不能将其与另一种类型的数据关联,除非我们再次使用 var 重新声明并指定类型。

以下是如何使用 var

var my_variable: i32 = 10;

这在堆栈中创建一个新变量。我们在 : 后面指定类型。类型将在下一章中描述。然后使用等号 = 将表达式(这里是10)与变量关联起来。你可能会注意到在行末有一个分号 ;,所有Funk指令必须以分号结束才能有效。

一旦定义了变量,你可以使用赋值语法和等号 = 符号重新分配新值。

var my_variable: i32 = 10;
my_variable = 20;

这将更改存储在变量中的值,但不改变变量的大小。

类型

原始类型

Funk支持最多64位的数字。

有符号 无符号 大小 描述
i8 u8 8位 整数
i16 u16 16位 整数
i32 u32 32位 整数
i64 u64 64位 整数
f32 - 32位
f64 - 64位

数组

数组是具有相同类型的固定大小的项目列表。在内存中,数组中的每个元素都相邻。数组的每一位都在内存中对齐。

表示包含10个8位无符号元素的数组的类型表示如下:u8[10]。在Funk中,我们使用方括号指定数组,并用一个字面整数指定其大小。通过在方括号前面加上原始类型,可以给出每个元素的大小。

为了给它赋值,我们使用方括号,并用逗号分隔每个表达式。

var my_array: i32[5] = [10, 20, 30, 40, 50];

Funk还为数组创建提供了一些语法糖。

将数组类型的方括号留空,Funk将自动使用给定的数组值推断大小。

var my_array: i32[] = [10, 20, 30, 40, 50];
// 自动生成长度为5的数组`

对于比你的手指能敲出的更长的数组,你可以简单地忽略剩下的部分,它将被设置为默认值(0)。

var my_array: i32[100] = [10, 20, 30];
// 这是一个很长的数组!
// 幸运的是,Funk会处理数组中的其他97个值,给所有这些剩余的值默认值0

字符串

在Funk中,字符串与C语言中一样,是整数数组。但是,创建字符串时,你可以指定字符的长度,支持其他编码格式,如64位Unicode。

你可以使用双引号 "" 作为典型数组的值来定义字符串。Funk支持像 \n\0\t 等转义字符。

var my_string: u8[] = "Hello!";

与数组一样,语法糖可用于推断字符串的大小,但你也可以手动设置大小,或提供比实际写入的字符串小的字符串以提供一个小缓冲区(它将被0初始化)。

算术运算符

Funk提供用于算术运算的通常运算符。

符号 名称 符号 名称
+ 加法 - 减法
* 乘法 / 除法
% 取模

逻辑运算符

Funk提供用于处理逻辑的通常运算符。

符号 名称 符号 名称
== 相等 != 不相等
> 大于 >= 大于或等于
< 小于 <= 小于或等于
&& || 或者
!

与C语言一样,这些运算符如果为真返回1,为假返回0

条件语句

条件逻辑使用唯一的 if 语句完成。与条件在括号中一起使用和一个有范围的块,if 可以用于条件表达式。

if (x < 10) {
    return 0;
}

如果条件为假,我们可以选择指定 else 语句。

if (x < 10) {
    return 0;
} else {
    x = x - 1;
}

索引

为了访问数组中的某个元素(字符串也是数组),你可以使用索引语法并指定要获取的索引。只需在要访问的数组名称后面放上

请记住:在Funk中,数组从0开始。

var my_string: u8[] = "Hello!";
var letter_l: u8 = my_string[3];

迭代

Funk是一种核心为命令式编程的语言,因此它需要迭代!要进行迭代,您可以使用人类创造的最终循环:while 循环。它的功能与之前的其他while循环相同,给定一个条件和要重复的指令块,直到条件为假为止。

var counter: i32 = 10;

while (counter > 0) {
    counter = counter - 1;
}

这使得 counter 递减,直到它等于或小于0。