2.1 eTS物种起源 原创 精华
2.1.1 JavaScript
JavaScript (简称“JS”) 是一种轻量级解释型的编程语言(代码不进行预编译)。 JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。
JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。JavaScript也可以用于其他场合,如服务器端编程(Node.js)。
这里提供一个简单的Java代码和JavaScript代码示例对比,一个经典的新闻类。
Java代码:
使用IDEA构建了一个基本的SpringBoot项目,[源码见:https://gitee.com/cloudev/harmonyos3/tree/master/2.1/Java/Demo]
先建立一个News的瘦实体类News.java:
(\2.1\Java\Demo\src\main\java\com\example\demo\News.java)
package com.example.demo;
public class News {
/**
* 私有变量声明
*/
private String title;// 新闻标题
private String content;// 新闻内容
/**
* 构造函数
* @param title
* @param content
*/
public News(String title, String content) {
this.title = title;
this.content = content;
}
/**
* Getter、Setter
* @return
*/
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
然后在入口类DemoApplication.java中调用:
(\2.1\Java\Demo\src\main\java\com\example\demo\DemoApplication.java)
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
News news = new News("HarmonyOS 3.0什么时候发布", "");
news.setContent("据华为官方的计划,会在2022年7-9月,正式发布HarmonyOS 3.0,到时候就是ArkUI eTS大放异彩的时机了,所谓“好饭不怕晚”。");
System.out.print(news.getTitle() + ":" + news.getContent());
}
}
JavaScript代码:
源码见:[https://gitee.com/cloudev/harmonyos3/tree/master/2.1/Js/Hello]
先建立一个News的类News.js,无需声明私有变量title和content:
(\2.1\Js\Hello\entry\src\main\js\default\model\News.js)
export class News {
/**
* 构造函数
* @param title
* @param content
*/
constructor(title, content) {
this.title = title;
this.content = content;
}
/**
* Getter、Setter
*/
getTitle(){
return this.title;
}
setTitle(title) {
this.title = title;
}
getContent(){
return this.content;
}
setContent(content) {
this.content = content;
}
}
在index.js中调用该类的方法:
(\2.1\Js\Hello\entry\src\main\js\default\pages\index\index.js)
import {News} from '../../model/News.js'
export default {
data: {
title: "",
content: ""
},
onInit() {
let news = new News("HarmonyOS 3.0什么时候发布", "");
news.setContent("据华为官方的计划,会在2022年7-9月,正式发布HarmonyOS 3.0,到时候就是ArkUI eTS大放异彩的时机了,所谓“好饭不怕晚”。");
console.log(news.getTitle() + ":" + news.getContent());
this.title = news.getTitle()
}
}
2.1.2 TypeScript
TypeScript(简称“TS”) 是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,任何现有的JavaScript程序可以运行在TypeScript环境中。 实际上,TypeScript 是 JavaScript 的一个超集,所以TypeScript是对JavaScript兼容的。
TypeScript 起源于使用JavaScript开发的大型项目 。由于JavaScript语言本身的局限性,难以胜任和维护大型项目开发。因此微软开发了TypeScript ,使得其能够胜任开发大型项目。
借上述Java项目,建立一个News.ts文件,代码如下:
(\2.1\Java\Demo\src\main\java\com\example\demo\News.ts)
export class News {
/**
* 私有变量声明
* @private
*/
private title: string;
private content: string;
/**
* 构造函数
* @param title
* @param content
*/
constructor(title:string, content:string) {
this.title = title;
this.content = content;
}
getTitle(){
return this.title;
}
setTitle(title: string): void{
this.title = title;
}
getContent() {
return this.content;
}
setContent(content: string): void {
this.content = content;
}
}
2.1.3 eTS
方舟开发框架“eTS”是基于TS扩展的声明式开发范式的一套开发极简、高性能、跨设备应用设计研发的UI开发框架,支持开发者高效的构建跨设备应用UI界面。
使用基于TS扩展的声明式开发范式的方舟开发框架,采用更接近自然语义的编程方式,让开发者可以直观地描述UI界面,不必关心框架如何实现UI绘制和渲染,实现极简高效开发。从组件、动效和状态管理三个维度来提供UI能力,还提供了系统能力接口,实现系统能力的极简调用。
方舟开发框架定义了一些具有特殊含义的装饰器,用于装饰类、结构、方法和变量。例如@Entry、@Component、@Preview、@Builder、@Extend、@State、@Prop、@Link等,后面章节我们会详细讲解这些装饰器的用法。
先建立一个News的类News.ets,代码和上面的News.ts一模一样:
源码见:[https://gitee.com/cloudev/harmonyos3/tree/master/2.1/ArkUI/Hello]
(\2.1\ArkUI\Hello\entry\src\main\ets\default\model\News.ets)
export class News {
/**
* 私有变量声明
*/
private title: string;
private content: string;
/**
* 构造函数
* @param title
* @param content
*/
constructor(title: string, content: string) {
this.title = title;
this.content = content;
}
getTitle(){
return this.title;
}
setTitle(title: string): void{
this.title = title;
}
getContent() {
return this.content;
}
setContent(content: string): void {
this.content = content;
}
}
在页面中调用:
(\2.1\ArkUI\Hello\entry\src\main\ets\default\pages\index.ets)
import {News} from '../model/News.ets'
@Entry
@Component
struct Index {
private title:string = ''
private content:string = ''
aboutToAppear() {
let news = new News("HarmonyOS 3.0什么时候发布", "")
news.setContent("据华为官方的计划,会在2022年7-9月,正式发布HarmonyOS 3.0,到时候就是ArkUI eTS大放异彩的时机了,所谓“好饭不怕晚”。")
console.log(news.getTitle() + ":" + news.getContent())
this.title = news.getTitle()
this.content = news.getContent()
}
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Text(this.title)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Text(this.content)
.fontSize(20)
}.width('100%').height('100%')
}
}
JS、TS和eTS的关系,如下图所示:
所以,熟悉JS开发或TS开发的同学,都能很快上手eTS开发。
有一位网友留言,说自己是做Java后端开发的,不知道学鸿蒙开发难不难。我想这也是很多做Java后端开发的同学关心的问题,写作本篇也是为了打消大家的顾虑。首先,JS(JavaScript)的语言高度类似Java,而TS(TypeScipt)是JS的超集,完全兼容JS,而eTS是华为在TS基础上做的进一步扩展,所以,做Java开发后端的同学完全可以轻松上手eTS ArkUI的鸿蒙开发,不要被内心的假想敌打败,行动起来吧,跟着教程学习,相信大家会轻松掌握!
2.1.4 关于仓颉、欧拉
众所周知,华为这几年遭遇了欧美的科技垄断和打压。那么华为会倒下吗?不会!不仅不会,还会越来越强大!
鸿蒙系统不仅已经用在了各类智能设备中,而且搭载总量超过了3亿台。 鸿蒙系统很快在谷歌安卓与苹果ios这两座大山的夹缝中拿到了16%以上的市场份额, 这个表现要远超曾经的谷歌安卓与苹果ios,这意味着鸿蒙已经安全度过了新兴操作系统的“生死线”。余承东曾官宣表态:“鸿蒙,成了!”
鸿蒙系统的成功问世,只是华为战略布局中的一环。其实, 早在二十多年前,任正非就曾去日本请教过日本经营之圣稻盛和夫。稻盛和夫曾对任正非说:“华为现阶段虽然发展得不错,但核心技术大多来自欧美,如果有天他们不授权了,你该怎么办?”
正所谓一语惊醒梦中人 。任正非回到公司后就定下了华为未来的发展战略:不惜代价投入重金研发,要将核心技术掌握在自己手里。于是,就有了著名的华为备胎计划。
硬件的心脏是芯片。而芯片方面,华为海思承载华为先进芯片的设计。华为海思麒麟芯片已广泛用于华为手机、平板电脑等设备中。“鸿蒙开发之南拳北腿”的南拳篇中,我会推出基于海思芯片设计的高性能物联网开发板系列教程。
操作系统方面,华为除了推出面向物联网的鸿蒙操作系统,还在服务器操作系统领域推出了华为欧拉。 华为对欧拉的定义是数字基础设施的生态底座。 这类数字基础设施指的是电力、能源、交通、港口等关键的基础设施,涉及到许多民众生活的方方面面。欧拉将在这些基础设施当中形成强大的系统运行能力。凭借支持多个芯片架构,将来会与鸿蒙实现架构互联互通。
开发语言方面,除了当前的Java UI、JS UI和eTS ArkUI,华为自研的编程语言“仓颉”已经在2022年4月份正式开启了内测。 目前已经有部分开发者拿到源代码。 此前, 不少人猜测“仓颉”是中文编程。根据参与内测的开发者用户表示,华为自研的仓颉编程语言最大的特点在于简单易上手,但并非是中文编程。这个其实也容易理解, 电脑指令输入英文的效率要比汉字效率高很多,因为汉字存在多音字,这种特性导致在输入命令的时候会容易出错,并且执行效率也慢。仓颉语言可以帮助鸿蒙和欧拉实现生态上的高度互通,最大程度的减少其割裂感,提升开发者的效率 。
作为一门新的编程语言,仓颉如果要获得众多开发者的接受,那么大概率不会设置太高学习曲线。当初,微软为了让众多开发者接受“.NET”,也推出了“C#”,由于Java一直以来都是编程语言的常青树,所以“C#”的语法习惯高度类似Java。截止2022年4月,全球编程语言前三名是Python、C和Java。Python作为当前开发AI人工智能的最佳语言,由于在科学计算等方面有大量类库,而受追捧。但是,如果选择作为后端主要语言,我觉得不是最佳选择,因为作为一种解释性语言,Python在大型项目的高并发等方面并没有优势。我更情愿使用Java的Spring Cloud架构作为后端项目的技术选型,如果有用到推荐算法或其它一些AI方面的功能,使用Python提供API给Java项目调用。在无服务器服务Severless中,使用Python写相应接口方法也是一个不错的选择。至于说C语言,更多用在面向硬件方面的编程,我们在鸿蒙智能硬件开发系列课程(南拳篇)中会介绍C/C++的开发技能。如果,留意一下华为官方提供的很多技术文档及SDK示范源码,会发现其中Java方面的是最完善的。这个不难理解,因为企业级开发中,采用Java作为后端选型的用户是最多的,同时,华为的开发工程师中也有相当一部分是擅长Java技术栈的。那么,我大胆猜测,仓颉编程语言会在习惯上,对Java技术栈的开发者学习曲线较低,或者非常相似。
前几天,有个网友给我留言,担心仓颉会取代eTS。我觉得这个担心倒大可不必。我个人认为,eTS ArkUI作为华为主推的鸿蒙开发新兴语言,目前尚处于Beta阶段,华为不应该拿出另一个语言与它竞争,“自家产品打架”这个毫无意义。我比较认同另一个网友的观点,他在给我的留言中表达“仓颉用于鸿蒙PA后端”的观点。eTS ArkUI和仓颉应该是前后端组合拳,这样配合更加合理。由于目前仓颉的更多细节尚未透露,大家对它有什么想法,可以在下面留言讨论。
综上,我将华为技术战略布局绘图如下:
上述表达仅为笔者个人观点,非华为官宣。如有不同观点,欢迎大家踊跃发言。
ArkUI内置了许多核心的UI控件和动效,如图片、列表、网格、属性动画、转场动画等,加持自研语言运行时深度优化,这些都可以在HarmonyOS设备上达到移动原生应用一样的性能体验。