= 名前とリテラル

== 識別子

識別子は、変数やクラスなどにつける名前のことです。
アルファベット文字で始まり、
英数字かアンダースコア(_)を続けて名前付けします。

{{{
i              
v9             
my_variable    
MATH_PI        
URN            
Urn            
C              

}}}

=== 変数、クラス名、定数の区別

Konoha は、
Java プログラミングで伝統的に用いられてきた名前付け慣習(naming convension)をルール化し、
識別子からクラス名か変数名か定数か、判定できるようにしています。

 * 変数は、英小文字から始まる名前です。
 * 定数は、英大文字から始まり、英大文字のみ含まれる名前です。
 * クラス名は、英大文字から始まり、英小文字が含まれる名前です。

{{{
i              // 変数名
v9             // 変数名
my_variable    // 変数名
MATH_PI        // 定数
URN            // 定数
Urn            // クラス名
C              // クラス名　１文字はクラス名

}}}

=== 識別子の正規化

プログラマは、読みやすさのためアンダースコアを名前に含めることが多いですが、
ときどきアンダースコアの有無や位置を忘れてしまうことがあります。

Konoha は、識別子を処理するとき、アンダースコアを除去し、
名前を正規化してマッチングを行っています。
除去されたアンダースコアに続くアルファベットは、英大文字化して扱われます。

{{{
get_name             // getName と同じ
get_host_by_name     // getHostByName と同じ
Class_Name           // ClassName と同じ
BUF_SIZ              // BUFSIZ と同じ

}}}

=== メソッド名と呼び出し

メソッド名は、変数と同じく、英小文字で始まり英数字からなる名前を用います。

Konoha では、Javaと同じく、
アンダースコアの代わりに英大文字化して連結する命名スタイルを推奨しています。

{{{
readLine      // 推奨スタイル
readline      // 非推奨
read_line     // 非推奨

}}}

さて、スクリプティング言語は、別名グルー言語と呼ばれるとおり、
C/C++などで開発されたライブラリを利用する機会が多くあります。
このようなとき、既存のライブラリ関数名をそのまま利用できた方が便利です。

Konohaでは、メソッドや関数のコールに限り、英大文字と英小文字を区別しません。
つまり、メソッド名が getPid であれば、次のどの方法で呼んでも構いません。

{{{
getpid()
GetPid()
GETPID()
GET_PID()

}}}

=== 予約語

Konoha は、いくつかのキーワードを「識別子」と衝突しないため予約しています。
次のリストは、Konoha にとって文法の一部に相当する特別な意味をもったキーワードとなります。

{{{
as assert break case catch class continue
default defined do double else extends false finally
for foreach from goto if import include interface
is isa lock namespace new null
pragma print
return switch  this true try typeof using
var void where while

}}}

いくつかのキーワードは、
CやJava, JavaScript などの既存プログラミング言語と互換性のため、
エイリアス（別名）として予約されています。

{{{
abstract                    // @Abstract の別名 
boolean	                    // Boolean 
byte[]                      // Bytes
double                      // Float
final                       // @Final
float                       // Float
int                         // Int
private	                    // @Private
protected                   // @Protected
public                      // @Public

}}}

=== ラベル名

英字で始まりコロン(:)で終わるトークンは、予約語を含め、クラス名、変数名、定数名とは関係なく、ラベルとして扱われます。

{{{
default:    ClassName:   variable:   CONST:

}}}

コロン(:)の前に空白を入れると、そのトークンはラベルと解釈されません。
コロン(:)の次に空白がない場合は、連続したトークンとみなされる。

{{{
name : value      // name はラベルでない
name: value       // name: ラベル
name:value        // ひとつの識別子
}}}

=== 特別な名前

Konoha では、接頭語や接尾語で特別なタイプの名前を使うことができます。

 * 例外名 {{{!!}}}で終わる名前。　{{{　Null!!  Security!!   OutOfIndex!!   IO!!　}}}
 * フォーマッタ名  {{{%}}}で始まる名前 {{{　%s    %4.2f    %dump   %HTML　}}}
 * プロパティ変数 {{{$}}}で始まる名前 {{{ $konoha.version $env.PATH }}}
 * アノテーション　{{{@}}}で始まる名前　{{{　@Override   @Final   @Doc　}}}
 * キー {{{**}}} で始まる名前　{{{ **Class:key }}}

== リテラル

リテラルは、プログラム中に直接あらわれたデータ値のことです。
型をもった値として扱われます。

{{{
12                            // 整数12
1.2                           // 小数1.2
"hello world"                 // テキスト
/^world$/                     // 正規表現パターン
true                          // 論理値 true
false                         // 論理値 false
null                          // NULL 
[1,2,3]                       // 配列オブジェクト
{x :1, y: 2}                  // 辞書オブジェクト

}}}

Konohaで は、データ表現はスクリプトの重要な一部と考え、
配列, 辞書、そしてオブジェクトなどの値をリテラルとして記述できます。

{{{
C{x: 1, y: 2}                 // クラスCのオブジェクト

}}}



[[include(KbookIndex)]]
[[include(KbookFooter)]]
