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和倉颉應該是前後端組合拳,這樣配合更加合理。由于目前倉颉的更多細節尚未透露,大家對它有什麼想法,可以在下面留言讨論。
綜上,我将華為技術戰略布局繪圖如下:
上述表達僅為筆者個人觀點,非華為官宣。如有不同觀點,歡迎大家踴躍發言。