2、鴻蒙Harmony Next開發:ArkTS語言

目錄

什么是ArkTS?

ArkTS的發展趨勢

ArkTS的定位及約束

ArkTS的對UI的拓展

1、UI描述

2、狀態管理:

ArkTS語法基礎

基本知識:聲明

基本知識:類型

基本知識:空安全

基本知識:類型安全與類型推斷

基本知識:語句

函數的聲明和使用

類的聲明和使用

模塊的導入與導出

ArkTS對UI的語法支持

自定義組件的規則

組件描述的規則

組件描述

屬性方法

事件方法

布局描述

渲染控制語法

if/else if/else

Foreach?編輯

LazyForeach


什么是ArkTS?

ArkTS是鴻蒙生態的應用開發語言,它提供了聲明式UI范式、狀態管理支持等相應的能力,讓開發者可以以更簡潔、更自然的方式開發應用。

同時,它在保持TypeScript(簡稱TS)基本語法風格的基礎上,進一步通過規范強化靜態檢查和分析,使得在程序運行之前的開發期能檢測更多錯誤,提升代碼正確性;并實現更好的運行性能。

ArkTS的發展趨勢

ArkTS的定位及約束

  • ArkTS作為OH/HMOS官方主流推薦開發語言
  • ets以及.d.ets作為ArkTS語言源碼后綴
  • 與TS/JS高效互操作,兼容TS/JS生態
  • ets文件可以import ets/ts/js文件源碼,但是ts/js文件不允許import ets文件源碼
  • 新增SDK API(不包括NDK部分)接口需要符合ArkTS規范

左側TypeScript代碼片段演示了如何在運行時通過添加和刪除某些屬性來更改對象的布局。運行時支持此類特性需要大量的性能開銷,ArkTS禁止使用any類型、禁止在運行時更改對象的布局。可以使用可選屬性和給該屬性賦值undefined的方式來替代對對象布局的動態改變。

此TypeScript代碼段展示了過于靈活的特性導致行為的二義性。在class C中存在實例方法m,它應被C的所有實例所共享,也就是說C的實例調用m方法時行為應一致。在TypeScript中,可以使用對象字面的方式創建C的實例,跳過這樣的約束,構造一個不符合C預期但類型是C的實例,這是不安全的行為,也會對使用者造成困惑。

ArkTS禁止使用對象字面量初始化具有方法的類,請使用new操作符創建類的實例或者將類中方法改為類的實例屬性(類型為方法)。

ArkTS的對UI的拓展

1、UI描述

在TS的類型系統的基礎上,做了進一步的擴展:定義了各種裝飾器、自定義組件和UI描述機制,再配合UI開發框架中的UI內置組件、事件方法、屬性方法等共同構成了應用開發的主體。

2、狀態管理:

ArkTS在TS的類型系統的基礎上,做了進一步的擴展:定義了各種裝飾器、自定義組件和UI描述機制,再配合UI開發框架中的UI內置組件、事件方法、屬性方法等共同構成了應用開發的主體。ArkTS的對UI的拓展UI 相關聯的數據,不僅可以在組件內使用,還可以在不同組件層級間傳遞,比如父子組件之間,爺孫組件之間,也可以是全局范圍內的傳遞,還可以是跨設備傳遞。

ArkTS語法基礎

基本知識:聲明

基本知識:類型

基本類型:string、number、boolean、Enum

引用類型:Array、基于Object的自定義類

聯合類型:Union

類型別名:Aliases

