当前位置: 首页 > news >正文

HarmonyOS ArkTS 开发基础/语言

目录

一、ArkUI (方舟开发框架) 概述

1.1 基本概念

1.2 两种开发范式

1.3 不同应用类型支持的开发范式

二、ArkTS 声明式开发范式

2.1 开发能力

2.2 整体架构

三、ArkTS 基础类型

3.1 Any 类型

3.2 数字类型

3.3 字符串类型

3.4 布尔类型

3.5 联合类型

3.6 数组类型

3.7 元组类型

3.8 枚举类型

3.9 void

四、基本语法

相关推荐 


一、ArkUI (方舟开发框架) 概述

        ArkUI 为HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

1.1 基本概念

  • UI:即用户界面

  • 组件:UI构建与显示的最小单位,形成了在界面中的样子。如文本、按钮、列表、单选框、复选框等。

  • 布局:它定义了组件在界面中的位置

1.2 两种开发范式

        针对不同的应用场景及技术背景,ArkUI 提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)。

  • 声明式开发范式:采用基于TypeScript声明式UI语法扩展而来的ArkTS语言,从组件、动画和状态管理三个维度提供UI绘制能力。

  • 类Web开发范式:采用经典的HML、CSS、JavaScript三段式开发方式,即使用HML标签文件搭建布局、使用CSS文件描述样式、使用JavaScript文件处理逻辑。该范式更符合于Web前端开发者的使用习惯,便于快速将已有的Web应用改造成ArkUI应用。

官方推荐使用声明式开发范式来构建UI,主要基于以下几点考虑:

  • 开发效率:声明式开发范式更接近自然语义的编程方式,开发者可以直观地描述UI,无需关心如何实现UI绘制和渲染,开发高效简洁。

  • 应用性能:如下图所示,两种开发范式的UI后端引擎和语言运行时是共用的,但是相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新链路更为精简,占用内存更少,应用性能更佳。

  • 发展趋势:声明式开发范式后续会作为主推的开发范式持续演进,为开发者提供更丰富、更强大的能力。

        这就类似 Android 开发时是使用 Java 还是 Kotlin 都支持。

ArkUI示意图

        

1.3 不同应用类型支持的开发范式

        根据所选用HarmonyOS应用模型(Stage模型、FA模型)和页面形态(应用或服务的普通页面、卡片)的不同,对应支持的UI开发范式也有所差异。

应用模型页面形态支持的UI开发范式
Stage模型(推荐)应用或服务的页面声明式开发范式(推荐)
卡片声明式开发范式(推荐)类Web开发范式
FA模型应用或服务的页面声明式开发范式 类Web开发范式
卡片类Web开发范式

 Stage模型

Stage模型

FA模型

FA模型

二、ArkTS 声明式开发范式

        基于ArkTS的声明式开发范式的ArkUI是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建HarmonyOS应用UI所必需的能力。

2.1 开发能力

  • ArkTS:在TypeScript(简称TS)生态基础上做了进一步扩展。扩展能力包含声明式UI描述、自定义组件、动态扩展UI元素、状态管理和渲染控制

  • 布局:它定义了组件在界面中的位置。ArkUI框架提供了多种布局方式,除了基础的线性布局、层叠布局、弹性布局、相对布局、栅格布局外,也提供了相对复杂的列表、宫格、轮播

  • 组件:形成了在界面中的样子,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件

  • 页面路由:应用可能包含多个页面,可通过页面路由实现页面间的跳转

  • 组件导航:一个页面内可能存在组件间的导航如典型的分栏,可通过导航组件实现组件间的导航

  • 图形:ArkUI 提供了多种类型图片的显示能力和多种自定义绘制的能力,以满足开发者的自定义绘图需求,支持绘制形状、填充颜色、绘制文本、变形与裁剪、嵌入图片等。

  • 动画:动画是UI的重要元素之一。优秀的动画设计能够极大地提升用户体验,框架提供了丰富的动画能力,除了组件内置动画效果外,还包括属性动画、显式动画、自定义转场动画以及动画API等,开发者可以自定义动画轨迹。

  • 交互事件:交互事件是UI和用户交互的必要元素。入园触摸事件、鼠标事件、键盘按键事件、焦点事件等事件

