鴻蒙全棧開發 D2

課程目標

  1. 掌握ArkTS基礎語法與核心概念
  2. 理解聲明式UI開發范式
  3. 能獨立開發簡單鴻蒙應用組件
  4. 建立規范的代碼編寫習慣

第一部分:初識ArkTS

1.1 語言全景認知

JavaScript
TypeScript
ArkTS
鴻蒙生態
手機
平板
智能穿戴

關鍵特征解析

  • 類型安全:編譯時檢查錯誤(演示類型錯誤案例)
  • UI即代碼:通過代碼直接描述界面(對比傳統XML布局)
  • 一次開發:同一套代碼適配不同設備尺寸

1.2 開發環境初體驗

DevEco Studio安裝四步曲

  1. 下載安裝包(官網/鏡像站)
  2. 基礎配置檢查:
    • JDK 17+
    • 8GB+可用空間
  3. 創建第一個項目:
    Project Type: Application
    Template: Empty Ability
    Project Name: HelloArkTS
    
  4. 模擬器啟動測試(P40手機模擬器)

第二部分:基礎語法全解析

2.1 變量與基礎類型

變量聲明三板斧

// 方式1:顯式類型聲明
let userName: string = "Alice";// 方式2:類型推斷(推薦)
let age = 20;  // 自動識別為number// 方式3:聯合類型
let id: string | number = "S001";
id = 1001;  // 有效賦值

基礎類型速查表

類型示例特殊值
number3.14, -20, NaNInfinity
string"Hello", `年齡:${age}`模板字符串
booleantrue/false-
any禁用!類型檢測逃逸

2.2 運算符與流程控制

新手指南:

// 算術運算符
let result = 10 + 5 * 3;  // 25// 比較運算符
if (age >= 18 && age <= 60) {console.log("成年人");
}// 空值處理
let nickname = userName ?? "匿名用戶";  // 空值合并運算符

循環結構對比

// 傳統for循環
for (let i = 0; i < 5; i++) {console.log(i);
}// forEach遍歷數組
[1,2,3].forEach(num => console.log(num));// for...of迭代
for (const num of [1,2,3]) {console.log(num);
}

2.3 函數與作用域

函數定義三要素

// 1. 基礎函數
function add(a: number, b: number): number {return a + b;
}// 2. 箭頭函數(推薦)
const sayHello = (name: string): string => `你好,${name}`;// 3. 默認參數
function createUser(name: string, age: number = 18) {// 函數體
}// 函數調用示例
console.log(sayHello("張三"));  // 輸出:你好,張三!

作用域陷阱演示

let globalVar = 10;function testScope() {let localVar = 20;console.log(globalVar);  // 10console.log(localVar);   // 20
}
// console.log(localVar);   // 報錯:未定義

**第三部分:面向對象編程

3.1 類與對象基礎

類結構四要素

class Student {// 1. 屬性聲明private id: string;  public name: string;// 2. 構造函數constructor(name: string, id: string) {this.name = name;this.id = id;}// 3. 方法定義study(subject: string): void {console.log(`${this.name}正在學習${subject}`);}// 4. 訪問器get studentId(): string {return this.id;}
}// 使用示例
const stu1 = new Student("李華", "S2023001");
stu1.study("ArkTS編程");  // 輸出:李華正在學習ArkTS編程

3.2 繼承與多態

class CollegeStudent extends Student {major: string;constructor(name: string, id: string, major: string) {super(name, id);this.major = major;}// 方法重寫study(): void {console.log(`${this.name}主修${this.major}`);}
}const stu2 = new CollegeStudent("王芳", "S2023002", "計算機科學");
stu2.study();  // 輸出:王芳主修計算機科學

類關系圖示

Student
+String name
+String id
+study()
CollegeStudent
+String major
+study()

第四部分:ArkTS UI開發

4.1 聲明式UI入門

組件三要素

@Entry
@Component
struct WelcomePage {// 1. 狀態變量@State counter: number = 0;// 2. 構建方法build() {// 3. UI描述Column() {Text(`點擊次數:${this.counter}`).fontSize(24).fontColor(Color.Blue)Button("點我增加").onClick(() => {this.counter++;})}.width('100%').padding(20)}
}

