Skip to content

Commit 17b0fd3

Browse files
docs
Co-Authored-By: takejohn <takejohn@takejohn.jp>
1 parent a0dc3fe commit 17b0fd3

File tree

11 files changed

+1524
-146
lines changed

11 files changed

+1524
-146
lines changed

docs/ja/api-examples.md

Lines changed: 0 additions & 49 deletions
This file was deleted.

docs/ja/guides/execution.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# 実行方法
2+
3+
まずは、AiScriptリポジトリをGitHubからダウンロードしてください。
4+
5+
```sh
6+
# 1. リポジトリをクローン(ダウンロード)
7+
git clone https://github.com/aiscript-dev/aiscript
8+
9+
# 2. AiScriptリポジトリのフォルダに入る
10+
cd aiscript
11+
12+
# 3. 依存関係のインストール
13+
npm i
14+
```
15+
16+
## 1. Playgroundから実行
17+
自分でホストする場合は、以下のコマンドを実行し表示されたリンクをブラウザで開きます。
18+
```sh
19+
# 1. 内臓のPlaygroundフォルダに入る
20+
cd playground
21+
22+
# 2. Playgroundをビルドする
23+
npm run build
24+
25+
# 3. Playgroundを起動する
26+
npm run serve
27+
```
28+
29+
PlaygroundはGitHubでもホストされています:\
30+
<https://aiscript-dev.github.io/aiscript/>
31+
32+
## 2. スクリプトファイルから実行
33+
ファイルの内容を解析して実行します。
34+
35+
プロジェクトルートに`main.ais`を作成し、以下の内容を記述しファイルに保存します。
36+
```aiscript
37+
<: "Hello world!"
38+
```
39+
40+
以下のコマンドを実行します。
41+
```sh
42+
npm run start
43+
```
44+
45+
## 3. スクリプトファイルを解析する (パーサーのデバッグ向け)
46+
ファイルの内容を解析してASTを表示することができます。
47+
主にパーサーのデバッグ向けで、インタプリタの実装状況に関わらずASTの内容を表示することができます。
48+
49+
プロジェクトルートに`main.ais`を作成し、以下の内容を記述しファイルに保存します。
50+
```aiscript
51+
<: "Hello world!"
52+
```
53+
54+
以下のコマンドを実行します。
55+
```sh
56+
npm run parse
57+
```
58+
59+
## 4. REPL上で実行
60+
コマンドライン上で対話的にコードを実行します。
61+
以下のコマンドを実行し、コードを入力します。
62+
63+
```sh
64+
npm run repl
65+
```

