赞
踩
目录
今天是一起学习的第二天,在上一篇中已经下载好了DevEco studio,并且配置了环境。很多小伙伴可能有HTML,CSS,JS,vue学习经历,或者Android开发经历,那么在鸿蒙开发中,我们从ArkTS开始。
在华为开发者学堂中,可以看到详细的关于ArkTS的背景,起源和演进,感兴趣的小伙伴可以点开了解。
附上官网链接:华为开发者学堂首页-华为开发者学堂 (huawei.com)
我的老师(彭老师)在授课的过程中时是从TypeScript的基础语法开始的,可以类比学习ArkTS,不了解TypeScript基础语法并且想仔细熟悉一下的小伙伴也可以先去搜索一下,在这里的第二部分也会介绍,也可以继续看下去。
那么我们正式开始吧。
ArkTS 是华为自研的开发语言,它在TS的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。
ArkTS是HarmonyOS优选的主力应用开发语言,方舟开发框架 ,为HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。
ArkTS围绕应用开发在TS生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。
当前,ArkTS在TS的基础上主要扩展了如下能力:
基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。
状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。开发者可以灵活的利用这些能力来实现数据和UI的联动。
控制渲染:ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。
未来,ArkTS会结合应用开发/运行的需求持续演进,逐步提供并行和并发能力增强、系统类型增强、分布式开发范式等更多特性。
文字太多很难看懂?别急,这里我们借用一下官网的图,需要了解一下的(图1:ArkTS、TypeScript和JavaScript之间的关系 。以及图2:ArkUI开发框架):
存储数据时,用变量或常量(!!!命名只能包含数字、字母、下划线、$,不能以数字开头),变量可变。
格式: let 变量名: 类型 = 值;
例如:
- let title: string = '水果捞';
- let price: number = 21.8;
常量不可变。例如:π(圆周率),huawei(名称)
格式:const 常量名: 类型 = 值;
例如:
const PI: number = 3.141592653589793;
布尔类型,赋值为true或者false;
格式: let 变量名 : boolean = true;
例如:
- let isselect : boolean = false;
- let isbool: boolean = true;
所有的数字都是浮点数,类型是number,支持十进制、二进制、八进制、十六进制
格式: let 变量名 : number = 2024;
例如:
- let price: number = 21.8;
- let binary : number = 0b11011;
- let octal : number = 0o412;
- let hex : number = 0x2e3;
格式: let 变量名 : string = "这里的字符串单引号和双引号都行";
例如:
let title: string = '水果捞';
第一种:在元素类型后面加上[],第二种使用数组泛型。
格式:let 数组名: 类型[] = [数据1,数据2,数据3......];
数组泛型 :let 数组名 : Array<元素类型> = [数据1,数据2,数据3......];
例如:(!!数据必须同前面的类型一致)
- let names: string[] = ['小红','小明','大强'];
- let list: Array<number> = [1,2,3];
允许表示一个已知元素类型和数量的数组,各元素的类型可以不同。
格式:let 变量名 : [类型1,类型2]; 也要注意类型对应,不然会报错。
- let x:[string,number];
- x = ["hello",12];
联合类型时一种灵活的数据类型,它修饰的变量可以存储不同的数据类型
格式:let 变量:类型1 | 类型2 |类型3 = 值
例如:
- let judge: number| string = 100;
- judge = 'A'; // 合法
联合类型还可以将变量值约定在一组数据范围内进行选择
例如:
let gender : 'man' | 'woman' | 'secret' = 'man'; //实际运用时只能选这三个写,可以降低错误率
约定变量只能在一组数据范围内选择值(与联合的区别:不仅有值,还有值的名称)
枚举(常量列表)
1.定义枚举类型(常量列表)
2.使用枚举类型,约束变量格式:
enum 枚举名{ //定义枚举类型
常量1 = 值, //注意逗号
常量2 = 值,
..........
}
例如:
- enum ThemeColor{
- Red = '#ff0f29', //最好首字母大写
- Orange = '#ff7100',
- Green = '#30b30e'
- }
-
- let color: ThemeColor = ThemeColor.Red //使用枚举类型
如果想要给在编程阶段还不清楚类型的变量指定一个类型。可以使用unknown来标记这些变量。
- let notsure : unknown = 4;
- notsure = "maybe string";
- notsure = false;
- let u : null = null;
- let un: undefined = undefined;
!小建议:在不熟悉的地方可以在DevEco studio中打一遍 ,然后使用console.log来看结果。代码写在最上面的部分,然后通过调用console.log(),在下面的日志中查看。
例如:
if-else语句,包括嵌套的if语句,和大多数开发语言类似,相信大多数小伙伴都知道怎么用,这里以一个简单的判断奇偶为例。
- //定义数字
- let num: number = 17;
-
- if(num > 0)
- console.log(num+" 是正数");
- else if(num < 0)
- console.log(num+" 是负数");
- else
- console.log(num+" 不是正数也不是负数");
-
- //判断是否是偶数
- if(num % 2 === 0)
- console.log(num + '是偶数');
- else
- console.log(num + '是奇数');
那么switch也是同样的,这里以一个输入成绩的等级来评价成绩的例子来演示。注意:在TypeScript 中,空字符串、数字0、null、undefined都会被认为是false,其他值则为true。
- let grade: string = "A";
- switch(grade) {
- case "A": {
- console.log("优");
- break;
- }
- case "B": {
- console.log("良");
- break;
- }
- case "C": {
- console.log("及格");
- break;
- }
- case "D": {
- console.log("不及格");
- break;
- }
- default: {
- console.log("非法输入");
- break;
- }
- }
支持for和while循环,和大多数语言类似,并且为一些内置类型,如Array等提供了快捷迭代语法。简单的举例如下。
for循环格式:
for ( init; condition; increment ){
statement(s);
}
例如:
- for(let i=1; i <= 5; i++){
- console.log('第 ' + i + ' 个数')
- }
while循环格式:
while(condition)
{
statement(s);
}
- let i=1;
- while(i <= 5){
- console.log('while循环第 ' + i + '次');
- i++;
- }
for in迭代器:
- //定义数组
- let names: string[] = ['阿粥','不喝','稀饭'];
- //for in 迭代器,遍历得到数组下标
- for(let i in names){
- console.log(i + ':' + names[i])
- }
for of迭代器:
- //定义数组
- let names: string[] = ['张三','李四','王五'];
- //for of 迭代器,直接得到元素
- for(let name of names){
- console.log(name)
- }
使用函数的目的是为了可以重复调用代码块,在这里通常利用function关键字声明函数,并且支持可选参数、默认参数、箭头函数等特殊语法。
格式: function 函数名() {
//函数体
}
例如:
- function star(){ //定义
- console.log('五角星','*')
- console.log('五角星','**')
- console.log('五角星','***')
- console.log('五角星','****')
- console.log('五角星','*****')
- }
- star(); //调用
- star();
传入不同的数据,进行处理,返回处理后的结果。
格式:
function 函数名(形参1: 类型,形参2:类型......) //定义
{
//函数体
return 返回值
}
let 变量名: 类型 = 函数名(实参1,实参2,.....) //调用
例如:
- function buy(price:number, num:number)
- {
- let ans:number = price * num;
- return ans;
- }
- let money : number = buy(12,20);
- console.log(money);
在某些情况下,箭头函数会很方便。形式为:() =>{ //函数体 }
格式:
let 函数名 = (形参1:类型,形参2:类型.......)=>{ //函数体 }
函数名(实参1,实参2......)
那么,就以上一个打印星星的函数为例:
- let star = () =>{
- console.log('五角星','*')
- console.log('五角星','**')
- console.log('五角星','***')
- console.log('五角星','****')
- console.log('五角星','*****')
- }
- star();
相似地,以上一个由单价数量来计算价格的函数为例:
- let buy2 = (price2:number,num2:number) =>{
- let ans2:number = price2*num2;
- return ans2;
- }
- let banana:number = buy2(11,30);
什么是对象呢,是用于描述一个物体的特征和行为,可以存储多个数据,由属性名和属性值对应。
格式:let 对象名称: 对象结构类型 = 值
1.通过Interface接口来约定对象结构类型
interface 接口名{
属性1:类型1
属性2:类型2
属性3:类型3
}
访问对象属性: 对象名.属性名
例如:
- interface Person{ //定义接口
- name: string
- age : number
- weight: number
- }
- let person: Person = { //基于接口定义对象
- name : 'ZZZ', //注意一定要有逗号
- age : 20, //注意一定要有逗号
- weight : 116
- }
对象的方法:1.约定方法类型,2.添加方法
格式:
interface 接口名称{ //约定方法类型
方法名:(参数:类型)=>返回值类型
}
例如:
- interface Person{
- dance:() => void
- sing:(song: string) => void
- }
-
- let zzz: Person = { // 添加方法
- dance: () => {
- console.log('阿粥说', '学会习')
- },
- sing: (song:string) =>{
- console.log('阿粥说','背会单词',song)
- }
- }
-
- zzz.dance();
- zzz.sing('abandon')
今天就先到这里了 ^ v ^
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。