专栏/【冰话XS】005:XS基本语法(下)

【冰话XS】005:XS基本语法(下)

2022年02月03日 17:04--浏览 · --点赞 · --评论
粉丝:717文章:28

※☆冰の引言☆※

前文详细叙述了脚本调用在条件中和在效果中的运用,另外对逻辑、比较和算术运算符在XS的使用也做了相应具体的说明,最后从返回值的角度简要谈谈return语句与函数参数之间的联系。本章作为基本语法的收官篇讲的内容不太多,重点就是判断语句与循环语句在XS中如何使用。

※☆本节の紹介☆※

※☆判断语句☆※

判断语句主要有两种结果,一种是 if 结构 另一种是 switch 结构,两者特点各有差异,下面对两者的使用方法和注意事项进行详细说明。

if函数

———— if判断结构 ————
void main()
{
	int a = 5;
	if (a<1)
	{
		int b =0;
	}
	else if (a>2)
	{
		int b =1;
		b++;
    }
	else
		int b =2;
}

## 要点
1. 语法中的“a<1”“a>2”表示判断语句,用于返回 truefalse(系统返回0/1)
2. 大括号用于标识代码块。如果有N条语句,一定要用大括号括起来。
3. 如果只有一条语句大括号可省略。
4. if{}是必需的, else if{}else{}是可选的。
5. 执行顺序: if -> else if -> else

## 示例:
// (1) 如果a与b不等,则将b的值赋值给a。如果a与b相等,则不返回任何结果。
if (a != b)
	a = b;

// (2) 如果a大于等于0,则ABS取a。反之(即a小于0),则ABS取-a。
if (a >= 0)
	int ABS = a;
else
	ABS = a * -1;

// (3) 如果a大于0,则AB取3a。当a小于0,则AB取-2a,当a=0时,不返回任何结果。
if (a > 0)
	int AB = 3 * a;
else if(a < 0)
	AB = a * -2;

switch函数

———— switch结构 ————
void main() {
    int a = 20;
    switch(a) {
        case 10: {
            xsChatData("if(a == 10)");
            break;
        }
        case 20: {
            xsChatData("else if(a == 20)");
            break;
        }
        default: {
            xsChatData("else");
            break;
        }
    }
}
//输出结果:else if(a == 20)

## 要点
1. switch 循环多用于定点值匹配的 if - else 循环
2. case 后面必须是一个整数 int ,或者是结果为整数的表达式,不能包含任何变量。
3. 每个 case 后跟一个要比较的值和一个冒号。
4. default 非必须,当无 default,如果所有 case 都匹配失败,那就什么都不执行。
5. 执行顺序: case 10: -> case 20: -> default:
6. 如果只有一条语句, casedefault 后面的大括号可省略。
7. 当遇到 break 语句时,switch 终止,程序将跳转到 switch 语句后的下一行。
8. 重点强调!不是每一个 case 都需要包含 break。
   如果 case 语句不包含 break ,程序将会依次执行后面的 case ,直到遇到 break 为止。
   例如上面的 case 10:匹配成功后会执行 case 20:后面的语句以及 default:后面的语句。
   /*
   输出结果就会是:
	else if(a == 20)
	else
   */

//以下为switch-case函数的等效函数
void main() {
    int a = 20;
    if (a == 10) {
        xsChatData("if(a == 10)");
    }
    else if (a == 20) {
        xsChatData("else if(a == 20)");
    }
    else  {
        xsChatData("else");
    }
}

※☆中断与跳过语句☆※

———— break 中断 & continue 跳过 ————
//循环体中遇到break,将会强制跳出循环体,常用于switch结构
int i = 0;
while( i < 50 )
{
    if ( i == 10 )
    {
        break;
        i++;
    }
}

## 示例详解:
1. i从0开始,i为0~9时,循环会正常进行
2. i==9时,循环正常进行,i++变为i==10
3. i==10时,满足if条件,于是执行if结构里的break,跳出循环。
4. 11~49 都不会再执行了。


//循环体中遇到continue,将会强制跳过后续指令,直接开始下一循环
string message = "from 0 to 9: ";
for( i = 0; < 10 )
{
    if ( i == 5 )
    {
        message = message + "skip,";
        continue;
    }
    message = message + i + ",";  // i==5时,这句会被跳过
}