docs/ja/guides/get-started.md

Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
# はじめに
2+
3+
## AiScriptとは
4+
5+
AiScript(あいすくりぷと)は、JavaScript上で動作するプログラミング言語です。ホスト側で関数の実装を拡張することもでき、安全にユーザー作成のスクリプトを実行させることができます。
6+
7+
このドキュメントでは、既にある程度のプログラミングの知識があることを前提にしています。
8+
したがってAiScriptの構文、仕様などについてだけ書き、プログラミング自体についての説明は省きます。
9+
10+
参考:[リファレンス > 構文](../references/syntax.md)
11+
12+
## Hello, world!
13+
AiScriptでは、次のように書きます:
14+
```aiscript playground=true
15+
print("Hello, world!")
16+
```
17+
18+
`print( ~ )`は関数呼び出しです。カッコの前に呼び出す関数名を書き、カッコの中に引数を書きます。
19+
引数が複数あるときは`,`で区切って列挙します。
20+
関数についての詳細は後述します。
21+
22+
`"~"`は文字列リテラルです。`"`で囲ったものが文字列になります。
23+
24+
ちなみに、`print( ~ )`には糖衣構文があり、次のようにも書けます:
25+
```aiscript playground
26+
<: "Hello, world!"
27+
```
28+
29+
## コメント
30+
AiScriptのコメントは`//`で始めます。
31+
コメントはプログラムの動作に影響を与えません。
32+
33+
```aiscript
34+
// this is a comment
35+
```
36+
37+
複数行にわたってコメントアウトする場合、`/*` `*/`で囲みます。
38+
39+
```aiscript
40+
/*
41+
this is a comment
42+
*/
43+
```
44+
## 組み込み型
45+
<table>
46+
<tr><th>名称</th><th>型名</th><th>リテラル例</th></tr>
47+
<tr><td>文字列</td><td><code>str</code></td><td><code>"kawaii"</code></td></tr>
48+
<tr><td>数値</td><td><code>num</code></td><td><code>42</code></td></tr>
49+
<tr><td>真理値</td><td><code>bool</code></td><td><code>true</code>/<code>false</code></td></tr>
50+
<tr><td>配列</td><td><code>arr</code></td><td><code>["ai" "chan" "cute"]</code></td></tr>
51+
<tr><td>オブジェクト</td><td><code>obj</code></td><td><code>{ foo: "bar"; a: 42; }</code></td></tr>
52+
<tr><td>null</td><td><code>null</code></td><td><code>null</code></td></tr>
53+
<tr><td>関数</td><td><code>fn</code></td><td><code>@(x) { x }</code></td></tr>
54+
<tr><td>エラー</td><td><code>error</code></td><td><code>(TODO)</code></td></tr>
55+
</table>
56+
57+
## 変数
58+
### 宣言
59+
変数宣言は次のように書きます:
60+
```aiscript
61+
let message = "Hello"
62+
```
63+
64+
`let`のあとに変数名を書き、`=`の後に値を書きます。
65+
66+
AiScriptではこの方法で宣言した変数はイミュータブルです。つまり、変数の値を後から変えることは出来ません。
67+
再代入可能な変数を作る時は、`let`の代わりに`var`で変数宣言します。例:
68+
```aiscript
69+
// ミュータブルな変数を宣言
70+
var message = "Hello"
71+
72+
// 再代入
73+
message = "Hi"
74+
75+
// また再代入
76+
message = "Yo"
77+
```
78+
なお、同一スコープ内での変数の再宣言は禁止されています。
79+
80+
### 参照
81+
変数の値を参照する時は、単に変数名を書きます:
82+
```aiscript
83+
print(message)
84+
```
85+
86+
## 配列
87+
`[]`の中に式をスペースで区切って列挙します。
88+
```aiscript
89+
["ai", "chan", "kawaii"]
90+
```
91+
92+
配列の要素にアクセスするときは、`[<index>]`と書きます。
93+
インデックスは0始まりです。
94+
```aiscript playground
95+
let arr = ["ai", "chan", "kawaii"]
96+
<: arr[0] // "ai"
97+
<: arr[2] // "kawaii"
98+
```
99+
100+
## オブジェクト
101+
AiScriptにおけるオブジェクトは文字列のみをキーとした連想配列のようなものとなっています。
102+
キーと値から構成される各要素をプロパティと呼びます。
103+
この時キーをプロパティ名と呼びます。
104+
`{}`の中にプロパティを`,`/`;`/空白で区切って列挙します。
105+
プロパティ名と値は`: `で区切ります。
106+
```aiscript
107+
{
108+
foo: "bar"
109+
answer: 42
110+
nested: {
111+
some: "thing"
112+
}
113+
}
114+
```
115+
116+
オブジェクトのプロパティにアクセスするときは、
117+
`.<name>``[<str>]`と書きます。
118+
```aiscript playground
119+
let obj = {foo: "bar", answer: 42}
120+
<: obj.foo // "bar"
121+
<: obj["answer"] // 42
122+
```
123+
124+
## 演算
125+
演算は、
126+
```aiscript
127+
(1 + 1)
128+
```
129+
のように書きます。これは標準関数(後述)呼び出しの糖衣構文で、実際にはこのように解釈されます:
130+
```aiscript
131+
Core:add(1, 1)
132+
```
133+
詳しくは→[リファレンス > 構文](../references/syntax.md)
134+
135+
## ブロック式
136+
ブロック式 `eval { ~ }` を使うと、ブロック内で最後に書かれた式が値として返されます。
137+
```aiscript playground
138+
let foo = eval {
139+
let a = 1
140+
let b = 2
141+
(a + b)
142+
}
143+
144+
<: foo // 3
145+
```
146+
147+
## 条件分岐
148+
AiScriptでの条件分岐は、次のように書きます:
149+
```aiscript
150+
if (a == b) {
151+
<: "a equals to b"
152+
}
153+
```
154+
155+
`if`の後にboolを返す式(条件)を書き、その後に条件に一致した場合に評価される式(then節)を書きます。
156+
then節の後に`else`を書き、さらに式を追加することで条件に一致しなかった場合の処理も行うことが出来ます:
157+
```aiscript
158+
if (a == b) {
159+
<: "a equals to b"
160+
} else {
161+
<: "a does not equal to b"
162+
}
163+
```
164+
165+
`elif`の後に条件式を書くことで条件判定を複数行うことも出来ます:
166+
```aiscript
167+
if (a == b) {
168+
<: "a equals to b"
169+
} elif (a > b) {
170+
<: "a is greater than b"
171+
} else {
172+
<: "a is less than b"
173+
}
174+
```
175+
176+
これらの条件分岐は式なので、ブロック内で値を返せます:
177+
```aiscript
178+
<: if (a == b) {
179+
"a equals to b"
180+
} elif (a > b) {
181+
"a is greater than b"
182+
} else {
183+
"a is less than b"
184+
}
185+
```
186+
187+
## 繰り返し
188+
AiScriptでの繰り返しは、次のように書きます:
189+
```aiscript
190+
for (let i, 100) {
191+
<: i
192+
}
193+
```
194+
`for`の後にイテレータ変数名を書き、`,`の後に繰り返し回数を返す式を書きます。その後のブロックで繰り返す処理を書きます。
195+
イテレータ変数は省略することも出来ます:
196+
```aiscript playground
197+
for (20) {
198+
<: "yo"
199+
}
200+
```
201+
202+
## 繰り返し(配列)
203+
`each`を使うと、配列の各アイテムに対し処理を繰り返すことができます:
204+
```aiscript playground
205+
let items = ["a", "b", "c"]
206+
each (let item, items) {
207+
<: item
208+
}
209+
```
210+
211+
## 関数
212+
### 関数定義
213+
次のように書きます:
214+
```aiscript
215+
@fn(x) {
216+
(x * 2)
217+
}
218+
```
219+
220+
`@`の後に関数名を書き、カッコの中に引数定義を書きます。その後にブロックが関数の処理になります。
221+
222+
### return
223+
関数の最後に書かれた式の値が関数の返り値になりますが、関数の途中で値を返したい時は`return`を使います。
224+
225+
### 標準定数、標準関数
226+
何も書かなくても最初から使える定数・関数です。
227+
228+
[標準定数・関数一覧](../references/std.md)
229+
230+
### 組み込みプロパティ
231+
オブジェクト以外の値に`.`をつけて呼び出すことができる擬似的なプロパティです。
232+
233+
[組み込みプロパティ一覧](../references/builtin-props.md)
234+
235+
## テンプレート
236+
バッククォートを使うと、文字列の中に変数や式を埋め込めます:
237+
```aiscript playground
238+
let ai = "kawaii"
239+
<: `Hello, {ai} world!`
240+
```
241+
242+
## メタデータ
243+
AiScriptファイルにメタデータを埋め込める機能です。
244+
```aiscript
245+
### {
246+
name: "example"
247+
version: 42
248+
keywords: ["foo", "bar", "baz"]
249+
}
250+
```
251+
252+
## エラー型
253+
一部の標準関数は実行失敗時にエラー型の値を返します。
254+
これによりエラー処理を行うことができます。
255+
```aiscript
256+
@validate(str){
257+
let v=Json:parse(str)
258+
if (Core:type(v)=='error') print(v.name)
259+
else print('successful')
260+
}
261+
```
262+
263+
## エラーメッセージ
264+
進行不能なエラーが発生するとエラーメッセージが表示されます。
265+
```aiscript
266+
let scores=[10, 8, 5, 5]
267+
let 3rd=scores[2] // unexpected token: NumberLiteral (Line 2, Column 5)
268+
```
269+
```aiscript
270+
let arr=[]
271+
arr[0] // Runtime: Index out of range. Index: 0 max: -1 (Line 2, Column 4)
272+
```
273+
行(Line)、列(Column)は1始まりです。

0 commit comments

Comments
 (0)