第2篇:数据与类型——仓颉的基础数据类型 仓颉原生中文编程
第2篇数据与类型——仓颉的基础数据类型**作者**中文编程倡导者—— 李金雨联系方式wbtm2718qq.com**目标读者**编程入门零基础核心理念使用华为仓颉原生中文编程体验真正的国产编程语言一、开篇引入1.1 生活中的数据想象你要介绍自己你会说什么我叫张三文字我今年15岁整数我身高1.75米小数我是学生是/否这些都是数据——用来描述事物的信息。1.2 程序中的数据盒子上一节课我们写了这样的代码let 姓名 张三 let 年龄 15这里的姓名和年龄就是数据盒子变量我们用来存放信息。1.3 关于类型声明的思考在这里我们又要提到那个让人纠结的语法设计问题了。仓颉的语法是let 年龄: Int64 15按照我们中国人的思维习惯应该是整数类型的年龄等于15字符串类型的姓名等于张三但仓颉的写法是年龄整数类型的这就像是说苹果红色的而不是红色的苹果。如果仓颉能像C#那样设计// 设想中的更符合中国人习惯的语法 Int64 年龄 15 // 整数类型 年龄 15 String 姓名 张三 // 字符串类型 姓名 张三这样读起来就顺畅多了先知道是什么类型再看叫什么名字最后看值是什么——完全符合我们的思维习惯。不过既然仓颉目前采用的是类型后置的设计我们就先适应它。也许未来的版本会改进呢1.4 本课目标今天我们要学习仓颉的基本数据类型如何创建数据盒子如何使用不同类型的数据做一个个人信息档案程序二、概念讲解2.1 数据盒子变量什么是数据盒子想象你有一个储物柜里面有很多盒子每个盒子上贴着标签┌─────────────┐ │ 玩具盒子 │ → 里面装玩具 ├─────────────┤ │ 书本盒子 │ → 里面装书本 ├─────────────┤ │ 文具盒子 │ → 里面装文具 └─────────────┘在编程中数据盒子就像是这些贴标签的盒子用来存放数据。创建数据盒子let 名字: String 张三部分含义let创建一个数据盒子名字盒子的标签名称:分隔符String盒子的类型只能装字符串把数据放进盒子张三具体的数据再次吐槽一下语法我们中国人习惯说字符串类型的名字但仓颉的写法是名字字符串类型的名字: String。这就像我们习惯说“红色的苹果”仓颉的写法像是“苹果红色的”虽然不影响使用但确实不太符合我们的语言习惯。希望华为能在未来版本中改进2.2 仓颉的基本数据类型类型1整数Int64、Int32等——装整数的盒子用来存储年龄、人数、分数等整数信息。let 年龄: Int64 15 // 整数 let 班级人数: Int32 50 // 整数 let 分数: Int64 95 // 整数 let 负数: Int64 -10 // 负数也可以整数类型的区别类型范围说明Int8-128 ~ 127很小的整数Int16-32768 ~ 32767小整数Int32约-21亿 ~ 21亿普通整数Int64很大很大大整数生活例子你的年龄15Int8就够了中国人口14亿需要Int64考试分数100Int8就够了类型2小数Float64、Float32——装小数的盒子用来存储身高、体重、价格、成绩等带小数点的数。let 身高: Float64 1.75 // 小数 let 体重: Float64 60.5 // 小数 let 圆周率: Float64 3.14159 // 小数 let 温度: Float64 -5.5 // 负数也可以注意小数在计算机里叫浮点数所以类型名是Float。类型3文字String、Char——装文字的盒子用来存储名字、地址、句子、文章内容等文字信息。let 姓名: String 张三 // 字符串多个字符 let 性别: Char 男 // 字符单个字符 let 地址: String 北京市海淀区 // 字符串 let 空字符串: String // 空的字符串String和Char的区别String一串文字用双引号...Char单个字符用单引号...类型4真假Bool——装是/否的盒子只有两种可能的值true真/是或false假/否let 是否学生: Bool true let 是否成年: Bool false let 是否会员: Bool true let 是否在线: Bool false生活例子你是学生吗是true你成年了吗否false今天下雨了吗否false这个账号是VIP吗是true2.3 类型推断仓颉很聪明有时候你不用告诉它类型它也能猜出来// 明确指定类型 let 姓名: String 张三 // 让仓颉自己推断类型 let 姓名 张三 // 仓颉知道这是String类型 let 年龄 15 // 仓颉知道这是Int64类型建议为了代码更清晰建议初学者还是写上类型2.4 关于类型声明语法的再思考让我们再次对比一下不同的语法设计仓颉目前的语法类型后置let 姓名: String 张三 let 年龄: Int64 15 let 身高: Float64 1.75 let 是否学生: Bool trueC#风格的语法类型前置更符合中国人习惯string姓名张三;int年龄15;double身高1.75;bool是否学生true;为什么类型前置更符合中国人习惯我们中文的语序是修饰语在前中心语在后美丽的花朵高大的树木红色的汽车字符串类型的变量所以字符串类型的 姓名比姓名 字符串类型的更符合我们的思维习惯。建议华为在仓颉的未来版本中考虑支持可选的类型前置语法或者至少提供一个语法糖让两种写法都能用这样既能保持与国际接轨又能照顾中国人的使用习惯三、动手实践3.1 基础练习创建个人档案// 个人档案程序 // 作者你的名字 main() { println( 个人档案 ) // 基本信息 let 姓名: String 张三 let 年龄: Int64 15 let 身高: Float64 1.75 // 单位米 let 体重: Float64 60.0 // 单位公斤 let 是否学生: Bool true // 输出信息 println(姓名${姓名}) println(年龄${年龄}岁) println(身高${身高}米) println(体重${体重}公斤) println(是否学生${是否学生}) // 计算BMI let bmi: Float64 体重 / (身高 * 身高) println(BMI指数${bmi}) // 判断体重状态 if (bmi 18.5) { println(体重状态偏瘦) } else if (bmi 24.0) { println(体重状态正常) } else if (bmi 28.0) { println(体重状态偏胖) } else { println(体重状态肥胖) } }3.2 进阶练习成绩统计// 成绩统计程序 main() { println( 成绩统计 ) // 各科成绩 let 语文: Int64 85 let 数学: Int64 92 let 英语: Int64 78 let 物理: Int64 88 let 化学: Int64 90 // 计算总分 let 总分: Int64 语文 数学 英语 物理 化学 // 计算平均分 let 平均分: Float64 Float64(总分) / 5.0 // 输出结果 println(语文${语文}分) println(数学${数学}分) println(英语${英语}分) println(物理${物理}分) println(化学${化学}分) println(----------------) println(总分${总分}分) println(平均分${平均分}分) // 判断等级 if (平均分 90) { println(等级优秀) } else if (平均分 80) { println(等级良好) } else if (平均分 70) { println(等级中等) } else if (平均分 60) { println(等级及格) } else { println(等级不及格) } }3.3 挑战练习温度转换器// 温度转换器 main() { println( 温度转换器 ) // 摄氏温度 let 摄氏温度: Float64 25.0 // 转换为华氏温度 // 公式华氏 摄氏 × 9/5 32 let 华氏温度: Float64 摄氏温度 * 9.0 / 5.0 32.0 // 转换为开尔文温度 // 公式开尔文 摄氏 273.15 let 开尔文温度: Float64 摄氏温度 273.15 println(摄氏温度${摄氏温度}°C) println(华氏温度${华氏温度}°F) println(开尔文温度${开尔文温度}K) }四、知识总结4.1 核心概念回顾数据盒子变量用来存储数据的容器数据类型告诉计算机这个盒子里能装什么类型的数据基本类型整数Int64、小数Float64、文字String、真假Bool4.2 关于语法设计的总结虽然仓颉的类型后置语法let 姓名: String不太符合中国人的定语前置习惯但它也有优点优点与国际主流语言Rust、Swift、Kotlin保持一致类型信息明确不容易混淆有利于国际化推广缺点不符合中国人的语言习惯初学者需要时间适应读起来不够顺畅建议初学者可以先适应这种写法希望华为能在未来版本中提供类型前置的可选语法或者提供IDE支持让两种写法都能自动转换4.3 关键代码速查// 整数 let 年龄: Int64 15 // 小数 let 身高: Float64 1.75 // 字符串 let 姓名: String 张三 // 字符 let 性别: Char 男 // 布尔值 let 是否学生: Bool true // 类型转换 let 整数: Int64 100 let 小数: Float64 Float64(整数)4.4 常见错误提醒错误现象原因解决方法类型不匹配把文字赋给数字变量检查类型是否对应变量未定义使用了没创建的变量先用let创建变量字符串没引号String类型没加引号加上或类型转换错误直接赋值不同类型使用类型转换函数五、课后作业5.1 巩固练习必做练习1完善个人档案在上面的个人档案基础上添加学校名称班级爱好计算并显示BMI和体重状态练习2购物小票制作一个购物小票程序商品1苹果单价5元数量3斤商品2牛奶单价8元数量2盒商品3面包单价6元数量1个计算总价练习3圆的计算输入圆的半径计算周长2 × π × r面积π × r × r5.2 创意编程选做创意1制作名片制作一个电子名片包含姓名、职位联系方式公司/学校用字符画装饰创意2简单计算器实现两个数的加法减法乘法除法注意除数不能为05.3 下篇预习下一篇我们将学习数据的运算了解如何对数据进行各种计算。预习问题怎么计算两个数的和、差、积、商怎么比较两个数的大小怎么判断多个条件并且、或者思考题你觉得在编程语言设计中应该优先考虑国际化与国际接轨还是优先考虑本土化符合本国人的习惯能不能两者兼顾恭喜你完成了第2篇的学习现在你已经掌握了仓颉的基本数据类型。虽然类型后置的语法设计有改进空间但一旦习惯了写起来也很流畅。下节课我们将学习如何对这些数据进行运算