布局屬性速記

屬性說明示例
.width()寬度設置.width('50%')
.height()高度設置.height(200)
.margin()外邊距.margin({top:10})
.padding()內邊距.padding(20)
.border()邊框.border({width:1})

4.2 常用組件庫

基礎組件三劍客

Column() { // 垂直布局Text("用戶信息").fontSize(20)TextInput().placeholder("請輸入姓名").onChange(text => {console.log(text);})Button("提交").onClick(() => {// 處理點擊事件})
}

條件渲染示例

@State isLogged: boolean = false;build() {Column() {if (this.isLogged) {Text("歡迎回來!")} else {Button("立即登錄")}}
}

第五部分:實戰訓練

5.1 課堂練習:個人名片組件

@Entry
@Component
struct ProfileCard {@State name: string = "張三";@State age: number = 20;@State isStudent: boolean = true;build() {Column() {Text("個人名片").fontSize(24).fontWeight(FontWeight.Bold)Divider()Row() {Text("姓名:")Text(this.name)}Row() {Text("年齡:")Text(this.age.toString())}Button(this.isStudent ? "學生" : "非學生").onClick(() => {this.isStudent = !this.isStudent;})}.padding(20)}
}

5.2 作業:計算器原型

需求說明

  • 實現加減乘除基礎運算
  • 顯示計算歷史記錄
  • 支持清零功能

核心代碼提示

@State result: number = 0;
@State history: string[] = [];build() {Column() {Text(`當前結果:${this.result}`)Row() {Button("+1").onClick(() => this.calculate('+', 1))Button("-1").onClick(() => this.calculate('-', 1))Button("×2").onClick(() => this.calculate('*', 2))Button("÷2").onClick(() => this.calculate('/', 2))}ForEach(this.history, item => {Text(item)})}
}private calculate(op: string, num: number) {// 實現計算邏輯
}

1. 課堂速查表

  • [ArkTS基礎語法速查表.pdf]
  • [DevEco Studio快捷鍵指南.png]

2. 開發資源導航

  • 官方文檔:https://developer.harmonyos.com
  • 代碼示例庫:https://gitee.com/openharmony/applications_app_samples

3. 常見問題錦囊

Q1:為什么修改了變量但界面不更新?  
A:確保使用@State裝飾器,且通過=賦值觸發更新  Q2:如何調試ArkTS程序?  
- 使用console.log()輸出日志  
- 在DevEco Studio中使用斷點調試  Q3:遇到類型錯誤怎么辦?  
- 檢查變量類型聲明  
- 使用類型斷言:value as string  

課程進度建議

課時內容重點
1環境搭建與基礎語法變量/函數/流程控制
2面向對象編程類/繼承/接口
3UI開發基礎聲明式語法/組件通信
4綜合項目實踐狀態管理/組件化開發

