什么是鸿蒙?
华为鸿蒙系统(HUAWEI HarmonyOS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的分布式操作系统。 华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端,实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。 截至2024年6月21日,鸿蒙生态设备已经超过了9亿。
为什么要学鸿蒙?
随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,全场景多设备的全新底座,为消费者带来万物互联时代更为高效、便捷的体验。
新的场景同时也带来了新的挑战。开发者不仅需要支持更加多样化的设备,还需要支持跨设备的协作。不同设备类型意味着不同的传感器能力、硬件能力、屏幕尺寸、操作系统和开发语言,还意味着差异化的交互方式。同时跨设备协作也让开发者面临分布式开发带来的各种复杂性,例如跨设备的网络通信、数据同步等。若采取传统开发模式,适配和管理工作量将非常巨大。
鸿蒙的优势在哪?
当前移动应用开发中遇到的主要挑战包括:
- 针对不同设备上的不同操作系统,重复开发,维护多套版本。
- 多种语言栈,对人员技能要求高。
- 多种开发框架,不同的编程范式。
- 命令式编程,需关注细节,变更频繁,维护成本高。
鸿蒙操作系统具备的特征:
- 单一设备延伸到多设备:应用一次开发就能在多个设备上运行,软件实体能够从单一设备转移到其他设备上,且多个设备间能够协同运行,给消费者提供全新的分布式体验。
- 厚重应用模式到轻量化服务模式:提供轻量化的服务,最小化资源消耗,一步直达,快速完成消费者特定场景的任务。
- 集中化分发到AI加持下的智慧分发:为消费者提供智慧场景服务,实现“服务找人”。
- 纯软件到软硬芯协同的AI能力:提供软硬芯协同优化的原生AI能力,全面满足应用高性能诉求。
以上都是水话,借用国画大师陈丹青名言:“喜欢画画,**,拦不住的”,这里就是“喜欢编程,**,拦不住的”
Arkts基本知识:
声明
ArkTS通过声明引入变量、常量、函数和类型。
变量声明
以关键字let开头的声明引入变量,该变量在程序执行期间可以具有不同的值。
let hi: string = 'hello';
hi = 'hello, world';
常量声明
以关键字const开头的声明引入只读常量,该常量只能被赋值一次。
对常量重新赋值会造成编译时错误。
const hello: string = 'hello';
自动类型推断
由于ArkTS是一种静态类型语言,所有数据的类型都必须在编译时确定。
但是,如果一个变量或常量的声明包含了初始值,那么开发者就不需要显式指定其类型。ArkTS规范中列举了所有允许自动推断类型的场景。
以下示例中,两条声明语句都是有效的,两个变量都是string类型:
let hi1: string = 'hello';
let hi2 = 'hello, world';
变量说明:
1.变量只能包含数字,字母,下划线以及美元符号
2.首字符不能以数字开头
基本数据类型:
number类型
let age:number = 0b11011 //二进制11011
let age:number = 0o1234567 //八进制1234567
let age:number = 123456789 //十进制123456789
let age:number = 0x123465789abcdef //十六进制123456789abcdef
string类型
let name:string = 'hello world' /string类型字符串可以用单引号也可以用双引号括起来
let name:string = "hello world"
boolean类型
let isStudent:boolean = true
let isStudent:boolean = false
数组
let names:string[] = ["yuan","shen","qi","dong"] //在names数组中放置的都是string类型的数据
let ages:number[] = [123,0b110,0o123,0x123456] //在ages数组中放置的都是number类型的数据
元组
let student[string,string,number,boolean] = ['hxy','man',192,false] //姓名,性别,身高,是否玩原神?
函数
//无参函数
function 函数名(){
函数体
}
//有参函数
function 函数名(形参1,形参2...){
函数体
return 处理后的结果
}
//函数调用
函数名()
箭头函数
箭头函数是比普通函数更简洁的一种函数写法
//无参函数
let 函数名 =()=>{
}
//有参函数
let 函数名 =(形参)=>{
}
//函数调用
函数名()
对象(结构体)
描述一类物体的共同特点
eg:
//定义接口
interface 接口名{ //定义interface接口 接口中各属性间无逗号
属性1:类型1
属性2:类型2
属性3:类型3
方法名1:(参数:类型)=>{返回值} //没有参数时可以为空
方法名2:()=>{void} //没有返回值可以为void
}
//实例化对象
let 对象名:接口名={
属性1:属性值1,
属性2:属性值2,
属性3:属性值3
}
//获取对象属性值: 对象名.属性名
a.b
描述一类物体的行为(方法)
eg:
interface Person{
name:string
age:number
height:number
sing:(song:string)=>{void}
}
let hxy:Person = {
name:'洋酱',
age: 21,
height: 77
//定义方法
sing:(song:string)=>{
console.log("洋酱说","我来唱首歌",song)
}
}
console.log(hxy.name)
console.log(hxy.age)
console.log(hxy.height)
hxy.sing("鸡你太美")
联合类型
当同一个变量需要存储不同类型的数据就需要用到联合类型
let 变量名:类型1|类型2 = 值
eg:
//需求:定义一个变量存放年终考试评价
//考试评价:可能为具体的分数,可能为等级A,B,C,D
let judge:number|string = 100
judge = "A"
judge = "优秀"
console.log("年终考评成绩",judge)
联合类型还可以将变量值限定在一组数据范围内进行选择
eg:
let gender: 'man'|'woman'|'secret' = 'man' //正确的赋值
let gender: 'man'|'woman'|'secret' = 'boy' //错误的赋值
枚举类型
枚举类型将变量约定在一组数据范围内选择值,提高可维护性
//定义枚举(定义常量列表)
enum 枚举名{
常量1:值,
常量2:值,
......
}
//为变量设定枚举类型
相比于联合类型,枚举类型具有更好的可读性
eg:
enum UseColor{
Red:"#123456", //随便填的RGB值
Yellow:"#010101",
Green:"131452",
}
let color1:UseColor = UseColor.Red //正确的赋值
let color1:UseColor = "#666666" //错误的赋值