HarmonyOS移动应用开发- 课件 3.ArkTS编程基础_第1页
HarmonyOS移动应用开发- 课件 3.ArkTS编程基础_第2页
HarmonyOS移动应用开发- 课件 3.ArkTS编程基础_第3页
HarmonyOS移动应用开发- 课件 3.ArkTS编程基础_第4页
HarmonyOS移动应用开发- 课件 3.ArkTS编程基础_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ArkTS编程基础汇报人:Kimi时间:2025.01.01目录/CONTENTS01ArkTS概述02ArkTS数据类型03ArkTS声明与运算符04ArkTS语句05ArkTS函数06ArkTS类目录CONTENTSArkTS接口01ArkTS空安全02ArkTS模块03ArkTS泛型04本章小结05ArkTS概述01ArkTS简介ArkTS定义ArkTS是HarmonyOS应用主要开发语言,基于TypeScript扩展,引入静态类型,扩展了声明式UI、状态管理等能力,让开发者可以以更简洁、更自然的方式开发高性能应用。01ArkTS优势ArkTS在保持TypeScript基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,未来会结合应用开发/运行的需求持续演进,逐步提供并行和并发能力增强、系统类型增强、分布式开发范式等更多特性。02应用场景主要用于开发HarmonyOS应用,支持多种设备类型,如手机、平板、智能穿戴设备等,能够实现跨设备的无缝交互和协同工作,为用户提供一致的用户体验。03ArkTS数据类型02基本数据类型数值类型ArkTS的数值类型为number,所有数字都是浮点数,支持十进制、二进制、八进制、十六进制。例如:letage:number=30;letnum1:number=0b101010。字符串类型字符串类型string,使用双引号或单引号括起来,还可以使用反向单引号括起来嵌入表达式或变量。例如:letname:string='fashion';lets3=`mynameis${name}`。布尔类型布尔类型boolean由true和false两个逻辑值组成,用于表示条件判断的结果,常用于控制程序的流程。复合数据类型数组类型数组是一个容器,可以存储多个相同类型的数据。例如:letstudents:string[]=['李小红','张小明','王小强'];letscores:number[]=[87,90,85]。枚举类型枚举类型enum是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。例如:enumColor{Red,Green,Blue,Black,Yellow}。元组类型元组类型允许表示一个已知元素和类型的数组,各个元组类型不必相同。例如:letstudent:[string,number];student=['Fashion',180]。复合数据类型联合类型联合类型表示取值可以为多种类型中的一种。例如:lettest:string|number|boolean;test=true;test='Fashion';test=180。null和voidnull是一个表示空值的对象,void当一个函数没有返回值时,你通常会见到其返回值类型是void。ArkTS声明与运算符03声明常量声明以关键字const声明的常量,一般用来存储程序中不变的数据,常量只能赋值一次。例如:constYourName:string='Fashion';constPI:number=3.14。变量声明以关键字let开头的声明引入变量,该变量在程序执行期间可以具有不同的值。例如:letname:string='fashion';letage:number=30。运算符逻辑运算符常见的逻辑运算符有&&、||、!等。例如:if(score>=90){console.log('优秀')}elseif(score>=70){console.log('良好')}。赋值运算符赋值运算符=,复合赋值运算符有+=、-=、*=、/=、%=等。例如:letnum=10;num+=20。比较运算符常见的比较运算符有=、!=、>、>=、<、<=等。例如:if(a3>10){console.log('a3>10')}。位运算符常见的位运算符有&、|、^、~、<<、>>、>>>等。例如:leta1=5;leta2=3;console.log((a1&a2).toString())。ArkTS语句04输出语句console.log写法:console.log(‘消息说明’,‘打印的内容’),注意括号中的参数是string类型,如果是数值类型可以使用.toString()方法转换再输出。注释单行注释单行注释使用双斜线(//)标记,后面跟随注释内容,快捷键ctrl+/。多行注释多行注释使用/**/标记,适用于需要注释多行的场景,快捷键ctrl+shift+/。分支结构单分支ifif(条件){条件成立执行的代码},小括号条件结果为true,则执行大括号里面的代码。双分支if-elseif(条件){条件成立执行的代码}else{条件不成立执行的代码},小括号条件结果为true,则执行else前面大括号里面的代码,否则执行else后面大括号里面的代码。多分支if-elseif-elseif(条件){条件成立执行的代码}elseif(条件){条件不成立执行的代码}else{条件不成立执行的代码},当有多个条件需要判断时,使用if语句会比较麻烦,使用switch语句会更加清晰。分支结构条件表达式条件表达式又叫三元运算或三元表达式,描述形式为:条件?表达式1:表达式2。例如:letmax:number=num1>num2?num1:num2。switch分支switch语句允许将变量的值与多种情况进行匹配,每种情况对应一段要执行的代码。例如:switch(Math.floor((score/10))){case9:console.log('优秀');break;case8:console.log('良好');break;default:console.log('不及格');}。循环语句for-of语句for-of语句专门用于遍历可迭代对象的元素,例如数组、字符串、map集合等。例如:for(constitemofnames){console.log('第'+i.toString()+'个的名字是',item)}。for语句for语句的执行流程:先执行init表达式,再计算condition,如果为真则执行循环主体的语句,再执行update表达式,回到步骤2。例如:for(i;i<=100;i++){sum=sum+i}。while语句while语句只要条件值为真,就会执行大括号中的语句,先判断,再执行。例如:while(i<=100){sum=sum+i;i++}。do-while语句do-while语句先执行一次条件成立重复执行的语句,再进行条件的判断,如果条件值为真,那么条件成立重复执行的语句会重复执行。例如:do{sum=sum+i;i++}while(i<=100)。ArkTS函数05函数定义与基本运用函数定义函数必须先定义后调用,其语法格式为:function函数名():类型{函数体}。例如:functionadd():number{letx:number=3;lety:number=5;letz:number=x+y;returnz;}。参数传递为了提高函数的灵活性和通用性,可以定义函数时带参数(形参),调用的时候,直接将参数(实参)写入就可以了。例如:functionadd(x:number,y:number):number{letz:number=x+y;returnz;}。可选参数ArkTS支持可选参数,其格式为name?:Type。如果在函数调用中省略了该参数,则会使用undefined作为实参。例如:functionhello(name?:string){if(name==undefined){console.log('Hello!');}else{console.log(`Hello,${name}!`);}}。函数定义与基本运用Rest参数函数的最后一个参数可以是rest参数,允许函数接受任意数量的实参。例如:functionsum(...numbers:number[]):number{letres=0;for(letnofnumbers)res+=n;returnres;}。默认参数如果在函数调用中省略了该参数,则会使用默认值。例如:functiontotal(price:number,weight:number=2):number{returnn*weight;}。函数返回类型返回值类型如果可以从函数体内推断出函数返回类型,则可在函数声明中省略标注返回类型。不需要返回值的函数的返回类型可以显式指定为void或省略标注。例如:functionadd(x:number,y:number):number{letz:number=x+y;returnz;}。无返回值没有返回值的函数返回类型可以显式指定为void或省略标注。例如:functionhello(){console.log('Hello!');}。函数与异常处理try-catch-finallytry语句用于捕获和处理异常或错误,它与catch块配合使用,try块中放置可能发生异常的语句,catch块用于处理捕获到的异常。finally块中的语句无论是否发生异常都会执行。例如:try{letresult=myOperation();console.log("结果:",result);}catch(e){console.error("发生异常:",e);}finally{cleanUp();}。内置函数库数学函数库MathMath库是内置的数学函数库,提供了许多常用的数学操作和函数。例如:Math.abs(x)返回x的绝对值;Math.ceil(x)返回大于或等于x的最小整数;Math.floor(x)返回小于或等于x的最大整数。字符串处理函数ArkTS不包含完整的字符串处理函数库,但它可以使用JavaScript的标准字符串方法。例如:charAt(index)返回指定位置的字符;concat(string1,...,stringN)连接字符串;indexOf(searchValue[,fromIndex])返回字符串中第一次出现的指定值的索引。箭头函数箭头函数是比普通函数更简洁的一种函数写法,同时还有一些特性,例如继承外部作用域的this值。例如:letbuy=(price:number,weight:number)=>{letresult:number=price*weight;returnresult;}。ArkTS类06类的定义和基本用法类的定义在ArkTS中,类声明引入一个新类型,定义类的关键字为class,后面紧跟类名,并定义其字段、方法和构造函数。例如:classUser{name:string='';gender:string='';constructor(name:string,sex:string){=name;this.gender=sex;}userInfo():string{return+''+this.gender;}}。类的实例化定义类后,可以使用关键字new创建实例。例如:letuser1=newUser('Fashion','male');console.log(user1.userInfo())。属性访问可以给每个属性定义get和set方法,用于提供对对象属性的受控访问。例如:classUser{name:string='';gender:string='';getName():string{return;}setName(name:string):void{=name;}}。类的继承01继承的定义继承就是子类继承父类的特征和行为,使得子类具有父类相同的行为。ArkTS允许使用继承来扩展现有的类,对应的关键字为extends。例如:classStudentextendsUser{privatedepartment:string;constructor(name:string,gender:string,department:string){super(name,gender);this.department=department;}publicstudentInfo():string{returnthis.userInfo()+`studyin${this.department}`;}}。02调用父类方法关键字super可用于访问父类的实例字段、实例方法和构造函数。例如:super(name,gender)。03方法重写子类可以重写其父类中定义的方法的实现。重写的方法必须具有与原始方法相同的参数类型和相同或派生的返回类型。例如:classStudentextendsUser{publicstudentInfo():string{returnthis.userInfo()+`studyin${this.department}`;}}。静态字段与静态方法静态字段使用关键字static将属性字段声明为静态,静态字段属于类本身。例如:classUser{staticage:number=20;getAge():number{returnUser.age;}}。静态方法使用关键字static将方法声明为静态,静态方法属于类本身,只能访问静态字段。例如:classUser{staticsetAge(num:number):void{User.age=num;}}。字段初始化初始化要求为了减少运行时的错误和获得更好的执行性能,ArkTS要求所有字段在声明时或者构造函数中显式初始化。例如:classPerson{name:string;}letjack=newPerson();jack.getName().length;。避免异常更合适的做法是将返回类型标注为"string|undefined",或者定义时直接定义name:string='',避免异常的发生。对象字面量字面量定义对象字面量是一个表达式,可用于创建类实例并提供一些初始值。它在某些情况下更方便,可以用来代替new表达式。例如:letuser1:User={name:'Fashion',gender:'male'};console.log(user1.gender)。ArkTS接口07接口定义基于接口定义对象接口声明可以引入新类型,接口是定义代码协定的一种常见方式。例如:interfacePerson{name:string;age:number;weight:number;}letym:Person={name:'张山',age:18,weight:90}。基于接口定义方法接口通常包含属性和方法的声明。例如:interfacePerson{dance:()=>void;sing:(song:string)=>void;}letym:Person={dance:()=>{console.log('老师说','我来跳个舞');},sing:(song:string)=>{console.log('老师说','我来唱首',song);}}。接口继承接口继承的定义ArkTS接口和类一样,也可以使用extends关键字继承。例如:interfaceChaoRenextendsPerson{chibang:number;}letcr:ChaoRen={name:'超人',id:1999,chibang:2,dance:(danName:string)=>{console.log(`超人会飞,舞蹈名字:${danName}`);}}。接口实现类实现接口ArkTS类使用implements来实现接口,注意在implements时类必须要有某些属性和方法。例如:interfaceIAnimal{name:string;feature:string;id:number;sayHello:()=>void;}classCatimplementsIAnimal{name:string='小猫';feature:string='我可以上树';id:number=12345;sayHello(){console.log('这是Cat,会抓老鼠');}fun1(){console.log('Cat类自己的方法');}}。接口实现的注意事项实现接口的类必须实现接口中定义的所有属性和方法,否则会报错。ArkTS空安全08联合类型设置为空空值判断在获取可能为空的值的时候也需要特殊处理,例如:if(x!=null){/*dosomething*/}。空值处理默认情况下,ArkTS中的所有类型都是不可为空的。如果要设置为空,需要进行特殊的处理。例如:letx:number|null=null;。非空断言运算符断言使用后缀运算符!可用于断言其操作数为非空。应用于空值时,运算符将抛出错误。例如:letx:number|null=1;lety:number;y=x!+1;。空值合并运算符合并运算空值合并二元运算符??用于检查左侧表达式的值是否等于null。如果是,则表达式的结果为右侧表达式;否则,结果为左侧表达式。例如:classPerson{name:string|null=null;getName():string{return??'';}}。ArkTS模块09模块的导出命名导出在一个模块中,可以使用export关键字来导出变量、函数、类等,以便其他模块可以使用它们。例如:exportfunctionadd(a:number,b:number):number{returna+b;}。默认导出每个模块只能有一个默认导出,导入时可以自定义名称。例如:exportdefaultfunctionmultiply(a:number,b:number):number{returna*b;}。模块的导入命名导入在模块中,可以使用import关键字来导入其他模块中导出的内容。例如:import{add,subtract}from'./mathUtils';。默认导入导入默认导出的内容。例如:importmultiplyfrom'./mathUtils';。ArkTS泛型10泛型类型泛型定义泛型类型允许定义一个可以处理多种类型的类型。例如:typeGenericArray<T>=Array<T>;constnumberArray:GenericArray<number>=[1,2,3];conststringArray:GenericArray<string>=["a","b","c"];。泛型函数泛型函数定义泛型函数允许编写可以处理多种类型的函数。例如:functiongetFirstElement<T>(arr:T[]):T|undefined{returnarr.length>0?arr[0]:undefined;}。泛型接口泛型接口定义泛型接口允许定义一个可以处理多种类型的接口。例如:interfaceKeyValuePair<K,V>{key:K;value:V;}constnumberKeyValue:KeyValuePair<number,string>={key:1,value:"one"};。泛型类泛型类定义泛型类允许定义一个可以处理多种类型的类。例如:classContainer<T>{privatevalue:T;constructor(value:T){this.value=value;}getValue():T{returnthis.value;}}constnumberContainer=newContainer<number>(42);conststringContainer=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论