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() {
    //UI
    Row() {
      Column() {
        Text('你好,开发者同学')
          .fontSize(24)

        ......
      }
      .width('100%')
    }
    .height('100%')
  }
}

相关推荐 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jackson解决java.lang.NoSuchMethodError

本质上是依赖版本冲突。 如&#xff1a;jackson-databind-2.11.2&#xff08;版本太低&#xff0c;需要升级版本&#xff09; jackson-core-2.12.6 jackson-dataformat-xml-2.12.6 idea用Analyze Dependencies插件 复制对应的groupId和artifactId放到exclusion里面 <grou…

哈希表及其实现

哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff0c;平衡树中为树的高度&#xff0c;即 O(log2N)&#xff0c;搜索的效率取决…

【C++】—— 装饰器模式

目录 &#xff08;一&#xff09;什么是装饰器模式 &#xff08;二&#xff09;为什么要使用装饰器模式 &#xff08;三&#xff09;装饰器模式的实现步奏 &#xff08;四&#xff09;代码示例 &#xff08;五&#xff09;装饰器模式优缺点 &#xff08;一&#xff09;什么…

文档翻译-NVIDIA DALI Pipeline

文档地址&#xff1a; Pipeline — NVIDIA DALI 1.12.0 documentation 在DALI中&#xff0c;任何数据处理任务都有一个称为Pipeline的中心对象。Pipeline对象nvidia.dali.Pipeline或其派生类的实例。Pipeline封装了数据处理图和执行引擎。 您可以通过以下方式定义DALI管道&am…

虚拟内存页表和内存保护

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第21篇&#xff0c;在这里分享给大家&#xff0c;这篇文章讲虚拟内存和内存之间的页表和内存安全问题。 虚拟内存 前面的文章提到过&#xff0c;程序装载到内存的过程。可以知道&#xff0c;程序并不直接访…

【python】flask基于cookie和session来实现会话控制

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

使用Java版工程行业管理系统源码,提升工程项目的综合管理能力

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

3d模型变形动画怎么做---模大狮模型网

要制作3D模型的变形动画&#xff0c;你可以通过使用动画软件(如Blender、Maya、3ds Max等)中的变形工具和技术来实现。以下是一般的步骤来制作3D模型的变形动画&#xff1a; 创建基础模型&#xff1a;首先&#xff0c;在3D建模软件中创建或导入你想要进行变形的基础模型。这个基…

《InfMAE: A Foundation Model in Infrared Modality》CVPR2024

基础模型vs大模型&#xff1a;大模型&#xff0c;也称基础模型&#xff0c;是指具有大规模参数和复杂计算结构的机器学习模型 以后的研究中必须把大模型和基础模型耦合进来 总结&#xff1a;占坑 1. AB 多光谱的基础模型 红外的基础模型 可见光的基础模型 整体架构差不多…

智慧商显安卓主板MT8788_联发科MTK平台多媒体广告一体机方案

MT8788高性能智能主板&#xff0c;支持Android 9.0操作系统&#xff0c;支持双屏异显功能;MT8788是基于12nm工艺制程四核A73四核A53架构的八核心CPU,主频高达2.0GHz,拥有超强的通用计算性能。 MT8788主板采用10层二阶超高密度PCB板,集成了4G、百兆以太网、2.4G/5G 双频WiFi、蓝…

平时寄快递能够拿到最低的便宜价格吗?

现在快递物流与我们的日常生活联系很紧密了&#xff0c;但是等到我们真正去寄快递的时候就会很烦恼寄快递的价格怎么这么昂贵呢&#xff1f;但是我们又不得不选择去寄快递&#xff0c;所以我们能不能选择一种寄快递又方便&#xff0c;运费又便宜的方式呢&#xff1f; 尤其是我…

图书推荐|图解算法:C语言实现+视频教学版

零负担理解数据结构及其算法的设计&#xff0c;零基础也能快速上手编程。 本书内容 《图解算法&#xff1a;C语言实现视频教学版》是一本综合讲述数据结构及其算法的入门书&#xff0c;力求简洁、清晰、严谨、且易于学习和掌握。 《图解算法&#xff1a;C语言实现视频教学版》…

Flutter开发进阶之瞧瞧State

Flutter开发进阶之瞧瞧State 书接上回 上回说到StatefulWidget会将自身作为参数创建StatefulElement,然后StatefulElement的创建过程首先要调用_state = widget.createState(),会创建并持有一个state通过对其生命周期的管理去对Widget进行刷新,创建state后还会将自身交给st…

查看当前虚拟主机的php环境

近期看到一位用户在论坛的留言想要知道Linux虚拟主机的PHP环境&#xff0c;但是不清楚如何在主机上面查看&#xff0c;对于主机cPanel面板了解不多&#xff0c;因此在论坛寻求帮助。这边看到后详细的告知了这位用户&#xff0c;这边是以Hostease Linux虚拟主机为例的&#xff0…

Vue/Uni-app/微信小程序 v-if 设置出场/退出动画(页面交互不死板,看起来更流畅)

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 在Vue.js中&#xff0c;使用v-if进行条件渲染时设置动画可以通过<transition>组件来实现。 具体操作步骤如下&#xff1a; 包裹条件渲染的元素&#xff1a;您需要将要通过v-if控制显示隐藏的元素包裹在<transition…

02. Java 中的关键字、标识符、运算符、分隔符和注释

关键字 Java 的关键字(keyword、保留字)是 Java 语言中具有特殊含义的单词&#xff0c;它们被保留供 Java 自身使用&#xff0c;不能被用作标识符。例如 public、class、void、int 等都是关键字。 关键字在 Java 语法中起着重要的作用&#xff0c;它们定义了编程的结构、控制…

合并两个有序数组(力扣)

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在Gitee或GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/groundhog-charging…

QT_day2:2024/3/21

作业1&#xff1a;使用QT完成一个登录界面 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件相关设置&#xff0c;通过代码实现 3. 需要添加适当的动图 源代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget…

蓝桥杯算法练习系统—金属采集(树形dp)

问题描述 人类在火星上发现了一种新的金属&#xff01;这些金属分布在一些奇怪的地方&#xff0c;不妨叫它节点好了。一些节点之间有道路相连&#xff0c;所有的节点和道路形成了一棵树。一共有 n 个节点&#xff0c;这些节点被编号为 1~n 。人类将 k 个机器人送上了火星&…