第 1 章:心智模型
先接受三件事:动态类型、缩进定块、文件即模块。其余语法都挂在这上面。
01动态类型 vs 静态类型
Python 默认运行期才确定类型;Kotlin / ArkTS 在编译期就拦住类型错误。
Python
name = "Ada" # 运行时才是 str
name = 42 # 合法:变量可改绑到 int
print(type(name)) # <class 'int'>
Kotlin
var name: Any = "Ada"
name = 42 // 需要 Any / 换类型才行
println(name)
ArkTS
let name: string | number = "Ada";
name = 42; // 联合类型才允许
console.info(name);
Python 可以「先写后验」。类型注解(下一章)是可选护栏,不是编译器硬门槛。
02缩进 = 代码块
没有大括号;同一层级必须同一缩进(推荐 4 空格)。
Python
if True:
print("in block")
print("same indent")
print("out")
Kotlin
if (true) {
println("in block")
println("same braces")
}
println("out")
ArkTS
if (true) {
console.info("in block");
console.info("same braces");
}
console.info("out");
混用 Tab / 空格会
IndentationError。编辑器开「显示空白」最省事。03文件即模块
一个 .py 文件就是一个模块;包是带 __init__.py(或命名空间包)的目录。
Python
# math_utils.py
def add(a, b):
return a + b
# main.py
from math_utils import add
print(add(1, 2))
Kotlin
// MathUtils.kt
fun add(a: Int, b: Int) = a + b
// 同模块或 import
import com.example.add
ArkTS
// MathUtils.ets
export function add(a: number, b: number): number {
return a + b;
}
import { add } from './MathUtils';
04真值与「空」
条件里这些算假:None、False、0、""、[]、{}、set()。
Python
items = []
if not items:
print("empty")
Kotlin
val items = emptyList<Int>()
if (items.isEmpty()) {
println("empty")
}
ArkTS
const items: number[] = [];
if (items.length === 0) {
console.info("empty");
}
不要用
if items == [] 判空;习惯写 if not items / if items:。