深入解析仓颉编程语言:条件判断、循环结构与控制流机制【华为鸿蒙应用开发】

举报
柠檬味拥抱 发表于 2024/07/20 13:30:54 2024/07/20
【摘要】 理解仓颉编程语言中的表达式在编程语言的世界中,表达式是至关重要的构建块。传统编程语言中的表达式由一个或多个操作数(operand)通过零个或多个操作符(operator)组合而成,总是隐含着一个计算过程,因此每个表达式都会有一个计算结果。在仓颉编程语言中,我们对表达式的定义进行了简化和扩展,几乎所有可以求值的语言元素都被视为表达式。本文将详细介绍仓颉编程语言中的各种表达式类型及其用法。 仓...

理解仓颉编程语言中的表达式

在编程语言的世界中,表达式是至关重要的构建块。传统编程语言中的表达式由一个或多个操作数(operand)通过零个或多个操作符(operator)组合而成,总是隐含着一个计算过程,因此每个表达式都会有一个计算结果。在仓颉编程语言中,我们对表达式的定义进行了简化和扩展,几乎所有可以求值的语言元素都被视为表达式。本文将详细介绍仓颉编程语言中的各种表达式类型及其用法。

仓颉中的表达式类型

在仓颉编程语言中,表达式不仅包括传统的算术运算表达式,还包括条件表达式、循环表达式和其他控制转移表达式(如 breakcontinue)。这些表达式都可以被求值,并作为值去使用,例如作为变量定义的初值和函数实参等。此外,作为强类型编程语言,仓颉中的每个表达式不仅可求值,还有确定的类型。

条件表达式

仓颉中的条件表达式包括 if 表达式和 if-let 表达式,具体用法如下:

if 表达式

if 表达式用于在不同条件下执行不同的代码块。其基本形式如下:

if (条件) {
  分支 1
} else {
  分支 2
}

其中,“条件”是布尔类型表达式,“分支 1”和“分支 2”是代码块。if 表达式将根据条件的值来决定执行哪个分支。以下是一个简单的例子:

import std.random.*

main() {
    let number: Int8 = Random().nextInt8()
    println(number)
    if (number % 2 == 0) {
        println("偶数")
    } else {
        println("奇数")
    }
}

在这个程序中,我们使用仓颉标准库生成一个随机整数,并使用 if 表达式判断这个整数是偶数还是奇数。

if-let 表达式

if-let 表达式用于在模式匹配成功时执行特定的代码块。它的详细用法将在后续章节中介绍。

循环表达式

仓颉提供了多种循环表达式,包括 for-in 表达式、while 表达式和 do-while 表达式。每种循环表达式都有其特定的使用场景和规则。

while 表达式

while 表达式用于在条件为真时重复执行一个代码块。其基本形式如下:

while (条件) {
  循环体
}

以下是一个基于二分法近似计算 2 的平方根的例子:

main() {
    var root = 0.0
    var min = 1.0
    var max = 2.0
    var error = 1.0
    let tolerance = 0.1 ** 10

    while (error ** 2 > tolerance) {
        root = (min + max) / 2.0
        error = root ** 2 - 2.0
        if (error > 0.0) {
            max = root
        } else {
            min = root
        }
    }
    println("2 的平方根约等于:${root}")
}

do-while 表达式

do-while 表达式确保循环体至少执行一次。其基本形式如下:

do {
  循环体
} while (条件)

以下是一个使用蒙特卡洛算法近似计算圆周率的例子:

import std.random.*

main() {
    let random = Random()
    var totalPoints = 0
    var hitPoints = 0

    do {
        let x = random.nextFloat64()
        let y = random.nextFloat64()
        if ((x - 0.5) ** 2 + (y - 0.5) ** 2 < 0.25) {
            hitPoints++
        }
        totalPoints++
    } while (totalPoints < 1000000)

    let pi = 4.0 * Float64(hitPoints) / Float64(totalPoints)
    println("圆周率近似值为:${pi}")
}

代码块

在仓颉编程语言中,由一对大括号 {} 包围的一组表达式称为“代码块”。代码块作为程序的一个顺序执行流,其中的表达式按编码顺序依次执行。如果代码块中有至少一个表达式,其值和类型等于最后一个表达式的值和类型;如果没有表达式,则代码块的类型为 Unit,值为 ()

注意,代码块本身不是一个表达式,不能被单独使用,而是依附于函数、条件表达式和循环表达式等执行和求值。

for-in 表达式

for-in 表达式用于遍历那些扩展了迭代器接口 Iterable<T> 的类型实例。其基本形式如下:

for (迭代变量 in 序列) {
  循环体
}

以下是一个遍历数组并输出农历 2024 年各月干支纪法的例子:

main() {
    let metaArray = [r'甲', r'乙', r'丙', r'丁', r'戊',
        r'己', r'庚', r'辛', r'壬', r'癸']
    let noumenonArray = [r'寅', r'卯', r'辰', r'巳', r'午', r'未',
        r'申', r'酉', r'戌', r'亥', r'子', r'丑']
    let year = 2024
    let metaOfYear = ((year % 10) + 10 - 4) % 10
    var index = (2 * metaOfYear + 3) % 10 - 1
    println("农历 2024 年各月干支:")
    for (noumenon in noumenonArray) {
        print("${metaArray[index]}${noumenon} ")
        index = (index + 1) % 10
    }
}

总结

本文介绍了仓颉编程语言中常见的表达式类型及其用法,包括条件表达式、循环表达式和代码块的使用。通过理解这些表达式的定义和使用规则,我们可以编写出更为灵活和强大的程序。在后续章节中,我们将详细探讨仓颉中的其他表达式类型及其高级用法。
image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。