首页 > 编程语言 >鸿蒙(HarmonyOS)--编程语言-ArkTS 语言基础

鸿蒙(HarmonyOS)--编程语言-ArkTS 语言基础

时间:2024-09-19 08:50:33浏览次数:10  
标签:语句 ArkTS console log -- 运算符 HarmonyOS let 类型

目录

 ArkTS基础知识

1 声明

1.1变量声明

1.2常量声明

1.3自动类型推断 

2 类型

2.1 基本类型 

2.1.1  string

2.1.2  number

2.1.3 boolean

2.2 引用类型

2.2.1 Object类型

 2.2.2 Array类型

2.2.3 Void类型

 2.3 枚举类型 Enum

2.4 联合类型 Union

 2.5 类型别名 Aliases

2.6 空安全 

 2.7 类型安全与类型判断

3  运算符

3.1 赋值运算符

3.2 比较运算符

3.3 算术运算符

3.4 位运算符

3.5 逻辑运算符

 4 语句

 3.1 if语句

3.1.1 if-else 语句

3.1.2 if-else if-else 语句

3.2 switch语句 

3.3 for语句

3.3.1 for-of 语句

3.4 while语句

3.4.1 do-while 语句

3.5 break语句

3.6 return语句

3.7continue语句

3.8Throw和Try语句

 3.8.1 finally 语句


ArkTS基本概念

ArkTS是HarmonyOS生态的应用开发语言。

  • ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。
  • 它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能。
  • 针对JS/TS并发能力支持有限的问题ArkTS对并发编程API和能力进行了增强。
  • ArkTS支持与TS/JS高效互操作,兼容TS/JS生态。ArkTS和 TS 以及 JS 的关系 

    ArkTS和 TS 以及 JS 的关系 

  • JS: JavaScript,常用于网页开发,页面的效果
  • TS: TypeScript,微软开发的,比 JS 多了类型系统
  • ArkTS: JS、TS能用的,他 基本 都能用,写 UI
  • 注意:看文档的时候,可能需要去 JS 的文档,TS 的文档找一部分的内容

 ArkTS基础知识

1 声明

ArkTS通过声明引入变量常量函数类型

ArkTS中可以通过关键字 let 声明变量 ,关键字 const 声明常量,并通过类型注释指定类型

1.1变量声明

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

//变量声明
let count: number = 0
console.log('count -----> ', count)

1.2常量声明

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

 Cannot assign to ‘count‘ because it is a constant. <ArkTSCheck>-CSDN博客

//常量声明
const  count: number = 0
console.log('count -----> ', count)

1.3自动类型推断 

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

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

以上图片没有指定类型,但是下面count报错,是因为count给了123,系统自动推断为number类型,但是log里面只接收string类型,所以报错

这里给上两个双引号就没有报错了,是因为系统判定为了string类型,与log需要的类型相吻合,所以没有报错

2 类型

类型分为基本类型、引用类型、枚举类型、联合类型、类型别名等

2.1 基本类型 

2.1.1  string

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

