program-in-chinese / overview

中文编程的历史、现状和展望。issue 中进行相关问题的讨论.

Home Page:https://zhuanlan.zhihu.com/codeInChinese

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于简化关键词汉化的一些建议

4b5ent1 opened this issue · comments

commented

主题:

  1. 如果英文字符组合比汉字方便,则用英文字符
  2. 如果中文比英文字符组合更直观,再用汉字
  3. 定义token时,把每个字母当作单个中文字符(参考USB等英文缩写

for example:program-in-chinese/CTS#10

这是一种汉化typescript的方案(记为方案1

枚举 性别_ {男,女}

类别 {
    构造(公开 姓名:文字,
         公开 性别:性别_,公开 年龄:数字){}
}

类别 学生 扩展  {
    构造(公开 基本信息:人,公开 学校:文字){
        父级(基本信息.姓名,
              基本信息.性别,基本信息.年龄);
    }
}

函数 问好(那谁:人){
    如果(那谁 身为 学生){
        返回 那谁.性别 === 性别_.男?
            `${那谁.学校}的小男孩 ${那谁.姓名} 真乖.`
          : `${那谁.学校}的小女孩 ${那谁.姓名} 真乖.`
    }
}

常量 问好语句 = 问好(新建 学生(新建 人(“黄xx”,性别_.男,15,
                                “八小”));

文档..内部HTML = 问好语句

控制台.日志(问好语句)

方案1使用的映射表目测为:

token origin token origin token origin
类别 class 函数 function 枚举 enum
构造 constructor 公开 public 父级 super
文字 String 数字 Number 如果 if
身为 instanceof 返回 return 新建 new
常量 const 文档 document body
内部HTML innerHTML 控制台 console 日志 log

个人觉得方案一有些地方可以优化,比如class->类别这种的,可以改写成bc。基于此法,则有方案二:

vE T性别 {男,女}

bc 人{
    cc( tp 姓名:文字,
        tp 性别:T性别,
        tp 年龄:数字){}
    cc(i){
        cc(i.姓名,i.性别,i.年龄)
    }
}

bc 学生 be 人 {
    cc(tp 信息:人,tp 学校:文字){
        bs(信息);
    }
    va 性别为男 = ()=> 此.性别 为 T性别.男
}

bf 问好(某人:人){
    vf(某人 从 学生){
        va 某校 = 某人.学校
        va 某某某 = 某人.姓名

        返回 某人.性别为男?
            `${某校}的小男孩 ${某某某} 真乖.`
          : `${某校}的小女孩 ${某某某} 真乖.`
    }
}

vc v问好 = 问好(vn 学生(vn 人(“黄xx”,性别.男,15,
                                “八小”));
网页.内容.内部HTML = v问好

控.印(v问好)

方案二使用的映射表为:

// b=基础/basic,T=类型/type,v=值/value
// 规范:预定义type用小写t开头,自定义用大写T开头

token origin alternative token origin alternative
bc class b类 be extends c从,be
cc constructor bcc,b构 ci implements 实现
co instanceof bv,例为 cs super 源、父级
bf function b函 bi interface 接口
tp public 公开 vE enum b枚,te
pp private 私有 vc const 常量
vb let va var 变量
vn new v新 vR return 返回
vf if 如果 ff for vff/fo,复
vw while 当,为真 vs switch
this vt se case
ve else null v0
undefined vu break br
=== ii == vi
文字 String tS,t文 数字 Number tn,t数

// i=info=信息,控.印=console.log
// 网页.内容.内HTML = document.body.innerHTML
// 类似for .. in的 in 这种,不需要再简化了

备注:方案二并不是一个最优化的版本,如何在英文字母组合和汉字间取舍,需要经过实践检验。

关于va vb vc这样的缩写,主要是受星际争霸快捷键的启发(玩游戏的时候按快捷键都是不用想的),故方案2也可以称作星际汉化法【说白了,就是把字母当汉字使

PS:vim的:wq,也是类似的逻辑(w=write,q=quit),但这是基于英语的,不适合中文语境


方案二在微信群里争议比较大,故折中考虑,来一个方案三:

enum T性别 {男,女}

class 人{
    构造( pub 姓名:文字,
        pub 性别:T性别,
        pub 年龄:数字){}
    构造(i){
        cc(i.姓名,i.性别,i.年龄)
    }
}

class 学生 <- 人 {
    构造(pub 信息:人,pub 学校:文字){
        super(信息);
    }
    var 性别为男 = ()=> 此.性别 为 T性别.男
}

fn 问好(某人:人){
    if(某人 从 学生){
        var 某校 = 某人.学校
        var 某某某 = 某人.姓名

        return 某人.性别为男?
            `${某校}的小男孩 ${某某某} 真乖.`
          : `${某校}的小女孩 ${某某某} 真乖.`
    }
}

const v问好 = 问好(new 学生(new 人(“黄xx”,性别.男,15,“八小”));

网页.内容.内部HTML = v问好

控.印(v问好)

方案3使用的映射表为:

token origin alternative token origin alternative
cls class <- extends 扩展
构造 constructor cc impl implements 实现
insof instanceof 例为 super - 父级
fn function F 接口 interface
pub public enum - 枚举
priv private const - 常量
let - var - 变量
new - return - 返回
if - 如果 for -
while - 当,为真 switch - 断,sw
this case -
else - null
undefined break -
=== 全等 == 等于
文字 String 数字 Number

如果英文字符组合比汉字方便

如果关键词如此简化, 为何命名要用中文?

commented

@nobodxbodon 如果关键词如此简化, 为何命名要用中文?

中文命名主要时方便业务逻辑。而目前的一些关键词汉化,其实并没有让代码的视觉可读性提升。比如【公开 甲:整数】里面的[公开],这种属于次一级的语法元素,用英文反而可以降低视觉上的优先级,从而更focus中文部分。换句话说:

bc 人{  cc( tp 姓名:文字,tp 性别:T性别,tp 年龄:数字){}
    cc(i){cc(i.姓名,i.性别,i.年龄) }
}

这段代码里,把[类别,公开]换成[tp,bc],可以减少视觉上的噪音

commented

准备合并讨论。合并前简单总结一下:

  1. 方案2太极端
  2. 有些关键词可以不用翻译,但可以简化
  3. 应该思考一下语法兼容的问题。比如for in是英文的语法,跟中文的表达有出入

ref:
#40 (comment)

https://en.cppreference.com/w/cpp/keyword
github.com/microsoft/TypeScript/issues/2536