鸿蒙初体验

最近两天简单看了一下 HarmonyOS 应用开发文档,其实对于我这样的 "大龄程序员",已经很久没有对一款 UI 编程框架有这样的学习热情了,忍不住叨叨两句。

官方文档

一门全新技术的官方文档是中文,好感动。点一下隔壁 Android,中文文档一定是滞后的,每次得手动切回 English 确认一下。

目前 HarmonyOS 官网文档 是基于 API 9,Hormony Next 版本的文档需要华为授权账号才可以查看。

OpenHarmony 开发文档 是基于 API 10

就我观察到的,@Prop 在 API 9 的文档中不支持 Class,但我代码测试是支持的,在 API 10 中明确说明了支持 Class。另外,ArkTS 在 API 10 也有一定 "增强" 和 "限制" 。

这里建议优先学习 API 10 , 反正学了 API 9,回头还是要升级的嘛。

另外,官网下载的 DevEco 是无法调整编译版本到 API 10 的。你需要到 OpenHarmony 网站去下载 4.0 Release 版本的 IDE,目前最新 Build Verision 4.0.0.600。

如果你司是华为合作伙伴,应该没有这些问题,还有 VIP 版本 IDE,表示羡慕。

JS/TS/ArkTs ?

背景:我是零前端开发经验,并且一直厌恶 JavaScript 这种动态语言。

TypeScript 是在 JavaScript 的基础上通过添加类型定义扩展而来,ArkTS 在 TypeScript 的基础上进一步扩展,主要是限制了动态类型。动态类型一定会造成更多的运行时错误,浪费更多的运行时性能,对程序员的稳定性和性能完全没有好处。

从 API 10 开始,ArkTS 进一步强化了静态检查,包括强制使用静态类型,禁止运行时改变对象布局,限制运算符语义等等。从 TypeScript 到 ArkTS 的适配规则 这份文档里大概列举了几十条 ArkTS 对 TS 的限制。

肉眼可见,ArkTS 越来越像的是 Java,而不是 TS。所以不妨把 ArkTS 当做一门全新的语言来学习。

社区里也看到一些 Kotlin/Js 的曲线救国方案,qdsfdhvh/test-kmp-in-ohosbennyhuo/ktor-for-ohos ,还有传言华为自研的仓颉,可能 JS/TS 的学习优先级并没有那么高。

以上纯属尚无完整鸿蒙项目开发背景下的个人意见。

状态管理

状态管理,或者说 数据驱动 是声明式 UI 的核中核,这两天也是先上手学习了 ArkUI 的状态管理。

由于之前断断续续的看过一些 SwiftUI,他两状态管理的思路出奇的一致。

less 复制代码
struct FoodListScreen: View {
    @State private var editMode: EditMode = .inactive
    @AppStorage(.foodList) private var foodList = Food.examples
    @State var selectedFoodId = Set<Food.ID>()
    @State private var sheet: Sheet?
    
    var isEditMode: Bool { editMode.isEditing }
    
    var body: some View {
        VStack(alignment: .leading) {
            titleBar
            
            List($foodList, editActions: .all, selection: $selectedFoodId, rowContent: buildFoodRow)
                .listStyle(.plain)
                .background {
                    RoundedRectangle(cornerRadius: 10)
                        .fill(.groupBg2)
                        .ignoresSafeArea(.container, edges: .bottom)
                }
                .padding(.horizontal)
        }
        .background(.groupBg)
        .environment(.editMode, $editMode)
        .sheet(item: $sheet)
    }
}
scss 复制代码
@Component
struct ArticleList {
  @State simpleList: Array<number> = [1, 2, 3, 4, 5]

  build() {
    Column() {
      ForEach(this.simpleList, (item: string) => {
        ArticleSkeletonView()
          .margin({top: 20})
      })
    }
    .padding(20)
    .width('100%')
    .height('100%')
  }
}

ArkUI 也是标准的 MVVM 架构

可以先把 状态管理 捋一捋。在对状态管理有了基本认知之后,再去深入学习 ArkUI 的细枝末节。

吐槽环节

IDE 的智能提示不够完善,constructor() 目前只能手搓。

刚刚装上了 Copilot,这也不是问题了。

用了半天,Copilot 可能还不认识 ArkTs,时而提示出 JS 语法,时而提示出 SwitUI 语法,时而提示出 Compose,甚至还提示过 XML View 。

误把 string() 写成了 string,编译运行无问题,只是 UI 表现有问题,不知道 API 10 是否会增强这类的编译期检查。

API 10 中 ArkTS 对于语法特性的限制过于严格,例如运算符只能用于数值,取消对于数组的 for in 语法,不支持 with 语句等,其实还是可以通过编译期语法糖来实现的,这也是 Kotlin 大受欢迎的原因。

还没有实战写项目,暂时没有可以吐槽的了。

小意外

发现了一个目前为止还没在其他 UI 框架中看到过的小特性,ArkUI 支持 单复数的字符串匹配

plural.json 中配置:

perl 复制代码
{
    "plural":[
        {
            "name":"eat_apple",
            "value":[
                {
                    "quantity":"one",
                    "value":"%d apple"
                },
                {
                    "quantity":"other",
                    "value":"%d apples"
                }
            ]
        }
    ]
}

Text($r('app.plural.eat_apple', 5, 5))  => 5 apples

结束

暂时想不到什么可以分享的了,后续学习过程中,想叨叨的时候再写了。

相关推荐
Σίσυφος19001 小时前
halcon 条形码、二维码识别、opencv识别
前端·数据库
学代码的小前端1 小时前
0基础学前端-----CSS DAY13
前端·css
MarkHD3 小时前
第十八天 WebView深度优化指南
华为·harmonyos
css趣多多3 小时前
案例自定义tabBar
前端
simplepeng3 小时前
我的天,我真是和androidx的字体加载杠上了
android
塞尔维亚大汉3 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI CSI】
harmonyos·领域驱动设计
别说我什么都不会4 小时前
鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
操作系统·harmonyos
姑苏洛言4 小时前
DeepSeek写微信转盘小程序需求文档,这不比产品经理强?
前端
林的快手4 小时前
CSS列表属性
前端·javascript·css·ajax·firefox·html5·safari
匹马夕阳5 小时前
ECharts极简入门
前端·信息可视化·echarts