当前位置: 首页 > 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 级自动驾驶汽车的已发布车型、…...

【研报308】豪能股份深度报告:同步器龙头跨界航空与机器人三赛道协同驱动长期增长

本报告提供限时下载&#xff0c;请查看文后提示以下仅为报告部分内容&#xff1a;摘要&#xff1a;豪能股份依托六十余年精密制造能力&#xff0c;构建汽车、航空航天、人形机器人三维成长格局。2025年前三季度营收18.95亿元&#xff08;12.3%&#xff09;&#xff0c;扣非净利…...

Android 离线TTS引擎集成实战:从选型到中文语音播报

1. 为什么需要离线TTS引擎&#xff1f; 在开发Android应用时&#xff0c;我们经常会遇到需要将文字转换为语音的场景。比如阅读类APP的听书功能、导航应用的语音播报、智能家居设备的语音反馈等。Android系统虽然自带了TTS&#xff08;Text To Speech&#xff09;功能&#xff…...

3分钟搞定:YaeAchievement让你告别手动记录原神成就的烦恼

3分钟搞定&#xff1a;YaeAchievement让你告别手动记录原神成就的烦恼 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 还在为《原神》数百项成就的手动整理而头疼吗&#xff1f;YaeAchieve…...

Qwen2.5-VL-7B-Instruct开发者指南:自定义提示词模板+视觉指令工程最佳实践

Qwen2.5-VL-7B-Instruct开发者指南&#xff1a;自定义提示词模板视觉指令工程最佳实践 你是不是也遇到过这样的问题&#xff1a;给一个多模态模型上传了一张图&#xff0c;然后问它“这是什么&#xff1f;”&#xff0c;结果它要么答非所问&#xff0c;要么只描述了最表面的信…...

软考架构设计师论文 —— 论面向服务架构设计及其应用(6) —— 涉及知识点之Seata(3)

接前一篇文章:软考架构设计师论文 —— 论面向服务架构设计及其应用(5) —— 涉及知识点之Seata(2) 本文内容参考: Seata 是什么? | Apache Seata Seata分布式事务 (理论与部署相结合)-腾讯云开发者社区-腾讯云 特此致谢! 4. 分布式解决方案 基于上述架构,Seata提…...

AI知识库集问答

框架图架构图&#xff08;模块视角&#xff09;当前真实生效路径&#xff08;精简图&#xff09;“知识库”模块&#xff0c;当前实现可以概括为&#xff1a;文档管理 上下文拼接式问答&#xff08;非RAG检索库&#xff09;&#xff0c;主问答链路是 单智能体调用 DeepSeek。先…...

基于Socket通信的西门子S7-1200与ABB机器人实时数据交换实践

1. 工业自动化中的跨品牌设备通信挑战 在现代化工厂的生产线上&#xff0c;经常能看到西门子PLC和ABB机器人协同工作的场景。这种组合在汽车制造、3C电子等行业尤为常见&#xff0c;但不同品牌设备之间的数据互通往往让工程师头疼。我去年就遇到过这样一个项目&#xff1a;客户…...

冲刺待办列表管理化技术任务分解与估算

冲刺待办列表管理化技术任务分解与估算&#xff1a;高效协作的核心 在快节奏的软件开发中&#xff0c;冲刺待办列表&#xff08;Sprint Backlog&#xff09;是敏捷团队实现目标的关键工具。通过将复杂任务拆解为可执行单元并合理估算工作量&#xff0c;团队能提升交付效率与质…...

(二十二)32天GPU测试从入门到精通-DeepSeek 模型测试day20

目录 引言DeepSeek 模型介绍架构特点推理性能测试中文场景优化与其他模型对比实战部署选型建议 引言 DeepSeek 是中国深度求索公司开发的大语言模型系列&#xff0c;以出色的中文能力和高性价比著称&#xff0c;是国产大模型的代表之一。从 2023 年的第一代 DeepSeek LLM&…...

OneAPI部署实操手册:从零配置到多渠道管理,支持腾讯混元、通义千问、文心一言等全生态

OneAPI部署实操手册&#xff1a;从零配置到多渠道管理&#xff0c;支持腾讯混元、通义千问、文心一言等全生态 你是不是也遇到过这样的烦恼&#xff1f;想用通义千问写代码&#xff0c;用文心一言做PPT&#xff0c;用腾讯混元分析数据&#xff0c;结果每个平台都要单独注册、单…...