1Kuinの文とブロック
Kuinで関数の中に書くことができる文とブロックは、概ね図1-1の構造をしています。
例えば図1-2のように、変数定義は文、関数定義はブロックの構造になっています。
文は1行で書かれ、ブロックは複数行に渡って書かれるという違いがあります。 ブロックの中にはさらに文やブロックを入れることができます。
Kuinにおける文とブロックは表1-1の通りです。
名前 | 分類 | 説明 |
---|---|---|
alias | 文 | 型の別名定義 |
assert | 文 | アサーション |
break | 文 | ブロックを抜ける |
const | 文 | 定数定義 |
do | 文 | 式の実行 |
excode | 文 | コンパイル後コードの直接記述 |
include | 文 | 別ファイルの埋め込み |
ret | 文 | 関数を抜ける |
skip | 文 | ループを1回飛ばす |
throw | 文 | 例外の発生 |
var | 文 | 変数定義 |
block | ブロック | 基本ブロック |
class | ブロック | クラス定義 |
enum | ブロック | 列挙型定義 |
for | ブロック | 回数ループ |
func | ブロック | 関数定義 |
if | ブロック | 条件分岐 |
switch | ブロック | 値による分岐 |
try | ブロック | 例外処理 |
while | ブロック | 条件ループ |
それぞれの文とブロックについて、以下で詳しく説明します。
2alias文
「alias文」は既存の型に別名を付けて新しい型を定義します(図2-1)。
alias文は、関数の外のグローバルな領域や、クラス内にも記述できます。
3assert文
「assert文」は条件を満たさなかった場合、デバッグ実行時に例外(0xE9170000)を発生させる文です(図3-1)。
満たすべき条件を書くことで、プログラムの信頼性を高めることが目的です。 条件はboolで書きます。
assert文は、リリースビルド時には存在しないものとして読み飛ばされるため、リリースビルド時には実行時の処理負荷はありません。
4break文
「break文」はブロックの処理を抜ける文です(図4-1)。
break文の仕様は図4-2の通りです。
5const文
「const文」は定数を定義します。 定数とは、値を書き換えることができない変数です。 定義の方法は変数と同様です(図5-1)。
const文は、関数の外のグローバルな領域や、クラス内にも記述できます。
const文の仕様は図5-2の通りです。
6do文
「do文」は式を実行する文です(図6-1)。
do文の仕様は図6-2の通りです。
7excode文
「excode文」は、コンパイル後に生成されるコードを直接記述できる文です(図7-1)。
上級者向け機能です。
コンパイルオプションの「-e」に指定する環境により、仕様が異なります。
8include文
「include文」は、別ファイルに書かれているソースコードを埋め込める文です(図8-1)。
include文を記述したソースコードの名前が「sample.kn」で、include文に指定したファイル名の一部が「part」だった場合、「sample.part.kn」というファイルが読み込まれて埋め込まれます。
「sample.part.part2.kn」のように、多段階に埋め込むことはできません。
埋め込まれたソースコードは、include文を記述したソースコード内に直接書いたのと同じように扱われます。
9ret文
「ret文」は関数を抜ける文です(図9-1)。
ret文は、戻り値の型を指定した関数では戻り値を返さなければならず、戻り値の型を指定しなかった関数では戻り値を返してはなりません。
ret文の仕様は図9-2の通りです。
10skip文
「skip文」はループを1回スキップする文です(図10-1)。
skip文の仕様は図10-2の通りです。
11throw文
「throw文」は例外を発生させる文です(図11-1)。
例外コードはintで指定します。 具体的な値は、Kuin例外コードを参照してください。
例外が発生するとその瞬間から関数を次々と抜けてアプリは終了しますが、tryブロックを使うと途中で発生した例外を捕まえて処理を続行することができます。 エラーが起こった場所で例外を発生させ、エラーを処理したいところでtryブロックを使います。
12var文
「var文」は変数を定義します。 詳しくは、Kuinの変数定義を参照してください。
var文は、関数の外のグローバルな領域や、クラス内にも記述できます。
13blockブロック
「blockブロック」は何もしないブロックです(図13-1)。
スコープを分けたり、breakで抜ける用途で使われます。
14classブロック
「classブロック」はクラスを定義します。 詳しくは、クラスを参照してください。
classブロックは、関数の外のグローバルな領域や、クラス内にも記述できます。
15enumブロック
「enumブロック」は列挙型を定義します。 詳しくは、列挙型を参照してください。
enumブロックは、関数の外のグローバルな領域や、クラス内にも記述できます。
16forブロック
「forブロック」は数え上げながらループするブロックです(図16-1)。
forブロックでは、初期値から終値まで増減値ずつ増減しながら繰り返します。 増減値は省略すると「1」と解釈されます。
forブロックの仕様は図16-2の通りです。
17funcブロック
「funcブロック」は関数を定義します。 詳しくは、Kuinの関数定義を参照してください。
funcブロックは、関数の外のグローバルな領域や、クラス内にも記述できます。
18ifブロック
「ifブロック」は条件によって処理を分岐させるブロックです(図18-1)。
ifブロックでは、複数のelif節を連ねたり、最後にelse節を書くこともできますが、いずれも省略できます。
ifブロックの仕様は図18-2の通りです。
19switchブロック
「switchブロック」は値によって処理を分岐させるブロックです(図19-1)。
switchブロックでは、複数のcase節を連ねたり、最後にdefault節を書くこともできます。 default節は省略できます。
case節の値は「,」で区切って複数指定したり、「a to b」と書くことで「a以上b以下」という範囲を指定することもできます。
switchブロックの仕様は図19-2の通りです。
20tryブロック
「tryブロック」は発生した例外を処理するブロックです(図20-1)。
try節内で例外が発生すると、該当するcatch節にジャンプして処理が行われます。 また、例外が発生しても発生しなくてもfinally節は必ず実行されます。
例外が発生すると次々と関数を抜けていきますが、catch節を使うことで例外を捕まえることができ、finally節を使うことでリソース解放などの確実に行いたい処理を行っておくことができます。
catch節の値は「,」で区切って複数指定したり、「a to b」と書くことで「a以上b以下」という範囲を指定したり、省略することもできます。
最後にfinally節を書くこともできますが、省略できます。
tryブロックの仕様は図20-2の通りです。
21whileブロック
「whileブロック」は条件を満たす限りループし続けるブロックです(図21-1)。
skipを指定すると、最初の条件判断をスキップし、必ず1回は処理が行われるようになります。