天天看点

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的关系,如下图所示:

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和仓颉应该是前后端组合拳,这样配合更加合理。由于目前仓颉的更多细节尚未透露,大家对它有什么想法,可以在下面留言讨论。

综上,我将华为技术战略布局绘图如下:

eTS物种起源

上述表达仅为笔者个人观点,非华为官宣。如有不同观点,欢迎大家踊跃发言。

继续阅读