大文字化修飾子 (^3)

^3 修飾子は次の文字を大文字にします。NoShift.js は Shift キーを使わずにコードを書くための言語なので、大文字はこの方法で生成します。

基本的な使い方

大文字にしたい文字の直前に ^3 を置きます。^3 の直後の1文字だけが大文字になります:

const name ^- ^2^3hello^2;
// ^3h → H,残りはそのまま

コンパイル後:

const name = "Hello";

複数の大文字化

複数の文字を大文字化する場合(camelCase や PascalCase の識別子など)、各文字の前に ^3 を繰り返します:

const my^3var ^- ^2^3hello ^3world^2;
console.log^8my^3var^9;

コンパイル後:

const myVar = "Hello World";
console.log(myVar);

クラス名

JavaScript のクラス名は慣習的に PascalCase です。大文字にする各文字の前に ^3 を使います:

class ^3animal ^[
  constructor^8name^9 ^[
    this.name ^- name;
  ^]
^]

class ^3my^3app extends ^3animal ^[
  constructor^8^9 ^[
    super^8^2^3app^2^9;
  ^]
^]

コンパイル後:

class Animal {
  constructor(name) {
    this.name = name;
  }
}

class MyApp extends Animal {
  constructor() {
    super("App");
  }
}

メソッドとプロパティ

camelCase のメソッド名は、大文字の境界ごとに ^3 を使います:

const obj ^- ^[
  get^3name^8^9 ^[
    return this.name;
  ^],
  set^3value^8v^9 ^[
    this.value ^- v;
  ^],
^];

コンパイル後:

const obj = {
  getName() {
    return this.name;
  },
  setValue(v) {
    this.value = v;
  },
};

定数 (UPPER_SNAKE_CASE)

全て大文字の定数は、すべての文字を ^3 で大文字化します:

const ^3m^3a^3x^3c^3o^3u^3n^3t ^- 1024;
console.log^8^3m^3a^3x^3c^3o^3u^3n^3t^9;

コンパイル後:

const MAXCOUNT = 1024;
console.log(MAXCOUNT);

文字列内での使用

デフォルトでは、^3 は文字列リテラル(^2...^2^7...^7^@...^@)内でも動作します。つまり、Shift キーなしで文字列中に大文字テキストを生成できます:

console.log^8^2^3hello, ^3world!^2^9;
console.log^8^7^3yes^7^9;
console.log^8^@^3template ^3string^@^9;

コンパイル後:

console.log("Hello, World!");
console.log('Yes');
console.log(`Template String`);

文字列内での無効化

文字列内の ^3 をリテラルなキャレット + 文字として扱いたい場合は、nsjsconfig.jsoncapitalizeinstringsfalse に設定します:

{
  "compileroptions": {
    "capitalizeinstrings": false
  }
}

この設定の場合、文字列内の ^3 はそのまま出力されます:

console.log^8^2^3hello^2^9;

コンパイル後:

console.log("^3hello");

文字列内の大文字警告

warnuppercasecapitalizeinstrings が両方 true(デフォルト)の場合、コンパイラは文字列リテラル内の大文字も警告します。^3 が文字列内で使えるため、大文字を直接書くことは推奨されません:

console.log^8^2Hello World^2^9;

コンパイル時の警告例:

⚠ src/main.nsjs:1:18 - Uppercase letter 'H' found in string. Use ^3h instead.
⚠ src/main.nsjs:1:24 - Uppercase letter 'W' found in string. Use ^3w instead.

^3 を使って書き直すと:

console.log^8^2^3hello ^3world^2^9;

コメント内

^3 はコメント内では動作しません。コメントはそのまま出力されます:

// ^3this is a comment, ^3 does not capitalize
/^: ^3block comment, also literal ^:/

コンパイル後:

// ^3this is a comment, ^3 does not capitalize
/* ^3block comment, also literal */

関連する設定

nsjsconfig.json の2つの設定オプションが ^3 の動作に影響します:

Option Default Description
warnuppercase true true(デフォルト)の場合、^3 を使わずにソースコードに直接大文字を書くとコンパイラが警告します。
capitalizeinstrings true true(デフォルト)の場合、^3 は文字列リテラル内でも動作します。false に設定すると無効になります。