仓颉笔记

杂项知识点

1. 字符串可以用+来拼接,与Python类似

2. 在字符串中用${value}插入变量

3. 与(&&)或(||)非(!) :具有逻辑短路特性

注:只能用于布尔类型,而不能用于int等类型

1.命名规则

  1. 英文字母开头,后接英文字母、数字或下划线(可以下划线开头)
  2. 原始标识符:在关键字外面加上反引号如: 就可以当做标识符(变量名)使用

2.变量声明

  • 变量声明有两种方法,一种是关键词var,另一种是let
    var声明的变量可以改变变量的值
    let声明的变量不能改变值(静态?)

  • 也可以在定义的时候就指定变量的类型

var e: Int64 
  • 同时定义多个变量?数组?
package demo1

main() {
    var (b,c) : (Int64,Int64) = (1,2)
    println("${b} ${c}") 
}

一、带符号整数(Signed Integers)

类型名 含义 取值范围
Int8 8 位有符号整数 -128 ~ 127
Int16 16 位有符号整数 -32,768 ~ 32,767
Int32 32 位有符号整数 -2,147,483,648 ~ 2,147,483,647
Int64 64 位有符号整数 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

有“符号”(signed)表示可以是正数或负数。


二、无符号整数(Unsigned Integers)

类型名 含义 取值范围
UInt8 8 位无符号整数 0 ~ 255
UInt16 16 位无符号整数 0 ~ 65,535
UInt32 32 位无符号整数 0 ~ 4,294,967,295
UInt64 64 位无符号整数 0 ~ 18,446,744,073,709,551,615

“无符号”(unsigned)表示只能是非负整数。

三、类型简写

类型 说明
Int 通常等价于 Int64(平台相关,64 位机器一般是 64 位)
UInt 通常等价于 UInt64

3.函数

函数的定义与使用

package demo1

func plus(a:Int64,b:Int64) :Int64{
    return a+b
}

main() {
    var (a, b) = (5, 6)
    println(plus(a,b))
}

多个返回值

package demo1

func vals():(Int64,Int64) {
    return(3,7)
}
main() {
    var (a, b) = vals()
    println(a)
    println(b)
    
    var(_,c) = vals()
    println(c)
}

注:对于不需要的值,可以用通配符_来接收

4.if-elif-else结构

package demo1

main() {
    var value = 5
    if(value>10){
        println("value=${value}>10")
    }else if(value == 10){
        println("value=10")
    }else{
        println("value=$${value}<10")
    }
}

5.For和While循环

for循环

1.相当于python的for i in range(0,3)

  1. 0(包括)~3(不包括)
package demo1

main() {
    for(i in 0..3){
        println(i)
    }
}

输出:

0
1
2
  1. 0(不包括)~3(包括)
package demo1

main() {
    for(i in 0..=3){
        println(i)
    }
}

输出

1
2
3
  1. 仅控制循环次数
package demo1

main() {
    for(_ in 0..3){
        println("111")
    }
}

输出:

111
111
111

2.遍历列表

package demo1

main() {
    let lists = ["This","is","Cangjie"]
    for(i in lists){
        println(i)
    }
}

3.以元组的方式遍历列表

package demo1

main() {
    let array = [(1,2),(3,4),(5,6)]
    for((x,y) in array){
        println("${x},${y}")
    }
}

while循环

package demo1

main() {
    var i = 1
    while( i <= 3){
        print("${i} ")
        i++
    }
}

where控制条件

package demo1

main() {
    // 打印奇数
    for(i in 0..8 where i%2!=0){
        // where后接条件
        println(i)
    }
}

输出:

1
3
5
7

6.Range:表示具有固定步长的序列

Range<T>(start: T, end: T, step: Int64, hasStart: Bool, hasEnd: Bool, isClosed: Bool)

参数解释:

  • start: T - 开始值。
  • end: T - 结束值。
  • step: Int64 - 步长,取值不能为 0。
  • hasStart: Bool - 是否有开始值。
  • hasEnd: Bool - 是否有结束值。
  • isClosed: Bool - true 代表左闭右闭,false 代表左闭右开。

表现形式1:

package demo1

main() {
    let r1 = Range<Int64>(0,10,1,false,false,false)

    for(i in r1){
        print(i.toString()+" ")
    }
    
}

表现形式2:

Start..End:Step

注:这些值可以为变量

package demo1

main() {
    let r1 = 0..10:2 // 0 2 4 6 8 

    for(i in r1){
        print(i.toString()+" ")
    }
}
package demo1

main() {
    let re5 = 10..0 : 1

    // 这一行代码是创建 re5 范围的迭代器
    var it = re5.iterator()

    // Rust 中的 Option 有两个变种:Some(value) 表示有值,None 表示无值。
    // 这里的 it.next() 调用返回一个 Option 类型
    while (let Some(i) <- it.next()) {
        // <- :解包 Option 类型
        println(i)
    }    
}

7.Array数组:

数组声明为 Array<T>,其中 T 表示类型。T 可以是任何类型。

Array<T>(size: Int64, generator: (Int64) -> T)
  • size:数组长度;
  • generator:一个函数,用于根据索引 i 生成第 i 个元素。

数组的创建

package demo1

main() {
    var a : Array<Int64> = [1,3,2,4]
    var b : Array<String> = ["Hello"," World"]

    // lambda 表达式初始化
    // i默认为0?每次自动加1?
    let d = Array<Int64>(3,{i => 2*i+1})
    for(x in d){
        println(x)
    }
}

查看数组的长度

println(d.size)
posted @ 2026-07-02 18:16  畅畅c  阅读(3)  评论(0)    收藏  举报