2.2 整体架构

整体架构

整体架构

  • 声明式UI前端:提供了UI开发范式的基础语言规范,并提供内置的UI组件、布局和动画,提供了多种状态管理机制,为应用开发者提供一系列接口支持。

  • 语言运行时:选用ArkUI语言运行时,提供了针对UI范式语法的解析能力、跨语言调用支持的能力和TS语言高性能运行环境。

  • 声明式UI后端引擎:后端引擎提供了兼容不同开发范式的UI渲染管线,提供多种基础组件、布局计算、动效、交互事件,提供了状态管理和绘制能力。

  • 渲染引擎:提供了高效的绘制能力,将渲染管线收集的渲染指令,绘制到屏幕的能力。

  • 平台适配层:提供了对系统平台的抽象接口,具备接入不同系统的能力,如系统渲染管线、生命周期调度等。

三、ArkTS 基础类型

3.1 Any 类型

        声明为 any 的变量可以赋予任意类型的值。

let obj :any = "";//字符串类型
obj  = 1;//数字类型

3.2 数字类型

let decLiteral: number = 6;    // 十进制,默认情况下就是十进制
let binaryLiteral: number = 0b1010; // 二进制 0b开头
let octalLiteral: number = 0o744;    // 八进制 0o开头
let hexLiteral: number = 0xf00d;    // 十六进制 0x开头

3.3 字符串类型

        一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号来定义多行文本和内嵌表达式。

let name: string = "Scc";
let years: number = 18;
let words: string = ` ${name} 今年 ${years} 岁了`;

3.4 布尔类型

        表示逻辑值:true 和 false。

let flag: boolean = true;

3.5 联合类型

        可指定多个类型。如下,指定类型 string | boolean,可赋值"abc" 和 true。未指定 number 类型,所以赋值 1 报错。

let allType: string | boolean;
allType = "abc";
allType = true;
allType = 1;

3.6 数组类型

let arr: number[] = [1, 2];
let arrStr: string[] = ["1", "2"];
let arrList:Array<number> = [3,4];

3.7 元组类型

        类似 map ,已键值对的形式存储。

let x: [string, number];
x = ['张三', 18];    // 运行正常
x = ['李四', 21];    // 运行正常
x = [1, '王五'];    // 报错

3.8 枚举类型

        用于定义数值集合。

enum Number {Three, Four, Five};
let num: Number = Number.Three;

3.9 void

        用于标识方法返回值的类型,表示该方法没有返回值。

function testFun(): void {//你看着写吧
}
function testFun2(): string {//你看着写吧return "哈哈哈";
}

四、基本语法

自定义变量不能与基础通用属性/事件名重复。
  • 装饰器(Decorators):装饰器用于修饰类、结构、方法以及变量,并赋予其特殊的含义。在 ArkTS 中,常见的装饰器有 @Entry、@Component 和 @State。例如:
    • @Component 用于标识自定义组件。如后面提到的自定义弹窗

    • @Entry 用于标识入口组件。

    • @State 用于标识组件中的状态变量。

  • UI 描述:UI 是以声明式的方式来描述的,通常在组件的 build 方法中完成。使用系统组件(如 Column、Text、Button 等)来构建 UI 布局和展示内容。

  • 自定义组件:自定义组件是可复用的 UI 单元,可以通过组合其他组件来创建。自定义组件使用 @Component 装饰器进行标识。

  • 属性方法:组件的属性可以通过链式调用的方式配置,如 fontSize()、width()、height()、backgroundColor() 等。这些方法允许开发者以直观的方式设置组件的外观和行为。

  • 事件方法:组件的事件响应逻辑可以通过链式调用的方式设置。例如,在 Button 组件后面跟随的 onClick() 方法用于处理按钮点击事件。

  • 变量和类型:
    • 所有的状态装饰器变量(如 @State)需要显式声明变量类型,不允许声明为 any 类型,并且不支持 Date 数据类型。

    • 静态类型的使用增强了代码的可读性和可维护性。

