ArkTSコーディング規約の要点整理

コードの品質と保守性を高めるため、ArkTSにおける推奨されるコーディングスタイルと実装ルールを体系的にまとめます。

命名規則

識別子は意図が明確に伝わる英単語を使用し、曖昧な省略や単一文字は避ける。クラス・列挙型・名前空間はPascalCase、変数・関数・引数はcamelCaseで統一する。

// クラス定義
class UserProfile {
  private displayName: string;
  constructor(name: string) {
    this.displayName = name;
  }
}

// 列挙型
enum UserRole {
  ADMIN = 0,
  MEMBER = 1
}

// 定数
const MAX_RETRY_LIMIT = 5;

// 関数と変数
function validateInput(inputText: string): boolean {
  let isValidFormat = /^[\w\-]+$/.test(inputText);
  return isValidFormat;
}

フォーマットと構文

インデントにはスペース2つを使用し、制御構文(if/for/while)のブロックは常に中括弧で囲む。switch-caseでは各caseを2スペースインデントし、case内コードはさらに2スペース追加。

if (user.isActive) {
  processRequest(user.id);
} else {
  logInactiveUser(user.id);
}

switch (status.code) {
  case 200: {
    handleSuccess();
    break;
  }
  case 404: {
    showNotFound();
    break;
  }
  default:
    handleError();
}

式と宣言の記述

複数変数の宣言は1行1変数とし、演算子は行末に配置して改行する。文字列リテラルはシングルクォートで統一。オブジェクトリテラルのプロパティが4つ以上なら全項目を改行して記述。

let retryCount = 0;
let lastAttempt = Date.now();

if (response.status === 429 ||
    response.headers.has('Retry-After')) {
  scheduleRetry();
}

const config = {
  timeout: 5000,
  retries: 3,
  headers: { 'Content-Type': 'application/json' },
  validateStatus: (status: number) => status < 500
};

安全な実装パターン

浮動小数点数はゼロを省略せず明示的に記述。NaN判定にはNumber.isNaN()を必ず使用。配列操作はmap/filterなどの高階関数を優先して利用。

// 浮動小数点
const ratio = 0.75;
const offset = -0.2;

// NaNチェック
if (Number.isNaN(parsedValue)) {
  throw new Error('Invalid number format');
}

// 配列変換
const prices = items.map(item => item.price * taxRate)
                   .filter(price => price > 0);

クラスと型の設計

クラスメンバーにはアクセス修飾子(private/public)を明示。配列型はT[]記法を採用。finallyブロック内ではreturnやthrowを禁止し、ESObject型の不用意な使用も避ける。

class DataProcessor {
  private buffer: string[] = [];
  
  public add(data: string): void {
    this.buffer.push(data);
  }
  
  public flush(): string[] {
    try {
      return [...this.buffer];
    } finally {
      this.buffer = []; // 副作用のみ許可
    }
  }
}

// 型安全なモジュール利用
import { DataModel, fetchData } from './api';
let result: DataModel[] = fetchData(queryParams);

タグ: ArkTS OpenHarmony TypeScript コーディング規約 静的解析

6月15日 22:13 投稿