YStudio Y++

06 — 复杂业务场景

Y++ / YStudio 开发文档 · 一点滴

示例可拆到多个 .yt;此处为阅读方便写在一起。优先逐字段赋值。


场景 A:订单

金额 {
    整数 分 = 0
}

货品 {
    文本 编码 = "",
    文本 名称 = "",
    金额 单价
}

订单行 {
    货品 商品,
    整数 数量 = 1
}

订单 {
    文本 单号 = "",
    订单行 第一行,
    订单行 第二行
}
函数 行小计分(订单行 行) 整数 {
    返回(行.商品.单价.分 * 行.数量)
}

函数 演示订单() {
    订单 o
    o.单号 = "SO-1001"
    o.第一行.商品.编码 = "A01"
    o.第一行.商品.名称 = "键盘"
    o.第一行.商品.单价.分 = 12900
    o.第一行.数量 = 2
    o.第二行.商品.编码 = "B02"
    o.第二行.商品.名称 = "鼠标"
    o.第二行.商品.单价.分 = 5900
    o.第二行.数量 = 1

    整数 合计 = 行小计分(o.第一行) + 行小计分(o.第二行)
    输出(o.单号)
    输出(到文本(合计)) // 31700
}

场景 B:矩形与点

点 {
    整数 x = 0,
    整数 y = 0
}

矩形 {
    点 左上,
    点 右下
}
函数 矩形宽(矩形 r) 整数 {
    返回(r.右下.x - r.左上.x)
}

函数 点在矩形内(点 p, 矩形 r) 逻辑 {
    如果 (p.x < r.左上.x)
        返回(假)
    如果 (p.x > r.右下.x)
        返回(假)
    如果 (p.y < r.左上.y)
        返回(假)
    如果 (p.y > r.右下.y)
        返回(假)
    返回(真)
}

函数 演示碰撞() {
    矩形 box
    box.左上.x = 10
    box.左上.y = 10
    box.右下.x = 50
    box.右下.y = 40
    点 p
    p.x = 30
    p.y = 20
    如果 (点在矩形内(p, box))
        输出("命中")
    否则
        输出("未命中")
    输出(到文本(矩形宽(box)))
}

场景 C:数组模拟多节点(避免自引用)

树节点 {
    整数 id = 0,
    文本 标题 = "",
    整数 父id = 0
}
函数 演示树() {
    树节点 表[] = [
        {1, "根", 0},
        {2, "子A", 1},
        {3, "子B", 1},
        {4, "孙", 2}
    ]
    输出(表[2].标题) // 子A
    输出(到文本(表[4].父id)) // 2
}

场景 D:界面配置

窗口配置 {
    整数 宽 = 800,
    整数 高 = 600,
    文本 标题 = "主界面",
    逻辑 置顶 = 假
}

主题色 {
    整数 r = 32,
    整数 g = 32,
    整数 b = 32
}

界面配置 {
    窗口配置 窗口,
    主题色 背景
}
函数 演示配置() {
    界面配置 cfg
    // 默认值已来自 .yt;按需覆盖
    cfg.窗口.标题 = "工作台"
    cfg.背景.r = 40
    输出(cfg.窗口.标题)
    输出(到文本(cfg.背景.r))
}

场景 E:管道式加工 + 数组

函数 缩放(点 p, 整数 k) 点 {
    点 r
    r.x = p.x * k
    r.y = p.y * k
    返回(r)
}

函数 偏移(点 p, 点 d) 点 {
    点 r
    r.x = p.x + d.x
    r.y = p.y + d.y
    返回(r)
}

函数 演示管道() {
    点 表[] = [{1, 2}, {3, 4}]
    点 d
    d.x = 5
    d.y = 5
    点 p = 缩放(表[1], 10)
    p = 偏移(p, d)
    输出(到文本(p.x) + "," + 到文本(p.y)) // 15,25
}

场景 F:部门表(双层下标)

09-多层嵌套与下标链.md 示例 B。