当前位置: 首页 > news >正文

鸿蒙全栈开发 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);  // 10
    console.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 = 10
        let n2: number = 43.5
        let n3 = n1+n2
        console.log("ken",n3)
        let b1: number = 0o17//八进制15
        let b2: number = 0x17//十六进制23
        let b3: number = 0b11//二进制3

        console.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)

  // 函数体
}

相关文章:

  • PromotionNotice对象获取异常记录
  • 十二、OSG学习笔记-Control
  • 手游ASO优化:2025年核心策略与未来趋势
  • DropDown的使用总结
  • C/C++蓝桥杯算法真题打卡(Day1)
  • 如何面向DeepSeek编程,打造游戏开发工具集,提升工作效率
  • 缓存雪崩 缓存击穿 缓存穿透
  • 综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目
  • Django 中,Form 和 ModelForm的用法和区别
  • 在虚拟机上安装Hadoop
  • 基于单片机的速度里程表设计(论文+源码)
  • vue3 组合式API:插槽
  • 【机器学习chp11】聚类(K均值+高斯混合模型+层次聚类+基于密度的聚类DBSCAN+基于图的聚类+聚类的性能评价指标)
  • C语言程序设计第一章习题
  • Linux - 线程控制
  • CES Asia 2025:AR/VR/XR论坛峰会备受瞩目
  • Python的Pandas和matplotlib库:让数据可视化贼简单
  • Scala:解构声明(用例子通俗易懂)
  • Leetcode2848:与车相交的点
  • 前端图片加载错误原因分析
  • 成功英语网站/搜索引擎平台排名
  • wordpress上卖什么/奉化网站关键词优化费用
  • 出口网站有哪些/seo百度网站排名软件
  • 国务院 网站建设发展指引/企业网站建设的作用
  • 没公司怎么做网站/数据分析师一般一个月多少钱
  • 做汽车新闻哪个网站好/aso优化什么意思是