鸿蒙移动应用开发-------初始arkts

一. 什么是arkts

ArkTS是HarmonyOS优选的主力应用开发语言。

ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行稳定性和性能。TypeS

cript深受开发者的喜爱,因为它提供了一种更结构化的JavaScript编码方法。

ArkTS旨在保持TypeScript的大部分语法,为现有的TypeScript开发者实现无缝过渡,让移动开发者快速上手ArkTS。

二. arkts想比TS特性差异

ArkTS通过规范约束了TS中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性,下面通过代码片段说明部分约束特性。

 三. arkts基本知识

 1.声明

arkts通过声明引入变量、常量、函数和类型

(1)变量声明

变量声明以关键字let开头的声明引入变量,该变量在程序执行期间可以具有不同的值。

// 声明了字符串变量
let str:string='hello'//修改str变量的值为hello word
str='hello word'

(2)常量声明

常量以关键字 const 开头的声明引入只读常量,该常量只能被赋值一次。

对常量重新赋值会造成编译时错误

const str1:string='hello'

2.自动类型推断

由于arkts是一种静态类型语言,所有数据的类型都必须在编译时确定。

但是,如果一个变量或常量的声明包含了初始值,那么开发者就不需要显式指定其类型。ArkTS规范中列举了所有允许自动推断类型的场景。

// 不省略数据类型声明
let str:string='hello';// 自动类型推断
let str1='hello word'//出现错误示范
// str1=123 // 上面声明为字符串类型,而重新赋值为数字类型则报错
// let str // 未给初始值则报错 

3.arkts中的类型

(1)number类型

ArkTS提供number和Number类型,任何整数和浮点数都可以被赋给此类型的变量。 数字字面量包括整数字面量和十进制浮点数字面量。

整数字面量包括以下类别: 由数字序列组成的十进制整数。例如:0、117、-345

// 十进制
let num1:number=123

以0x(或0X)开头的十六进制整数可以包含数字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7

let num4:number=0xfac; // 十六进制

以0o(或0O)开头的八进制整数只能包含数字(0-7)。例如:0o777

let num3:number=0o17161; // 八进制

以0b(或0B)开头的二进制整数只能包含数字0和1。例如:0b11、0b0011、-0b11

let num2:number=0b10101; // 二进制

浮点字面量包括以下: 十进制整数,可为有符号数(即,前缀为“+”或“-”); 小数点(“.”)

// 浮点字面量let num1:number=+1;let num2:number=-1;let num3:number=1.1;

小数部分(由十进制数字字符串表示) 以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。

(2)boolean类型

boolean类型由true和false两个逻辑值组成。

console.log(3>2) //返回结果为trueconsole.log(5<4) //返回结果为false

(3)string类型

string代表字符序列;可以使用转义字符来表示字符。

