コードの品質と保守性を高めるため、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);