## 示例详解:
1. i从0开始,i为0~4时,循环会正常进行
2. i==4时,循环正常进行,i递增变为i==5
3. i==5时,满足if条件,于是执行if结构里的continue,
   跳过修改message那一句进入下一循环,i递增变为i==64. i为6~9时,循环会正常进行。
5. 整个循环体结束后,message为"from 0 to 9: 0,1,2,3,4,skip,6,7,8,9"

※☆循环语句☆※ 

while循环

———— while循环结构 ————
while循环用于在某个条件为真时重复一组指令。一旦变为false,循环就会中断,指令不再执行。

void main() {
    int a = 0;
    int b = 0;
    while(b < 6)
    {
        xsChatData("a = "+a);
        a = a + b;
        b++;
    }
}
/*
输出结果:
a = 1
a = 2
a = 4
a = 7
a = 11
*/

## 循环详解:
b 从 b==0 开始
第一次判定:b==0 小于 6,进入循环。循环末尾b++使得b==1。
第二次判定:b==1 小于 6,继续循环。循环末尾b++使得b==2。
……
第五次判定:b==5 小于 6,继续循环。循环末尾b++使得b==6。
第六次判定:b==6 等于 6,不满足循环条件,跳出循环。执行后面的指令。
总共执行了5次循环体。

//死循环案例 (条件永远满足,无限循环下去)
void main() {
    int a = 0;
    while(a < 6)
    {
        xsChatData("a = "+a);
    }
}
//a 永远等于0,永远都小于6,无穷执行下去,系统直接宕机

※☆重要提示:

务必避免死循环!(永远无法跳出的循环)

直接后果:会导致游戏或电脑因运行内存耗尽会卡死。(然后电脑就可以报废当铁板烧了)


for循环

———— for循环结构 ————
for循环用于重复一组指令一定次数。
每轮循环结束时变量都会+1-1,会循环直到不再满足比较条件。

void main() {
    for(a = 5; < 10)
    {
        xsChatData("a = "+a);
    }
    for(b = 10; > 5)
    {
        xsChatData("b = "+b);}
    }
}
/*
输出结果:
a = 5
a = 6
a = 7
a = 8
a = 9
b = 10
b = 9
b = 8
b = 7
b = 6
*/

## 循环详解:
a 从 a==5 开始
第一次判定:a==5 小于 10,进入循环。循环末尾a递增使得a==6。
第二次判定:a==5 小于 10,继续循环。循环末尾a递增使得a==7。
……
第五次判定:a==9 小于 10,继续循环。循环末尾a递增使得a==10。
第六次判定:a==10 等于 10,不满足循环条件,跳出循环。执行后面的指令。
总共执行了5次循环体。

b 从 b==10 开始
第一次判定:b==10 大于 5,进入循环。循环末尾b递减使得b==9。
第二次判定:b==9 大于 5,继续循环。循环末尾b递减使得b==8。
……
第五次判定:b==6 大于 5,继续循环。循环末尾b递减使得b==5。
第六次判定:b==5 等于 5,不满足循环条件,跳出循环。执行后面的指令。
总共执行了5次循环体。

## for 循环要点:
1. for()里面的变量和值都强制为整数型int2. 递增方向 & 循环次数:
上文提及的 a 或 b 为 for 循环的内变量,n 为内变量 [条件值-初始值] 的绝对值
· 如果 符号 为 <, 内变量 将逐次递增+1,最终会循环 n 次。
· 如果 符号 为 <=,内变量 将逐次递增+1,最终会循环 n+1 次。
· 如果 符号 为 >, 内变量 将逐次递减-1,最终会循环 n 次。
· 如果 符号 为 >=,内变量 将逐次递减-1,最终会循环 n+1 次。
3. for循环内变量的值可被调用,但无法进行修改。
4. for 循环默认步长固定是1(即每次+1/-1),无法修改

※☆for循环与while循环的优劣对比

for 循环不会出现死循环,而且运行性能和速度上要优于 while 循环

while 循环的步长不固定为1,效果可以更加多样化,两者各有千秋,视具体需求进行选择

※☆冰の小结☆※

经过三章的讲述,XS的基本语法已经全部介绍完毕,后面将从具体函数的角度,通过各种实例来带大家更好融会贯通玩转XS。下一篇章将讲述七个纯读取函数和说说独立化那些事儿。

欲知后事如何,请听下回分解 

私の心はいつも氷氷です 

Cly0806

02/03/2022


投诉或建议