メソッドの詳細
ここでは、クラス・メソッドについてさらに詳しく説明します。
-
ObjectScript 変数はデータ型を使用しませんが、クラス・メソッドはデータ型を使用します。メソッド・シグニチャにより、引数とそのデータ型を宣言します。クラス・メソッドが値を返す場合、シグニチャで戻り値のデータ型を宣言します。例と演習では、%String、%Numeric、%Date、%Boolean などの基本的なデータ型を使用します。これらのデータ型の詳しい説明は、このチュートリアルの対象ではありません。
-
既定では、クラス・メソッドはパブリックです。シグニチャの後に Private キーワードを使用して、プライベート・クラス・メソッドを作成することもできます。プライベート・クラス・メソッドは、同じクラス内の他の場所からのみ呼び出すことができます。
-
コードは中括弧 ({}) で囲まれています。ObjectScript コードのほぼどこでもスペースと改行を使用できます。例外として、コマンドと引数の間、あるいは 1 行内のコメントは分けることができません。
-
コメントを示す場合は、// または ; を使用します。行にコメントも記述する場合、行内のその他のコード部分と区別するために、少なくとも 1 つのスペースを入れてから、コメントを記述する必要があります。コメントが複数行にわたる場合、コメントの最初に /* を、コメントの最後に */ を記述します。
-
既定では、クラス・メソッド内の変数はプライベートです。つまり、そのクラス・メソッドの外部からは参照できません。
-
シグニチャの後に Publiclist キーワードを使用すると、変数をパブリックに変更できます。共通のパブリック変数のセットを宣言するクラス・メソッドのいずれもが、それらの変数を共有します。ただし、パブリック (共有) 変数の使用は、推奨できるプログラミング手法ではありません。変数を共有する場合、変数を引数として渡す方法が推奨されています。この例およびチュートリアルの演習では、デモンストレーションの目的でのみ、パブリック変数を使用しています。
コード行の先頭にラベル (タグとも呼びます) を置くことができます。行にラベルを置く場合、タブやスペースを含む残りの行からラベルを離す必要があります。ラベルは一般的にルーチン内で使用されます。慣例で、ルーチンの 1 行目にはルーチン名を表すラベルを付けることをお勧めします。
パブリック・メソッドとプライベート・メソッドの例:
/// examples for ObjectScript Tutorial
Class ObjectScript.Examples
{
/// demo of public and private methods, along with a public variable
ClassMethod PrivatePublic()
{
do ..Private() // call a private method
do ..Public(9) // call a public method
}
/// a private method with public variable a
ClassMethod Private() [Private, Publiclist = a]
{
write !, "setting a" set a = 1
write !, "setting b" set b = 2
write !, "setting c" set c = 3
write !, "setting d" set d = 4
}
/// a public method with an argument and a return value
ClassMethod Public(num as %Numeric) as %String
{
write !, "my favorite number is ", num
return "This is my return value!!!"
}
}
USER>do ##class(ObjectScript.Examples).PrivatePublic()
setting a
setting b
setting c
setting d
my favorite number is 9
USER>write
a=1
USER>set x = ##class(ObjectScript.Examples).Public(7)
my favorite number is 7
USER>write x
This is my return value!!!
USER>do ##class(ObjectScript.Examples).Private()
DO ##CLASS(ObjectScript.Examples).Private()
^
<PRIVATE METHOD>
USER>