上面一大堆废话,反正你参考下面这种格式来做就行。

@Entry
@Component
struct Index {//数据num :number = 3;build() {//UIRow() {Column() {Text('你好,开发者同学').fontSize(24)......}.width('100%')}.height('100%')}
}

相关推荐 

Dev Studio 安装与使用icon-default.png?t=N7T8https://blog.csdn.net/g984160547/article/details/136732798

相关文章:

HarmonyOS ArkTS 开发基础/语言

目录 一、ArkUI (方舟开发框架) 概述 1.1 基本概念 1.2 两种开发范式 1.3 不同应用类型支持的开发范式 二、ArkTS 声明式开发范式 2.1 开发能力 2.2 整体架构 三、ArkTS 基础类型 3.1 Any 类型 3.2 数字类型 3.3 字符串类型 3.4 布尔类型 3.5 联合类型 3.6 数组类…...

AI大模型学习

AI大模型学习 在当前技术环境下&#xff0c;AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力&#xff0c;还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xff0c;AI大模型学习能够不断提升模型的准确性和效率&#xff0c;为人类生活和工作…...

2024年【T电梯修理】考试内容及T电梯修理作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理考试内容根据新T电梯修理考试大纲要求&#xff0c;安全生产模拟考试一点通将T电梯修理模拟考试试题进行汇编&#xff0c;组成一套T电梯修理全真模拟考试试题&#xff0c;学员可通过T电梯修理作业考试题库全真…...

2.vscode 配置python开发环境

vscode用着习惯了,也不想再装别的ide 1.安装vscode 这一步默认已完成 2.安装插件 搜索插件安装 3.选择调试器 Ctrl Shift P&#xff08;或F1&#xff09;&#xff0c;在打开的输入框中输入 Python: Select Interpreter 搜索&#xff0c;选择 Python 解析器 选择自己安…...

[蓝桥杯 2015 省 B] 生命之树

题目链接 [蓝桥杯 2015 省 B] 生命之树 题目描述 在 X 森林里&#xff0c;上帝创建了生命之树。 他给每棵树的每个节点&#xff08;叶子也称为一个节点&#xff09;上&#xff0c;都标了一个整数&#xff0c;代表这个点的和谐值。 上帝要在这棵树内选出一个节点集合 S S S&…...

为什么Hashtable不允许插入nuIl键和null值?

1、典型回答 浅层次的来回答这个问题的答案是&#xff0c;JDK 源码不支持 Hashtable 插入 value 值为 null&#xff0c;如以下 JDK 源码所示&#xff1a; 也就是 JDK 源码规定了&#xff0c;如果你给 Hashtable 插入 value 值为 null 就会抛出空指针异常。 并且看上面的 JDK …...

【WPF应用4】WPF界面对象编辑

简介 WPF&#xff08;Windows Presentation Foundation&#xff09;是.NET框架的一部分&#xff0c;它为开发人员提供了一个用于构建桌面应用程序用户界面的强大平台。WPF界面对象编辑是指在WPF应用程序中创建、设计和修改用户界面元素的过程。这些界面对象不仅包括基本的控件…...

js数组去重常见方法

简单数组 1、使用filter()方法&#xff1a;通过filter()方法遍历数组&#xff0c;返回仅包含首次出现的元素的新数组。 const arr [1, 2, 3, 4, 2, 3, 5]; const list arr.filter((item, index) > arr.indexOf(item) index); console.log(list); // [1, 2, 3, 4, 5]2、…...

【Java Web基础】一些网页设计基础(二)

文章目录 1. Bootstrap导航栏设计1.1 代码copy与删减效果1.2 居中属性与底色设置1.3 占不满问题分析1.4 字体颜色、字体大小、字体间距设置1.5 修改超链接hover颜色&#xff0c;网站首页字体颜色 1. Bootstrap导航栏设计 1.1 代码copy与删减效果 今天设计导航栏&#xff0c;直…...

python中tkinter计算器