// 基本類型:string、number、boolean、Enum
let name: string = '小明’;
let age: number = 20;
let isMale: boolean = true;console.log(name); // 輸出小明
console.log(age.toString());// 輸出:20
console.log(`我的名字叫${name},今年${age}歲`);enum Color {Red,Blue,Green
}let favouriteColor: Color = Color.Red;// 引用類型:Array、基類Object
let students: string[] = ['小明', '小張', '小王', '小李’];
let students: Array<string>= ['小明', '小張', '小王', '小李’];// 聯合類型:Union
let luckyNum: number | string = 7;
luckyNum= ’seven';// 類型別名:Aliasestype Matrix= number[][];
type NullableObject= Object | null;

基本知識:空安全

一般來說,有時會存在聲明變量類型而不明確提供初始值。在這類情況下,通常使用聯合類型包含null值

1、使用該變量中需要進行判空

let name: string | null = null
console.log(name.length.toString()); //Error Message:Cannot read property length of null

2、使用空值合并表達式,??左邊的值為null時會返回表達式右邊的值

let name: string | null = null
const res = name ?? '';

3、使用?進行可選鏈,如果是null,運算符會返回undefined

let str:string | null = 'aa';
let len = str?.length;

基本知識:類型安全與類型推斷

基本知識:語句

// 條件語句
let isValid: boolean;
if (Math.random() > 0.5) {isValid = true;
} else {isValid = false;
}// 條件表達式
let isValid = Math.random() > 0.5 ? true : false;// 循環語句 用于重復執行相同的一組語句,提高效率、簡化代碼循環語句
// for 
for (let i = 0; i < students.length; i++) {console.log(students[i]);
}// for...of
for (let student of students) {console.log(student);
}// while
let index = 0;
while (index < students.length) {console.log(students[index]);index++;
}

函數的聲明和使用

類的聲明和使用

模塊的導入與導出

通過import導入另一個文件的變量、函數、類等

// Page.ets

import { Person } from './Person';

const person = new Person('小張', 20, true);

person.introduce();//輸出:小張是個男生,年齡是28歲

ArkTS對UI的語法支持

自定義組件的規則

組件描述的規則

組件描述

屬性方法

事件方法

布局描述

渲染控制語法

if/else if/else

Foreach

LazyForeach

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88735.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Elasticsearch】function_score

如果你希望在 Elasticsearch 查詢中降低某些特定 `id` 的文檔評分,可以通過 `function_score` 查詢結合 `script_score` 函數來實現。`script_score` 允許你使用自定義腳本對文檔的評分進行調整。 以下是一個示例,展示如何降低某些特定 `id` 的文檔評分: 示例場景 假設我們…

vscode打開stm32CubeIDE的項目的注釋問題

文章目錄 目的是為消除紅色底線打開命令面板&#xff1a;CtrlShiftP 搜索并打開&#xff1a;C/C: Edit Configurations (JSON) 修改并添加。&#xff08;注意里面的版本號&#xff09; {"configurations": [{"name": "Win32","includePath&…

ESP32使用freertos更新lvgl控件內容

LVGL不是線程安全&#xff0c;所有 lv_xxx方法只能在GUI主線程調用。 freertos都是線程池&#xff0c;子線程&#xff0c;不能直接更新lvgl&#xff0c;不然看門狗被觸發&#xff0c;死機。 推薦方法案例&#xff1a; 假如搜索wifi列表得到參數是wifi_options&#xff0c;需要通…

OBOO鷗柏丨滿天星(MTSTAR)多媒體信息發布系統技術解析

初次啟動歡迎您使用鷗柏(OBOO)滿天星(MTSTAR)多媒體信息發布系統&#xff0c;在使用本系統的獨立服務器模式前&#xff0c;我們需要完成設備的一些必須設置教程技術說明。其總體流程分為兩步&#xff1a;錄入本地服務器IP地址->連接網絡您獲取到的OBOO鷗柏滿天星(MTSTAR)液晶…

數據結構:棧、隊列、鏈表

目錄 棧 ?隊列 鏈表 棧 棧數據結構特點&#xff1a;先入棧的數據后出&#xff0c;此數據結構常用的方法有&#xff1a;入棧push、出棧pop、查看棧頂元素peek等&#xff0c;下方示例以數組實現棧結構。 package com.ginko.datastructure; import lombok.extern.slf4j.Slf4j…

Python-難點-uinttest

1 需求要求&#xff1a;unittest.TestCase放在列表中&#xff0c;列表存儲的是腳本文件名import使用動態加載方式&#xff1a;importlib.import_module()unittest.TestLoader使用loadTestsFromModule()2 接口3 示例4 參考資料

開源 python 應用 開發(五)python opencv之目標檢測

最近有個項目需要做視覺自動化處理的工具&#xff0c;最后選用的軟件為python&#xff0c;剛好這個機會進行系統學習。短時間學習&#xff0c;需要快速開發&#xff0c;所以記錄要點步驟&#xff0c;防止忘記。 鏈接&#xff1a; 開源 python 應用 開發&#xff08;一&#xf…

ABP VNext + OpenTelemetry + Jaeger:分布式追蹤與調用鏈可視化

ABP VNext OpenTelemetry Jaeger&#xff1a;分布式追蹤與調用鏈可視化 &#x1f680; &#x1f4da; 目錄ABP VNext OpenTelemetry Jaeger&#xff1a;分布式追蹤與調用鏈可視化 &#x1f680;背景與動機 &#x1f31f;環境與依賴 &#x1f4e6;必裝 NuGet 包系統架構概覽…

C語言中整數編碼方式(原碼、反碼、補碼)

在 C 語言中&#xff0c;原碼、反碼、補碼的運算規則與其編碼特性密切相關&#xff0c;核心差異體現在符號位是否參與運算、進位如何處理以及減法是否能轉化為加法等方面。以下是三者的運算規則及特點分析&#xff08;以 8 位整數為例&#xff0c;符號位為最高位&#xff09;&a…

js二維數組如何變為一維數組

在 JavaScript 中&#xff0c;將二維數組轉換為一維數組&#xff08;扁平化&#xff09;有多種方法&#xff0c;可根據數組結構復雜度、性能需求和兼容性選擇。以下是最常用的實現方式&#xff1a; 1. 使用 flat() 方法&#xff08;ES2019&#xff09; MDN釋義&#xff1a;flat…

Claude code在Windows上的配置流程

前言 昨天在服務器上配置好了 Claude code&#xff0c;發現其編碼性能和效率都非常不錯。 然而&#xff0c;嘗試用它修改帶 UI 界面的客戶端程序時頗為不便&#xff0c;因為服務器沒有圖形化界面&#xff0c;無法直接將應用界面直接顯示到開發機上&#xff0c;調試起來頗為不…

手把手教你用YOLOv10打造智能垃圾檢測系統

無需編程基礎&#xff01;手把手教你用YOLOv10打造智能垃圾檢測系統 垃圾分類不再難&#xff0c;AI助手秒識別 你是否曾站在分類垃圾桶前猶豫不決&#xff1f;塑料瓶是可回收還是其他垃圾&#xff1f;外賣餐盒到底該丟哪里&#xff1f;隨著垃圾分類政策推廣&#xff0c;這樣的困…

batchnorm類

1. 偽代碼&#xff1a;2. python代碼&#xff1a;3. 測試&#xff1a;4. 加深理解&#xff1a;以 為例&#xff0c;x3&#xff0c;可見輸出的batchnorm后y0.2627.查看模型記錄的均值及方差&#xff0c;計算y0.286799&#xff0c;理解是大致這樣的計算過程。&#xff08;為什么數…

SpringBoot項目保證接口冪等的五種方法!

1. 冪等概述 1.1 深入理解冪等性 在計算機領域中&#xff0c;冪等&#xff08;Idempotence&#xff09;是指任意一個操作的多次執行總是能獲得相同的結果&#xff0c;不會對系統狀態產生額外影響。在Java后端開發中&#xff0c;冪等性的實現通常通過確保方法或服務調用的結果…

SQL新手入門詳細教程和應用實例

SQL(Structured Query Language)是用于管理和操作關系型數據庫的標準語言。它允許你創建、查詢、更新和刪除數據。本教程將從基礎概念開始,逐步引導你上手SQL,并提供詳細的應用實例。教程基于標準SQL語法,實際使用時需根據數據庫系統(如MySQL、SQLite或PostgreSQL)調整。…

DVWA-LOW級-SQL手工注入漏洞測試(MySQL數據庫)+sqlmap自動化注入-小白必看(超詳細)

首次使用DVWA的靶場&#xff0c;咋們先從最低級別的LOW開始&#xff0c;因為之前玩過一下墨者學院&#xff0c;對sql注入有一點認識和理解&#xff0c;所以先從sql的盲注開始&#xff1b; 1、測試注入點是否存在sql注入的漏洞&#xff1b; &#xff08;1&#xff09;首先我們…

JAVA線程池詳解+學習筆記

1.線程池基礎概念線程池是一種資源復用技術&#xff0c;通過預先創建并管理一組線程&#xff0c;減少頻繁創建和銷毀線程的開銷。核心思想與數據庫連接池、字符串常量池類似&#xff0c;旨在提升系統性能。核心參數解析ThreadPoolExecutor構造函數包含7個關鍵參數&#xff1a;c…

數據分析庫 Pandas

對于Pandas的簡單認識和基本操作的練習一 介紹 Pandas 是一個開源的數據分析和數據處理庫&#xff0c;它是基于 Python 編程語言的庫。 Pandas 提供了易于使用的數據結構和數據分析工具&#xff0c;特別適用于處理結構化數據&#xff0c;如表格型數據&#xff08;類似于 Excel …

qt 中不要讓 lambda 槽函數捕獲信號源對象的共享指針

錯誤示例std::shared_ptr<QSerialPort> serial{new QSerialPort{}};QSerialPort::connect(serial.get(),&QSerialPort::readyRead,[serial](){QByteArray receive_data serial->readAll();std::cout.write(receive_data.data(), receive_data.size());});這會直接…

Solidity 合約的編寫-完整開發流程:從編譯、測試、部署到交互

&#x1f9f1; Solidity 合約開發全流程&#xff08;Foundry 版&#xff09;? 適合對象&#xff1a;已經能寫合約但不清楚如何測試、部署、交互的開發者? 工具鏈&#xff1a;Foundry&#xff08;forge, anvil, cast&#xff09;&#x1f4cc; 開發流程總覽1?? 初始化項目 2…