字符串字面量由单引号(')或双引号(")之间括起来的零个或多个字符组成。字符串字面量还有一特殊形式,是用反向单引号(`)括起来的模板字面量。

//string类型
let s1 = 'Hi' //单
let s2 = "Hi"//双
let a = 'a'
let s3 = `Hi${a}` //反

注意 String !== string 

Type ‘String‘ is not assignable to type ‘ResourceStr‘. <ArkTSCheck>-CSDN博客

2.1.2  number

ArkTS提供numberNumber类型,任何整数和浮点数都可以被赋给此类型的变量。

数字字面量包括整数字面量和十进制浮点数字面量。

整数字面量包括以下类别:

  1. 由数字序列组成的十进制整数。例如:0、117、-345
  2. 以0x(或0X)开头的十六进制整数,可以包含数字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7
  3. 以0o(或0O)开头的八进制整数,只能包含数字(0-7)。例如:0o777
  4. 以0b(或0B)开头的二进制整数,只能包含数字0和1。例如:0b11、0b0011、-0b11

浮点字面量包括以下:

  1. 十进制整数,可为有符号数(即,前缀为“+”或“-”);
  2. 小数点(“.”)
  3. 小数部分(由十进制数字字符串表示)
  4. 以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。
//number类型
let s1 = 1 //整数
let s2 = 1.2 //浮点
2.1.3 boolean

boolean类型由truefalse两个逻辑值组成。

//boolean类型
let isTrue = true

2.2 引用类型

2.2.1 Object类型

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

let obj: Object = { name: '张三', age: 20 };
 2.2.2 Array类型

array,即数组,是由可赋值给数组声明中指定的元素类型的数据组成的对象。

数组可由数组复合字面量(即用方括号括起来的零个或多个表达式的列表,其中每个表达式为数组中的一个元素)来赋值。数组的长度由数组中元素的个数来确定。数组中第一个元素的索引为0。

// 数字数组
let numberArray: number[] = [1, 2, 3, 4, 5];

// 字符串数组
let stringArray: string[] = ['苹果', '香蕉', '橙子'];

// 混合类型数组
let mixedArray: (number | string)[] = [1, 'two', 3, 'four'];
2.2.3 Void类型

void类型用于指定函数没有返回值。

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

//Void类型
class Person<T> {
  //....
}

let instance: Person<void>

 2.3 枚举类型 Enum

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

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

enum Color {
  Red = '红色',
  Green = '绿色',
  Blue = '蓝色'
}

let myColor: Color = Color.Red;
console.log(myColor); 

2.4 联合类型 Union

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

let myValue: string | number;
myValue = "Hello"; 
myValue = 123; 

 2.5 类型别名 Aliases

Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。可以使用 type 关键字来创建类型别名(Aliases)。以下是一个示例:

type PersonInfo = {
  name: string,
  age: number
};

let person: PersonInfo = {
  name: "张三",
  age: 25
};

2.6 空安全 

一般来说,有时会存在声明变量时不确定初始值。在这类情况下,通常使用联合类型包含null值

这里写了六种解决办法,我就不在这里写了,偷点懒

 ‘name‘ is possibly ‘null‘. <ArkTSCheck>-CSDN博客

 2.7 类型安全与类型判断

ArkTS是类型安全的语言,编辑器会进行类型检查,实时提示错误信息

 

ArkTS支持自动类型推导,没有指定类型时,ArkTS支持使用类型推断自动选择合适的类型

 

3  运算符

3.1 赋值运算符

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

let x = 5
x = y

复合赋值运算符将赋值与运算符组合在一起,其中x op = y等于x = x op y。

在 “x op = y 等于 x = x op y” 这个表述中,“op” 代表操作符(operator),它可以是诸如 “+”(加法)、“-”(减法)、“*”(乘法)、“/”(除法)等等的各种算术或位运算操作符。

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

let x = 5;

// +=
x += 3; 
console.log(x); 

// -=
x -= 2; 
console.log(x); 

// *=
x *= 2; 
console.log(x); 

// /=
x /= 4; 
console.log(x); 

// %=
x %= 3; 
console.log(x); 

// <<=
x <<= 2; 
console.log(x); 

// >>=
x >>= 1; 
console.log(x); 

// >>>=
x >>>= 1; 
console.log(x); 

// &=
x &= 7; 
console.log(x); 

// |=
x |= 8; 
console.log(x); 

// ^=
x ^= 9; 
console.log(x); 

3.2 比较运算符

运算符说明
===如果两个操作数严格相等(不同类型的操作数是不相等的),则返回true。
!==如果两个操作数严格不相等(不同类型的操作数是不相等的),则返回true。
==如果两个操作数相等(尝试先转换不同类型的操作数,再进行比较),则返回true。
!=如果两个操作数不相等(尝试先转换不同类型的操作数,再进行比较),则返回true。
>如果左操作数大于右操作数,则返回true。
>=如果左操作数大于或等于右操作数,则返回true。
<如果左操作数小于右操作数,则返回true。
<=如果左操作数小于或等于右操作数,则返回true。
let num1 = 5;
let num2 = 10;
let str1 = '5';

// ===
console.log(num1 === num2); 
console.log(num1 === parseInt(str1)); 

//!==
console.log(num1!== num2); 
console.log(num1!== parseInt(str1)); 

// ==
console.log(num1 == num2); 
console.log(num1 == str1); 

//!=
console.log(num1!= num2); 
console.log(num1!= str1); 

// >
console.log(num2 > num1); 

// >=
console.log(num2 >= num1); 
console.log(num1 >= parseInt(str1)); 

// <
console.log(num1 < num2); 

// <=
console.log(num1 <= num2); 
console.log(num1 <= parseInt(str1)); 

3.3 算术运算符

一元运算符为-、+、--、++。

let num = 5;

// 正号 +
let positive = +num;
console.log(positive); 

// 负号 -
let negative = -num;
console.log(negative); 

// 自增 ++
num++;
console.log(num); 

// 先使用后自增
let beforeIncrement = num++;
console.log(beforeIncrement); 
console.log(num); 

// 自减 --
num--;
console.log(num); 

// 先使用后自减
let beforeDecrement = num--;
console.log(beforeDecrement); 
console.log(num); 

// 先自增后使用
let afterIncrement = ++num;
console.log(afterIncrement); 
console.log(num); 

// 先自减后使用
let afterDecrement = --num;
console.log(afterDecrement); 
console.log(num);

二元运算符列举如下:

运算符说明
+加法
-减法
*乘法
/除法
%除法后余数
let num1 = 10;
let num2 = 3;

// 加法
let sum = num1 + num2;
console.log(`加法:${num1} + ${num2} = ${sum}`);

// 减法
let difference = num1 - num2;
console.log(`减法:${num1} - ${num2} = ${difference}`);

// 乘法
let product = num1 * num2;
console.log(`乘法:${num1} * ${num2} = ${product}`);

// 除法
let quotient = num1 / num2;
console.log(`除法:${num1} / ${num2} = ${quotient}`);

// 取余
let remainder = num1 % num2;
console.log(`取余:${num1} % ${num2} = ${remainder}`);

3.4 位运算符

运算符说明
a & b按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0。
a | b按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0。
a ^ b按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0。
~ a按位非:反转操作数的位。
a << b左移:将a的二进制表示向左移b位。
a >> b算术右移:将a的二进制表示向右移b位,带符号扩展。
a >>> b逻辑右移:将a的二进制表示向右移b位,左边补0。
let a = 5;  // 二进制: 0101
let b = 3;  // 二进制: 0011

// 按位与
let andResult = a & b;
console.log(`按位与: ${a} & ${b} = ${andResult}`);  // 0001

// 按位或
let orResult = a | b;
console.log(`按位或: ${a} | ${b} = ${orResult}`);  // 0111

// 按位异或
let xorResult = a ^ b;
console.log(`按位异或: ${a} ^ ${b} = ${xorResult}`);  // 0110

// 按位非
let notResult = ~a;
console.log(`按位非: ~${a} = ${notResult}`);  // -6 (二进制: 1010)

// 左移
let leftShiftResult = a << 2;
console.log(`左移: ${a} << 2 = ${leftShiftResult}`);  // 20 (二进制: 10100)

// 算术右移
let arithmeticRightShiftResult = a >> 1;
console.log(`算术右移: ${a} >> 1 = ${arithmeticRightShiftResult}`);  // 2 (二进制: 0010)

// 逻辑右移
let logicalRightShiftResult = a >>> 1;
console.log(`逻辑右移: ${a} >>> 1 = ${logicalRightShiftResult}`);  // 2 (二进制: 0010)

3.5 逻辑运算符

运算符说明
a && b逻辑与
a || b逻辑或
! a逻辑非
let a = true;
let b = false;

// 逻辑与
let andResult = a && b;
console.log(`逻辑与: ${a} && ${b} = ${andResult}`);

// 逻辑或
let orResult = a || b;
console.log(`逻辑或: ${a} || ${b} = ${orResult}`);

// 逻辑非
let notResult =!a;
console.log(`逻辑非:!${a} = ${notResult}`);

 4 语句

  • 表达式: 可以被求值的代码,并将其计算出一个结果
  • 语句: 一段可以执行的代码,是一个行为,例如分 支语句和循环语句

 3.1 if语句

if 语句用于根据给定的条件来决定程序的执行流程。它允许程序在条件为真时执行特定的代码块,在条件为假时可以选择执行其他代码块(如 else 部分)或者不执行任何操作。

通过使用 if 语句,程序能够根据不同的情况做出不同的响应和处理,从而实现更灵活和智能的逻辑控制,使程序能够根据输入或计算得到的条件来决定执行不同的操作路径,增加了程序的动态性和适应性。

let num = 5;
if (num > 10) {
  console.log('数字大于 10');
}
3.1.1 if-else 语句
// if-else 语句
let num = 5;
if (num > 10) {
  console.log('数字大于 10');
} else {
  console.log('数字小于或等于 10');
}
3.1.2 if-else if-else 语句
// if-else if-else 语句
let grade = 85;
if (grade >= 90) {
  console.log('优秀');
} else if (grade >= 80) {
  console.log('良好');
} else if (grade >= 70) {
  console.log('中等');
} else if (grade >= 60) {
  console.log('及格');
} else {
  console.log('不及格');
}

3.2 switch语句 

switch 语句用于基于不同的条件执行不同的代码块。

let day = 3;  // 假设 1 代表星期一,2 代表星期二,以此类推

switch (day) {
  case 1:
    console.log('星期一');
    break;
  case 2:
    console.log('星期二');
    break;
  case 3:
    console.log('星期三');
    break;
  case 4:
    console.log('星期四');
    break;
  case 5:
    console.log('星期五');
    break;
  case 6:
    console.log('星期六');
    break;
  case 7:
    console.log('星期日');
    break;
  default:
    console.log('无效的日期');
}

3.3 for语句

它可以用于遍历数组、执行固定次数的操作、处理具有一定规律的数据等。通过灵活控制循环的起始值、结束条件和迭代步长,能够有效地处理各种需要重复执行相同或相似操作的情况,从而提高代码的效率和简洁性。

for(let i = 0; i < 5; i++) {
  console.log(i);
}
3.3.1 for-of 语句
let arr = [10, 20, 30, 40, 50];
for(let num of arr) {
  console.log(num);
}

3.4 while语句

while 语句用于创建一个只要指定条件为真就会执行的循环。

let i = 0;
while (i < 5) {
  console.log(i);
  i++;
}
3.4.1 do-while 语句
let i = 0;
do {
  console.log(i);
  i++;
} while (i < 5);

3.5 break语句

break 语句用于跳出循环结构(如 forwhiledo-while)或 switch 语句。

for(let i = 0; i < 10; i++) {
  if (i === 5) {
    break;
  }
  console.log(i);
}

3.6 return语句

return 语句用于从函数中返回一个值并结束函数的执行。

function add(a, b) {
  return a + b;
}
let result = add(3, 5);
console.log(result); 

3.7continue语句

 continue 语句用于跳过当前循环的本次迭代,直接开始下一次迭代。

for(let i = 0; i < 10; i++) {
  if (i % 2 === 0) {
    continue;
  }
  console.log(i);
}

3.8Throw和Try语句

try 和 catch 语句用于处理可能出现的异常情况。throw 语句用于抛出一个自定义的异常。

try {
  let num = parseInt("abc");
} catch (error) {
  throw "无法将 'abc' 转换为数字";
}
 3.8.1 finally 语句

try-catch-finally 结构中的 finally 语句块无论是否发生异常都会被执行。

try {
  // 可能会抛出异常的代码
  let num = parseInt("not a number");
} catch (error) {
  // 处理异常的代码
  console.error("发生错误: " + error);
} finally {
  // 无论是否有异常都会执行的代码
  console.log("这部分始终会执行");
}

标签:语句,ArkTS,console,log,--,运算符,HarmonyOS,let,类型
From: https://blog.csdn.net/hqy1989/article/details/142249267

相关文章

  • 关于win10和win11系统卡死
    在使用过程中,系统卡死,鼠标能用,无法使用win+shift+s,win+r等按键,win10仅仅能使用ctrl+alt+del键,win11完全无法使用,仅仅可移动鼠标。该现象是win系统的更新bug,需要关掉任务栏资讯设置。如果我们打开任务管理器,查看进程管理,会发现任务栏占用高达100多M,这是不正常的。并且重启无效。......
  • PyTorch:快速了解Tensor的连续性
    目录1、引言2、底层数据的存储3、按行优先一维展开1、引言Tensor的连续性是指其底层一维数组元素的存储顺序与按行优先一维展开的元素顺序是否一致。2、底层数据的存储  Tensor的底层数据在内存上是连续存储的,通过代码说明如下:用到的python函数与方法x.data_ptr......
  • 使用gitee的webhook实现提交代码后自动部署项目
    独立站原文业务背景giteeAction付费,gitPages也停止了服务,没办法想搞一个国内服务器的独立站只能自己动手了,看了gitee提供了webhook......
  • Springboot多种请求参数
        Springboot中有多种请求参数:简单参数、实体对象参数、数组、集合参数、日期时间参数、json参数……下列代码为每一种参数都写了一个简单的例子packagecom.wzb;importcom.wzb.pojo.Student;importcom.wzb.pojo.User;importorg.springframework.format.anno......
  • C++之move函数的使用
    在C++中,std::move 是一个标准库函数,用于实现“移动语义”(MoveSemantics),这是C++11引入的一个重要特性。std::move 允许你将对象的资源“转移”到另一个对象,从而避免不必要的复制操作,提高效率。什么是 std::move?std::move 是一个类型转换函数,它将其参数转换为右值引......
  • 操作系统之进程
    概念进程是程序的一次执行过程,是动态的。程序则是存放在磁盘上的可执行文件,属于静态。进程是程序的实体运行过程,是系统进行资源分配和调度的独立单位。组成进程控制块(PCB):PID:进程标识符,用于唯一标识一个进程。UID:用户标识符,标识创建该进程的用户。进程控制和管理信息:用于......
  • C++学习笔记(28)
    十四、实现strchr()和strrchr()函数示例:#define_CRT_SECURE_NO_WARNINGS//使用C风格字符串操作的函数需要定义这个宏#include<iostream>usingnamespacestd;//返回在字符串s中第一次出现c的位置,如果找不到,返回0。//babcddefaeaconstchar*mystrchr(co......
  • Threejs之看房案例(下)
    本文目录前言最终效果1、点精灵1.1添加点精灵1.2点精灵效果2、添加事件2.1鼠标移动事件2.1.1效果2.2鼠标点击事件2.2.1效果2.3切换互通3.完整代码前言在Threejs之看房案例(上)这篇博客中我们已经完成了大厅的3d观看效果,但是我们......
  • java生成随机数的四种方法
    方法一:Math.random()Math.random()方法返回的是一个介于0.0(包含)和1.0(不包含)之间的随机浮点数。1、生成0.0到1.0之间的浮点数:doublef=Math.random(); 2、生成0.0到50.0之间的双精度浮点数:doublerandomDouble=Math.random()*50; 3、生成大写字母:charch=(ch......
  • 【农信网-注册/登录安全分析报告】
    前言由于网站注册入口容易被黑客攻击,存在如下安全问题:暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞所以大部分网站及App都采取图形验证码或滑动验证码等交互解决方案,但在机器学习能力提......