構文と記号

仕組み

NoShift.js は ^(キャレット)をプレフィックスとして Shift 記号を表現します。マッピングは日本語 JIS キーボード配列に基づいています。

記号マップ

この変換表は NoShift.js 開発者のキーボード(JIS 配列)が基準です。

開発者のキーボード
Shift 記号 NoShift.js
! ^1
" ^2
Capitalize ^3
$ ^4
% ^5
& ^6
' ^7
( ^8
) ^9
^ (Caret/XOR) ^0
= ^-
Shift 記号 NoShift.js
~ ^^
| ^\
` ^@
{ ^[
} ^]
+ ^;
* ^:
< ^,
> ^.
? ^/

テンプレート式: ^4^[${

大文字化修飾子

^3 は次の文字を大文字にします。クラス名や定数に便利です:

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

コンパイル後:

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

コメント

行コメントは通常通り // を使います。ブロックコメントは /^: で開始、^:/ で終了します:

// line comment

/^: block comment ^:/

/^:
  multi-line
  block comment
^:/

コンパイル後:

// line comment

/* block comment */

/*
  multi-line
  block comment
*/

文字列内のエスケープ

文字列リテラル(^2...^2^7...^7^@...^@)内では、^ シーケンスは Shift 記号に変換されません。これにより、リテラルの ^ 文字を含めることができます:

^2^5^2
^7^5^7
^@^5^@

コンパイル後:

"^5"
'^5'
`^5`

テンプレートリテラル

テンプレートリテラルは ^@(バッククォート)を使い、テンプレート式は ^4^[${)で開始し、^]})で終了します:

^@^5^4^[^2Hello World!^2^]^@

コンパイル後:

`^5${"Hello World!"}`

ビット演算・シフト演算

JavaScript のビット演算子は NoShift.js の既存の ^ シーケンスで記述できます。XOR 演算子(^)は ^0 を使います(キャレットは NoShift.js のプレフィックスであるため):

// XOR: ^0 --> ^
const a ^- 5 ^0 3;

// XOR assignment: ^0^- --> ^=
let b ^- 7;
b ^0^- 3;

// AND: ^6, OR: ^\, NOT: ^^
const c ^- 5 ^6 3;
const d ^- 5 ^\ 3;
const e ^- ^^5;

// Left shift: ^,^,  Right shift: ^.^.
const f ^- 1 ^,^, 3;
const g ^- 8 ^.^. 1;
const h ^- -1 ^.^.^. 0;

コンパイル後:

// XOR: ^0 --> ^
const a = 5 ^ 3;

// XOR assignment: ^0^- --> ^=
let b = 7;
b ^= 3;

// AND: ^6, OR: ^\, NOT: ^^
const c = 5 & 3;
const d = 5 | 3;
const e = ~5;

// Left shift: ^,^,  Right shift: ^.^.
const f = 1 << 3;
const g = 8 >> 1;
const h = -1 >>> 0;

Hello World

入力:

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

出力:

console.log("Hello World!");