字符串字面量由单引号(')或双引号(")之间括起来的零个或多个字符组成。

字符串字面量还有一特殊形式,是用反向单引号(``)括起来的模板字面量。

// 单引号
let str5:string='hello word';// 双引号
let str6:string="hello word";// 反引号
let str7:string=`hello word ${num1}`;//转义
let str8:string='hello word\n';

(4)null类型

let a:null=null

(5)undefined类型

let b:undefined=undefined// 或者let b1:string;

(6)void类型

void类型用于指定函数没有返回值。 此类型只有一个值,同样是void。由于void是引用类型,因此它可以用于泛型类型参数。

function abc2():void{//  void:没有返回值,不能有返回值
}

(7)Object类型

Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。

let ob:Object=123;

(8)array类型

array,即数组,是由可赋值给数组声明中指定的元素类型的数据组成的对象。 数组可由数组复合字面量(即用方括号括起来的零个或多个表达式的列表,其中每个表达式为数组中的一个元素)来赋值。数组的长度由数组中元素的个数来确定数组中第一个元素的索引为0。

let arr:number[]=[1,2,3,4,5,6]

(9)enum类型

enum类型,又称枚举类型,是预先定义的一组命名值的值类型,其中命名值又称为枚举常量

enum sex{男,女
}

使用枚举常量时必须以枚举类型名称为前缀

let str:Sex=Sex.男// 也可以用数字表示
let sex2:Sex=1;

(10)union类型

union类型,即联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型。

class Dog{play(){console.log('狗')}
}
export class Cat{play(){console.log('猫')}
}
class Penguin{play(){console.log('企鹅')}
}
// Pet 是联合类型
type Pet=Dog|Cat|Penguin
let p1:Pet=new Dog();
p1.play()

(11)Aliases类型

Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。

type fun=(a:string)=>string

4.运算符

(1)赋值运算符

赋值运算符=,使用方式如x=y。

let a:number=1

(2)算术运算符

(3)比较运算符

(4)一元运算符

    ++:自增   -- :自减

(5)逻辑运算符

(6)位运算符

& 可以用来判断奇偶数

 let flag = (12 & 1) == 0console.log(`${flag}`)

(7)复合赋值运算符

复合赋值运算符列举如下:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。

5.语句

(1)if语句

if语句用于需要根据逻辑条件执行不同语句的场景。当逻辑条件为真时,执行对应的一组语句,否则执行另一组语句(如果有的话)。

else部分也可能包含if语句。 条件表达式可以是任何类型。但是对于boolean以外的类型,会进行隐式类型转换:

// 如果3>2为真就执行第一条语句,否则执行语句2
if(3>2){
// 语句1console.log('true')
}else{
//  语句2console.log('false')
}

(2)switch语句

使用switch语句来执行与switch表达式值匹配的代码块。

如果switch表达式的值等于某个label的值,则执行相应的语句。

如果没有任何一个label值与表达式值相匹配,并且switch具有default子句,那么程序会执行default子句对应的代码块。

break语句(可选的)允许跳出switch语句并继续执行switch语句之后的语句。 如果没有break语句,则执行switch中的下一个label对应的代码块。

let a:number=3;switch(a){case 1:console.log('第一名')breakcase 2:console.log('第二名')breakcase 3:console.log('第三名')break
default:console.log('没有获得名次')};

(3)三元表达式

条件表达式由第一个表达式的布尔值来决定返回其它两个表达式中的哪一个

console.log(a>b?'a大于b':'a小于b');

判断a>b,如果a>b 执行第一条语句,否则执行第二条语句

(4)for循环语句

for语句会被重复执行,直到循环退出语句值为false。

for语句的执行流程如下:

1、 执行init表达式(如有)。此表达式通常初始化一个或多个循环计数器。

2、 计算condition。如果它为真值(转换后为true的值),则执行循环主体的语句。如果它为假值(转换后为false的值),则for循环终止。

3、 执行循环主体的语句。

4、 如果有update表达式,则执行该表达式。

5、 回到步骤2。

let sum:number=0for(let  i=0;;i<=10;i++){sum += i
}
console.log(i)

(5)for-of语句

使用for-of语句可遍历数组或字符串

let arr:number[]=[1,2,3,4,5,6]for (let i of arr){console.log(`${i}`)
}// 遍历字符串let str:string='hello'
for (let a of str){console.log(a)
}

(6)while语句

只要condition为真值(转换后为true的值),while语句就会执行statements语句

let a:number=0
while(a<=10){console.log(`${a}`)a++
}

(7)do-while语句

如果condition的值为真值(转换后为true的值),那么statements语句会重复执行

let b=0do{console.log(`${{b}`)b++
}while(b<=10)

(8)break语句

使用break语句可以终止循环语句或switch。

如果break语句后带有标识符,则将控制流转移到该标识符所包含的语句块之外。

let a:number[]=[1,2,3,4,5,6]// 当i等于3终止循环
for(let i=0;i<a;i++){if(i==3){break}console.log(i)
}

(9)continue语句

continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代。

let a:number[]=[1,2,3,4,5,6]// 当i等于3时跳过本次循环
for(let i=0;i<a;i++){if(i==3){continue}console.log(i)
}

(10)thorw和try语句

throw语句用于抛出异常或错误:

class Err{static add(a:number,b:number):number{if(!b){//抛出异常throw new Error('除数不能为0')}return a/b}
}
Err.add(1,0)

try语句用于捕获和处理异常或错误:

function tryCatch(){let aaa:number=0try { //有可能出现问题的代码aaa=Err.add(1,0)}catch (e){ //出现问题后的解决办法  e---->错误信息console.log(e)}

finally 异常的最终处理方案

function tryCatch(){let aaa:number=0try { //有可能出现问题的代码aaa=Err.add(1,0)}catch (e){ //出现问题后的解决办法  e---->错误信息console.log(e)} finally { //异常的最终处理方案// 不管代码有没有出现异常都会执行return aaa;}

6.函数

函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体。 

function abc(){//无参函数,并且没有返回值
}function abc1():string{// 除了 void和any,必须有返回值return 'a'
}function abc2():void{//  void:没有返回值,不能有返回值
}

(1)可选参数

function  getAge(sex:string ,name?:string) {if(name){return `${name}${sex}`}return `无名${sex}`
}

可选参数的另一种形式为设置的参数默认值。如果在函数调用中这个参数被省略了,则会使用此参数的默认值作为实参。

function a(x:number,y:number=2):number{return x*y
}a(1,5) //返回1*5
a(2) //返回 2*2

(2)rest参数

函数的最后一个参数可以是rest参数。使用rest参数时,允许函数或方法接受任意数量的实参。

function ages(name:string,...ages:number[]){console.log(`${name}班有${ages}.length`)let sum=0;for (let el of ages) {sum+=el}console.log(`年龄总和:${sum},平均值${sum/ages.length}`)return sum/ages.length
}
let avgage=ages('鸿蒙',12,23,18,21,17,19)

(3)返回类型

如果可以从函数体内推断出函数返回类型,则可在函数声明中省略标注返回类型


function abc1():string{return 'a'
}// 自动推导函数返回类型
function abc(){
return 'a'
}

不需要返回值的函数的返回类型可以显式指定为void或省略标注。这类函数不需要返回语句

function abc2():void{console.log('a')
}

(4)函数的作用域

函数中定义的变量和其他实例仅可以在函数内部访问,不能从外部访问。 如果函数中定义的变量与外部作用域中已有实例同名,则函数内的局部变量定义将覆盖外部定义。

(5)函数的调用

调用函数以执行其函数体,实参值会赋值给函数的形参。

function add(a:number,b:number=3){return a+b;
}
let a1 = add(2,6);
console.log(a1)
let a22 = add(2);
console.log(a22)

(6)函数类型

函数类型通常用于定义回调:

type fc=(str:string)=>string //对字符串进行处理并返回function syfc(f:fc){return f('火锅')
}
function cl(str:string){return str+'丸子'
}
let str33=syfc(cl)

(7)箭头函数(又名lambda函数)

函数可以定义为箭头函数

箭头函数的返回类型可以省略;省略时,返回类型通过函数体推断。

表达式可以指定为箭头函数,使表达更简短

let lam1=(x:number,y:number)=>{return x+y}
lam1(1,2)
let lam2=(x:number,y:number)=>{x+y}
let lam3=(x:number,y:number)=>x+y
//{}省略,必须只有一行代码,不能写return关键字
//()无法省略
let lam4=(x:number,y:number)=>{x+=10return x+y
}

(8)闭包

闭包是由函数及声明该函数的环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。

function abc5():()=>number{let a=0;let g=():number=>{return a++}return g
}
let abc6=abc5()
abc6()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469008.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 输入三条边 绘制三角形

安装图形库 参考 #include "graphics.h" // 就是需要引用这个图形库 #include <conio.h> #include <stdio.h> #include <math.h>// 判断是否可以构成三角形 int isTriangle(int a, int b, int c) {return (a b > c) && (a c >…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

Logrus入门

Logrus入门 1. 下载 go get github.com/sirupsen/logrus2. logrus常用方法 logrus.Debugln("Debugln") logrus.Infoln("Infoln") logrus.Warnln("Warnln") logrus.Errorln("Errorln") logrus.Println("Println")// 输出如…

pyspark入门基础详细讲解

1.前言介绍 学习目标&#xff1a;了解什么是Speak、PySpark&#xff0c;了解为什么学习PySpark&#xff0c;了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码&#xff0c;既可以在电脑上简单运行&#xff0c;进行数据分析处理&#xff0c;又可以把代码无缝…

权限管理练习2

1.在/home中创建一个名为 file1.txt 的文件&#xff0c;并设置权限为&#xff1a;所有者和组成员可以读写&#xff0c;但其他人只能读。 所有者和组成员可以读写 u rw- g rw- o r-- 2.在 /home 目录下创建一个名为 shared 的子目录&#xff0c;使得所有用户都可以进入&#…

面试经典 150 题:121,125

121. 买卖股票的最佳时机 【参考代码】 动态规划解决 class Solution { public:int maxProfit(vector<int>& prices) {int size prices.size();int min_price 99999, max_profit 0;for(int i0; i<size; i){if(prices[i] < min_price){min_price prices[i…

数据集划分

1、 sklearn玩具数据集介绍 数据量小&#xff0c;数据在sklearn库的本地&#xff0c;只要安装了sklearn&#xff0c;不用上网就可以获取 2 sklearn现实世界数据集介绍 数据量大&#xff0c;数据只能通过网络获取&#xff08;科学上网&#xff09; 3 sklearn加载玩具数据集 示…

图形几何之美系列:仿射变换矩阵之先转后偏

“在几何计算、图形渲染、动画、游戏开发等领域&#xff0c;常需要进行元素的平移、旋转、缩放等操作&#xff0c;一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等&#xff0c;四元数在图形学中主要用于解决旋转问题&#xff0c;特别是在三维…

刷题强训(day05) -- 游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)

目录 1、游游的you 1.1 题目 1.2 思路 1.3 代码实现 2、腐烂的苹果 2.1 题目 2.2 思路 2.3 代码实现 3、孩子们的游戏(圆圈中最后剩下的数) 3.1 题目 3.2 思路 3.3 代码实现 3.3.1 环形链表 ​编辑3.3.2 动态规划 ​编辑 1、游游的you 1.1 题目 1.2 思路 根据题…

PyQt5超详细教程终篇

PyQt5超详细教程 前言 接&#xff1a; [【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;](【Python篇】PyQt5 超详细教程——由入门到精通&#xff08;序篇&#xff09;-CSDN博客) 建议把代码复制到pycahrm等IDE上面看实际效果&#xff0c;方便理…

并查集算法实现

模板 模板分为三大部分 初始化查询i的祖先合并i j(使他们祖先成为一个人) // 1 初始化 void init(int n) {for (int i 1; i < n; i)fa[i] i;//将该数的父节点定义为该数 }// 2 查询i的祖先 int find(int i) {if (i fa[i])return i;else{![查](../pic/并查集.png)fa[i]…

(实战)WebApi第13讲:怎么把不同表里的东西,包括同一个表里面不同的列设置成不同的实体,所有的给整合到一起?【前端+后端】、前端中点击标签后在界面中显示

一、实现全局跨域&#xff1a;新建一个Controller&#xff0c;其它的controller都继承它 1、新建BaseController 2、在后端配置&#xff0c;此处省略【详情见第12讲四、3、】 3、其它的控制器继承BaseController&#xff0c;这个时候就能够完成全局的跨域 【向后台传cookie和…

【计算机基础——数据结构——红黑树】

1. 红黑树&#xff08;RBTree&#xff09; 为什么HashMap不直接使用AVL树&#xff0c;而是选择了红黑树呢&#xff1f; 由于AVL树必须保证左右子树平衡&#xff0c;Max(最大树高-最小树高) < 1&#xff0c;所以在插入的时候很容易出现不平衡的情况&#xff0c;一旦这样&…

【MatLab手记】 --从0到了解超超超详过程!!!

文章目录 MatLab笔记一、命令行窗口二、变量命名规则三、数据类型1. 数字2. 字符与字符串3. 矩阵3.1 矩阵创建3.2 矩阵的修改和删除3.3 矩阵的拼接与重构重排3.4 矩阵的运算方法3.5 矩阵的下标 4. 元胞数组&#xff08;类似数据容器&#xff09;5. 结构体 四、逻辑与流程控制五…

Qt_day5_常用类

常用类 目录 1. QString 字符串类&#xff08;掌握&#xff09; 2. 容器类&#xff08;掌握&#xff09; 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型&#xff08;熟悉&#xff09; 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…

【THM】linux取证 DisGruntled

目录 0x00 房间介绍 0x01 连接并简单排查 0x02 让我们看看做没做坏事 0x03 炸弹已埋下。但何时何地&#xff1f; 0x04 收尾 0x05 结论 0x00 房间介绍 嘿&#xff0c;孩子&#xff01;太好了&#xff0c;你来了&#xff01; 不知道您是否看过这则新闻&#xff0c;我…

MFC中Excel的导入以及使用步骤

参考地址 在需要对EXCEL表进行操作的类中添加以下头文件&#xff1a;若出现大量错误将其放入stdafx.h中 #include "resource.h" // 主符号 #include "CWorkbook.h" //单个工作簿 #include "CRange.h" //区域类&#xff0c;对Excel大…

智能化温室大棚控制系统设计(论文+源码)

1 系统的功能及方案设计 本次智能化温室大棚控制系统的设计其系统整体结构如图2.1所示&#xff0c;整个系统在器件上包括了主控制器STC89C52&#xff0c;温湿度传感器DHT11&#xff0c;LCD1602液晶&#xff0c;继电器&#xff0c;CO2传感器&#xff0c;光敏电阻&#xff0c;按…

一篇文章教会你使用Linux的‘sed‘基础命令

Linux sed 命令详解 Linux sed 命令详解1、基本语法2、常用命令2.1 替换2.2 删除行2.3 查找并打印行2.4 插入与追加2.5 多命令组合 3、高级用法3.1 替换并保存结果到新文件3.2 在范围内替换3.3 正则表达式匹配 4、小结 Linux sed 命令详解 sed 是 Linux 系统中非常强大的流编辑…

集群化消息服务解决方案

目录 集群化消息服务解决方案项目概述架构图使用说明服务端通过API接口推送消息给客户端调用方式 请求参数返回参数 客户端推送消息连接websocket或发送消息 接收消息项目地址作者信息 集群化消息服务解决方案 项目概述 集群化消息服务解决方案是一种用于处理大量消息的高可用…