鸿蒙全栈开发 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.mzph.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…