import { Student } from '../common/Student';@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column(){Button("數字類型").onClick(()=>{let n1: number = 10let n2: number = 43.5let n3 = n1+n2console.log("ken",n3)let b1: number = 0o17//八進制15let b2: number = 0x17//十六進制23let b3: number = 0b11//二進制3console.log("ken",b1,b2,b3)}).height('10%').width('50%')Button("計算結果").onClick(()=>{let result = 10 + 5 * 3;console.log("ken",result)}).height('10%').width('50%')Button("函數測試").onClick(()=>{console.log("ken",sayHello("張三"))console.log("ken",add(1,2))createUser()})Button("對象測試").onClick(()=>{let stu = new Student("xxx","18")stu.study("ken"+"鴻蒙開發")}).height('10%').width('50%')}}
}
// 1. 基礎函數
function add(a: number, b: number): number {return a + b;
}// 2. 箭頭函數(推薦)
const sayHello = (name: string): string => `你好,${name}`;// 3. 默認參數
function createUser(name: string = "yx", age: number =18) {console.log("ken",name + age)// 函數體
}

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

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

相關文章

【YashanDB認證】yashandb23.3.1 個人版單機部署安裝實踐

YCA報名鏈接如下: YashanDB|崖山數據庫系統YashanDB學習中心-YCA認證詳情 目前免費 主要參考文檔&#xff1a; 單機&#xff08;主備&#xff09;部署 | YashanDB Doc 另外還參考摩天輪文章&#xff1a; YashanDB 23.2.9.101 企業版安裝步驟搶先看&#xff01; - 墨天輪 …

【藍橋杯】每天一題,理解邏輯(3/90)【Leetcode 快樂數】

閑話系列&#xff1a;每日一題&#xff0c;禿頭有我&#xff0c;Hello&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;,我是IF‘Maxue&#xff0c;歡迎大佬們來參觀我寫的藍橋杯系列&#xff0c;我好久沒有更新博客了&#xff0c;因為up豬我寒假用自己的勞動換了…

爬蟲Incapsula reese84加密案例:Etihad航空

聲明: 該文章為學習使用,嚴禁用于商業用途和非法用途,違者后果自負,由此產生的一切后果均與作者無關 一、找出需要加密的參數 1.js運行 atob(‘aHR0cHM6Ly93d3cuZXRpaGFkLmNvbS96aC1jbi8=’) 拿到網址,F12打開調試工具,隨便搜索航班,切換到network搜索一個時間點可以找…

緩存雪崩 緩存擊穿 緩存穿透

1. redis使用場景-緩存-緩存穿透 在實際開發中&#xff0c;Redis 被廣泛應用于緩存&#xff0c;以提高系統性能和響應速度。然而&#xff0c;在使用緩存時&#xff0c;需要注意一些問題&#xff0c;其中 緩存穿透 是一個常見且需要重點關注的場景。 什么是緩存穿透 ● 緩存穿…

【YOLOv12改進trick】多尺度大核注意力機制MLKA模塊引入YOLOv12,實現多尺度目標檢測漲點,含創新點Python代碼,方便發論文

??改進模塊??:多尺度大核注意力機制(MLKA) ??解決問題??:MLKA模塊結合多尺度、門控機制和空間注意力,顯著增強卷積網絡的模型表示能力。 ??改進優勢??:超分辨的MLKA模塊對小目標和模糊目標漲點很明顯 ??適用場景??:小目標檢測、模糊目標檢測等 ??思路…

better-sqlite3之exec方法

在 better-sqlite3 中&#xff0c;.exec() 方法用于執行包含多個 SQL 語句的字符串。與預編譯語句相比&#xff0c;這種方法性能較差且安全性較低&#xff0c;但有時它是必要的&#xff0c;特別是當你需要從外部文件&#xff08;如 SQL 腳本&#xff09;中執行多個 SQL 語句時。…

電路基礎:【1】PN結二極管制作電橋點亮LED燈

第一章&#xff1a;PN結二極管制作電橋點亮LED燈 文章目錄 第一章&#xff1a;PN結二極管制作電橋點亮LED燈前言一、電路原理二、電路圖與元器件1.電路圖 做實驗總結 前言 在本章中&#xff0c;我們將探討如何通過PN結二極管制作電橋電路&#xff0c;并利用該電路點亮LED燈。L…

XHR請求解密:抓取動態生成數據的方法

在如今動態頁面大行其道的時代&#xff0c;傳統的靜態頁面爬蟲已無法滿足數據采集需求。尤其是在目標網站通過XHR&#xff08;XMLHttpRequest&#xff09;動態加載數據的情況下&#xff0c;如何精準解密XHR請求、捕獲動態生成的數據成為關鍵技術難題。本文將深入剖析XHR請求解密…

機器學習數學基礎:42.AMOS 結構方程模型(SEM)分析的系統流程

該流程圖完整呈現了 AMOS 結構方程模型&#xff08;SEM&#xff09;分析的系統流程&#xff0c;具體步驟及內涵如下&#xff1a; 1. 模型設定 基于理論基礎或研究假設&#xff0c;構建結構方程模型的初始框架&#xff0c;明確潛變量與顯變量的關系、測量模型&#xff08;因子…

以太網通訊

接口開發筆記-WebApi-CSDN博客 以太網常用通訊協議 1、modbus tcp using EasyModbus; using System;class Program {static void Main(string[] args){// 創建Modbus客戶端實例ModbusClient modbusClient new ModbusClient("192.168.1.100"); // IP地址modbusCli…

Arcgis中添加腳本工具箱

文章目錄 準備資料1、打開arcmap2、找到目錄窗口3、復制粘貼工具箱的路徑4、添加或者確認python腳本路徑準備資料 (1)工具箱 (2)python腳本 1、打開arcmap 2、找到目錄窗口 3、復制粘貼工具箱的路徑 4、添加或者確認python腳本路徑 腳本上右鍵屬性(注意:腳本內容和路徑…

TDengine SQL查詢語法

簡介 TDengine 中的查詢 SQL 基本遵循 MYSQL 的查詢語法&#xff0c;大部分查詢都是通過超級表按時間維度進行的各種查詢。 TDengine 時序數據庫以時間為主索引列進行數據組織排序及存儲&#xff0c;同時按存儲塊做了預計算&#xff0c;所以在無普通列過濾的 SQL 查詢語句中聚…

Apache nifi demo 實驗

Apache nifi 是個數據流系統&#xff0c;可以通過配置 自定義的流程來實現數據的轉換。 比如可以配置一個流程&#xff0c;讀取數據庫里的數據&#xff0c;再轉換&#xff0c;最后保存到本地文件。 這樣可以來實現一些數據轉換的操作&#xff0c;而不用特地編寫程序來導入導出。…

javascript一些原生方法記錄

Element.scrollIntoView() Element 接口的 scrollIntoView() 方法會滾動元素的父容器&#xff0c;使被調用 scrollIntoView() 的元素對用戶可見。 structuredClone() 方法 Window 接口的 structuredClone() 方法使用結構化克隆算法將給定的值進行深拷貝。

記一次ScopeSentry搭建

介紹 Scope Sentry是一款具有資產測繪、子域名枚舉、信息泄露檢測、漏洞掃描、目錄掃描、子域名接管、爬蟲、頁面監控功能的工具&#xff0c;通過構建多個節點&#xff0c;自由選擇節點運行掃描任務。當出現新漏洞時可以快速排查關注資產是否存在相關組件。 目前功能 插件系…

Spring提供的SPEL表達式

SPEL 1. 概述 SpEL是Spring框架中用于表達式語言的一種方式。它類似于其他編程語言中的表達式語言&#xff0c;用于在運行時計算值或執行特定任務。 SpEL提供了一種簡單且強大的方式來訪問和操作對象的屬性、調用對象的方法&#xff0c;以及實現運算、條件判斷等操作。它可以…

【Azure 架構師學習筆記】- Azure Databricks (14) -- 搭建Medallion Architecture part 2

本文屬于【Azure 架構師學習筆記】系列。 本文屬于【Azure Databricks】系列。 接上文 【Azure 架構師學習筆記】- Azure Databricks (13) – 搭建Medallion Architecture part 1 前言 上文搭建了ADB 與外部的交互部分&#xff0c;本篇搭建ADB 內部配置來滿足medallion 架構。…

vulnhub靶場之【digitalworld.local系列】的torment靶機

前言 靶機&#xff1a;digitalworld.local-torment&#xff0c;IP地址為192.168.10.12 攻擊&#xff1a;kali&#xff0c;IP地址為192.168.10.6 kali采用VMware虛擬機&#xff0c;靶機選擇使用VMware打開文件&#xff0c;都選擇橋接網絡 這里官方給的有兩種方式&#xff0c…

docker-compose部署mongodb副本集集群

生成密鑰文件 ? openssl rand -base64 756 > mongodb.key chmod 400 mongodb.key # 權限必須為400?:ml-citation{ref="4" data="citationList"} chown 999:999 mongodb.key # MongoDB容器用戶ID為999?:ml-citation{ref="4" data="…

k8s v1.28.15部署(kubeadm方式)

k8s部署&#xff08;kubeadm方式&#xff09; 部署環境及版本 系統版本&#xff1a;CentOS Linux release 7.9.2009 k8s版本&#xff1a;v1.28.15 docker版本&#xff1a;26.1.4 containerd版本&#xff1a;1.6.33 calico版本&#xff1a;v3.25.0準備 主機ip主機名角色配置1…