本文使用创作助手。 以下是一个用Python的Tkinter库编写的简单计算器的示例代码&#xff1a; import tkinter as tkdef btn_click(btn_val):current_text entry.get()new_text current_text btn_valentry.delete(0, tk.END)entry.insert(tk.END, new_text)def calculate()…...

[嵌入式系统-39]:龙芯1B 开发学习套件 -9-PMON的文件结构

目录 前言&#xff1a; 一、PMON-V1.1 目录结构 二、Targets目录的组成 前言&#xff1a; 参考&#xff1a;​​​​​​龙芯相关 - 心映真的空间 一、PMON-V1.1 目录结构 PMON-V1.1 目录结构 pmon的目录结构大致如下&#xff08;由linux工具tree生成&#xff09; |-- Tar…...

[蓝桥杯2012] 罗马数字

罗马数字 题目描述 古罗马帝国开创了辉煌的人类文明&#xff0c;但他们的数字表示法的确有些繁琐&#xff0c;尤其在表示大数的时候&#xff0c;现在看起来简直不能忍受&#xff0c;所以在现代很少使用了。之所以这样&#xff0c;不是因为发明表示法的人的智力的问题&#xf…...

Thinkphp+workman+redis实现多进程异步任务处理

前言 PHP本身并不直接支持多线程编程&#xff0c;因为PHP的设计初衷是作为一个脚本语言&#xff0c;主要面向的是Web开发。不过我们可以使用一些扩展和库来实现多进程的功能&#xff0c;提高系统性能&#xff0c;比如workerman和swoole。通过多进程异步执行任务。 安装workman…...

牛客NC196 编辑距离(一)【较难 DFS/DP,动态规划,样本对应模型 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da 思路 编辑距离问题 什么是两个字符串的编辑距离&#xff08;edit distance&#xff09;&#xff1f;给定字符串s1和s2&#xff0c;以及在s1上的如下操作&#xff1a;插入&…...

走进jvm之垃圾回收器篇

这里我想首先说明一下&#xff0c;虽然我们经常会拿垃圾回收器来做比较&#xff0c;虽然想挑选一个最好的收集器出来&#xff0c;但是目前也没有说哪一款收集器是完美的&#xff0c;更不存在万能的收集器&#xff0c;我们也只是对收集器选择最适合场景的一个收集器。 那么作者将…...

rtt自动初始化机制学习

通过以下两篇文章基本能搞懂rtt的自动初始化机制&#xff0c;从此你也可以借鉴写自己的自动初始化段(section)。 1点这里 https://blog.csdn.net/qq_38824401/article/details/119717389 2点这里 https://club.rt-thread.org/ask/article/d686458bbba864f4.html section背景…...

基于SpringBoot和Vue的大学生租房系统的设计与实现

今天要和大家聊的是一款今天要和大家聊的是一款基于SpringBoot和Vue的大学生租房系统的设计与实现。 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同…...

ai制图常用的软件有哪些?这5款ai生图工具值得推荐!

过去提起制图&#xff0c;它是一项具备高度专业化的创作活动&#xff0c;需要由熟练掌握制图技能的人完成&#xff0c;且制图通常包含的步骤繁多&#xff0c;很容易劝退想学习或者入门制图的新手&#xff0c;但随着 ai 人工智能技术在各个领域的落地&#xff0c;我们有机会用上…...

一分钟了解JAVA语言

Java语言诞生于1995年&#xff0c;由Sun Microsystems&#xff08;后被Oracle收购&#xff09;的工程师James Gosling等人开发。最初被设计用于家用电器控制系统&#xff0c;但很快就在互联网应用开发中得到广泛应用。Java之父詹姆斯高斯林希望开发一种可以适应不同计算机架构的…...

L4 级自动驾驶汽车发展综述

摘要:为了减小交通事故概率、降低运营成本、提高运营效率,实现安全、环保的出行,自动驾驶 技术的发展已成为大势所趋,而搭配有L4 级自动驾驶系统的车辆是将车辆驾驶全部交给系统。据此,介绍了自动驾驶汽车的主流技术解决方案;分析了国内外L4 级自动驾驶汽车的已发布车型、…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...