仓颉开发之——基本概念(5)

一 概述

  • 标识符
  • 变量
  • 类型
  • 表达式
  • 程序结构

二 标识符

标识符用于给变量命名,分为普通标识符和原始标识符

2.1 普通标识符

1-命名规则

  • 由英文字母开头,后接零至多个英文字母、数字或下划线
  • 由一至多个下划线开头,后接一个英文字母,最后可接零至多个英文字母、数字或下划线

2-示例

1
let _cangjie = 0; 

2.2 原始标识符

1-概念

  • 原始标识符是在普通标识符或关键字的外面加上一对反引号
  • 主要用于将关键字作为标识符的场景

2-示例

1
2
let `if` = 'if'
println(`if`)

三 变量

3.1 概念

变量将一个名字和一个特定类型的值关联起来

3.2 分类

1-可变变量(var关键字)

1
var name:type = expr

2-不可变变量(let)

1
let name:type = expr

3-常量(const)

1
const name:type = expr

3.3 示例

1-var

1
2
var age:Int = 8
age=9;

2-let

1
2
let name:String = "zs"
name= 'ls' //错误,let不能赋值

3-const

1
const PI=3.14

说明:当初始值具有明确类型时,可以省略变量类型标注,编译器会自动推断出变量类型

四 类型(基础数据类型)

4.1 整数类型

1-表格

整数类型 Int8 Int16 Int32 UInt8 UInt16 UInt32 UInt64
字面量后缀 i8 i16 i32 u8 u16 u32 u64
表示范围 -2^7~2^7-1 0~2^8-1

2-示例

1
2
let a:Int64 = 2024
let b= 67u8

4.2 浮点数类型

1-表格

浮点数类型 Float16 Float32 Float64
字面量后缀 f16 f32 f64

2-示例

1
let c:Float64= 6.21

4.3 布尔类型(true|false)

1
let d: Bool= true||false

4.4 字符类型(Rune-符文)

1
2
let e:Rune = '仓'
let f:Rune = '\u{9889}' //unicode编码

4.5 字符串类型(String)

1
2
3
4
5
6
let a: Int64= 2024
let g: String= "Cang" +"jie"
let h:String= """
若到江南赶上春,千万和春住。
"""
let i: String= "Cangjie${a}"

4.6 数组类型(Array)

1
2
let j: Array<Rune> = [r'仓', r'颉']
let k: VArray<Rune, $2> = [r'C', r'J']

说明:

  • r'仓'表示Rune示例,在字符串前加r表示
  • VArray用于声明数组类型,$2表示数组长度
  • 可能存在编码问题

编码问题加上如下声明:

1
2
3
4
5
6
7
8
9
10
import std.collection.*
foreign func SetConsoleOutputCP(wCodePageID: UInt32): Bool
main() {
unsafe { SetConsoleOutputCP(65001) }
let j: Array<Rune> = [r'仓', r'颉']
let k: VArray<Rune, $2> = [r'C', r'J']
println('a==${a}')
println("j=${j}")
println("k=${k[0]}")
}

4.7 元组类型

1
2
let l :(Int64 ,Float64 ) =(2024,8.07)
println("l0=${l[0]},l1=${l[1]}")

4.8 区间类型

1
let m:Range<Int64>=2019..2024

五 表达式

表达式是可以求值的程序元素,可用于变量赋值、函数传参和返回值等场

5.1 if表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package demo
import std.random.*
main(): Int64 {

let day = Random().nextInt8(7)+1
if( day == 1) {
print("星期一")
} else if (day == 2) {
print("星期二")
} else if (day == 3) {
print("星期三")
} else if (day == 4) {
print("星期四")
} else if (day == 5) {
print("星期五")
} else if (day == 6) {
print("星期六")
} else if (day == 7) {
print("星期日")
}

return 0
}

5.2 while表达式

1
2
3
4
5
6
7
8
main(): Int64 {
var i = 0
while (i<10) {
i++
println(i)
}
return 0
}

5.2 for-in表达式

1
2
3
4
5
6
main(): Int64 {
for (i in 1..10) {
println(i)
}
return 0
}

说明:

  • for-in迭代对象需要实现迭代器接口Iterable<T>
  • 遍历对象可以是:Range、元组等
  • 循环体中无须引用循环变量,可用通配符_

六 程序结构

6.1 项目为例

6.2 结构

七 思维导图