Home English

Kuina-chan

くいなちゃんOct 17, 2017


プログラミング言語Kuin」のスコープとファイルについてです。

Kuinのスコープ

Kuinでは、ローカルなものの識別子を指定するときは名前そのままを書き、グローバルなものの識別子を指定するときは名前の前に「@」を付けて書きます(グローバルとローカルの識別子)。
func globalFunc()
end func
  
func main()
  func localFunc()
  end func
  
  do @globalFunc()
  do localFunc()
end func
グローバルとローカルの識別子
この例では、グローバルな関数「globalFunc」を呼び出すときは「@globalFunc()」とし、ローカルな関数「localFunc」を呼び出すときはそのまま「localFunc()」としています。
グローバルなものはどこからでも参照できますが、ローカルなものは、それと同じかそれよりも内側のブロックからでしか参照できません。
例えば、ブロックの中にブロックがあった場合、内側から外側のブロックを参照できますが、外側から内側へは参照できません(ブロックのスコープ)。
func main()
  for i(1, 10)
    var m: int :: 2 + i
    for j(1, 10)
      var n: int :: i + j + m
      var o: int :: n
    end for
  end for
end func
ブロックのスコープ
この例では、forブロック「i」「j」の内側で「i+j+m」のように参照したり、forブロック「i」の内側で「2+i」のように参照していますが、この「2+i」のところを「2+j」や「2+n」と書き換えることは、「j」や「n」が内側のブロックにあるためできません。

Kuinのファイル

Kuinでは、ソースコードを別のソースファイルに分けて読み込むことができます。
先ほど、ローカルのものはそのままの識別子で参照、グローバルのものは「@」を付けて参照と説明しましたが、別のソースのグローバルなものは「\ソース名@識別子」と書き、また標準ライブラリとして用意されているものは「ソース名@識別子」と書きます(別ソースファイルの関数呼び出し)。
func main()
  do \other@f()
  do kuin@wait(1000)
end func
別ソースファイルの関数呼び出し
この例では、「other.kn」として作成した別ファイルのグローバル関数「f()」を呼び出しています。 また、Kuinの標準ライブラリ「kuin.kn」の関数である「wait(1000)」も呼び出しています。
ソース名の先頭に「\」が付いていればコンパイルするソースと同じディレクトリからソースがロードされ、「\」が付いていなければ標準ライブラリのディレクトリからロードされます。
また、ユーザが作成したソースは「\dir1\dir2\other@f()」のようにディレクトリを潜ってロードすることもできます。 「\..\」のようにディレクトリを上ることはできません。
ちなみに意図しないアクセスを防ぐために、デフォルトではすべてのものは別ファイルからアクセスできないようになっていて、アクセスできるようにするものには定義の先頭に「+」を付ける必要があります。 例えば、先ほどのother.knに定義されている関数「f」は、パブリックな関数のように定義する必要があります。
+func f()
end func
パブリックな関数
「+」を付けて別ファイルに公開できるものは、「func」の他に、グローバルの「var」「const」「alias」「enum」「class」があります。
以上をまとめると、Kuinの識別子の参照方法のようになります。
Kuinの識別子の参照方法
種類 参照方法
ローカル 識別子 do f()
自身のソースのグローバル @識別子 do @f()
別のソースのグローバル \ソース名@識別子 do \src@f()
標準ライブラリ ソース名@識別子 do src@f()
1508205417ja