鸿蒙NextにおけるArkTS構文への移行背景の概要

はじめに

ArkTSはTypeScript(TS)の基本的な構文スタイルを維持しつつ、静的チェックと解析を強化し、開発段階でより多くのエラーを検出することで、アプリケーションの安定性と実行性能を向上させます。本記事では、既存のTSコードをArkTSコードへ移行することの必要性について説明します。

アプリケーションの安定性

(1)動的型付け言語の課題

JavaScript(JS)のような動的型付け言語は開発者にとって高速なコード記述を可能にしますが、実行時に予期しないエラーを引き起こす可能性があります。例えばundefinedの値を確認せずにアクセスすると、アプリがクラッシュする可能性があります。

(2)TypeScriptの限界

TypeScriptは型注釈によってコンパイル時にエラーを検出できますが、変数の型宣言を強制しないため、コンパイル時のチェック機能が制限されます。

(3)ArkTSによる改善

ArkTSでは静的型付けを必須とし、クラスのプロパティは宣言時またはコンストラクタ内で明示的に初期化する必要があります。これにより実行時エラーを削減できます。以下に例を示します。

  1. TSの非厳格モードでのクラス定義(問題あり)
class Person {
    name: string; // undefined
    setName(n: string): void {
        this.name = n;
    }
    getName(): string {
        return this.name;
    }
}
let buddy = new Person();
buddy.getName().length; // 実行時例外: name is undefined
  1. ArkTSによる改善後のクラス定義(より安全)
class Person {
    name: string = '';
    setName(n: string): void {
        this.name = n;
    }
    getName(): string {
        return this.name;
    }
}
let buddy = new Person();
buddy.getName().length; // 0、実行時例外なし

パフォーマンスの向上

(1)動的型付け言語の実行時チェック

動的型付け言語では正確性を保証するために実行時にオブジェクトの型をチェックする必要があります。たとえばJSにおいてundefinedプロパティにアクセスする際にはその型を検証します。これは最適化を可能にするものの、パフォーマンスに影響を与えます。TSからJSへコンパイルされた場合にも同様の問題が発生します。

(2)ArkTSの解決策

ArkTSは静的型チェックを有効にし、JSではなく方舟バイトコード形式にコンパイルされるため、実行速度が速く、最適化も容易になります。

(3)Null Safety機能

  1. 関数例と問題点
function notify(who: string, what: string) {
    console.log(`Dear ${who}, a message for you: ${what}`);
}
notify('Jack', 'You look great today');
notify(null, undefined); // 実行は継続されるが、エンジンは追加の型チェックを行う
  1. ArkTSにおける厳格なチェック ArkTSではnullに対する厳格なチェックが実施され、nullstring型として有効ではないため、型に一致しないコードはコンパイルエラーとなります。前述のnotify(null, undefined)はArkTSではコンパイルエラーとなります。

.etsファイルとの互換性

(1)構文ルールの変更

API version 10以前ではArkTS(.etsファイル)は標準的なTS構文を使用していました。API version 10 Release以降、ArkTSの構文規則が明確に定義され、SDKにコンパイル時の構文チェック機能が追加されました。

(2)コンパイル戦略

  1. 標準モード(compatibleSdkVersion >= 10):ArkTS構文に違反する.etsファイルのコードはプロジェクトのコンパイル失敗を引き起こすため、完全な適合が必要です。
  2. 互換モード(compatibleSdkVersion < 10):構文違反は警告として表示されますが、プロジェクトは正常にコンパイル可能です。ただし、標準モードでは適合が必要です。

方舟ランタイムとTS/JSの関係

(1)アプリケーション環境の制約

  1. 厳格モード(use strict)の強制適用。
  2. eval()の禁止。
  3. with() {}の禁止。
  4. 文字列による関数生成の禁止。

(2)構文の違い

標準的なTS/JSではJSON数値形式において小数点の後に数字が必要ですが、方舟ランタイムでは2.e3のような指数表記も許容されます。

以上のように、ArkTSは複数の面で改善と機能を提供しており、TSよりも優れた利点を持っています。そのため、鸿蒙Next開発においてArkTS構文への移行はアプリケーション品質と開発効率の両面で重要です。

タグ: ArkTS TypeScript パフォーマンス 静的型付け Null Safety

6月13日 20:58 投稿