Open Source Web Development Tutorials - Dev Shed
.NET言語、Boo入門
(2008/12/02公開)
関数と型
C#と異なり、Booのメソッドは必ずしもクラスに属している必要はありません。これらの関数は、どのクラスに属しても適切ではない静的なメソッドを定義するための、代替手段として使用できます。これらの関数は、defキーワードを使って定義します。例えば、次に示す関数は、整数を二乗して結果を返します。
def square(x as int) as int:
return x*x
この関数では、戻り値の型としてintが明示的に割り当てられていることに注意してください。複雑な関数の場合はこうするのが適切ですが、戻り値の型を省略し、コンパイル時に自動的な解釈を受け入れることもできます。次の関数は、上に示したものとまったく同じように動作します。
def square(x as int):
return x*x
後者の関数では、キーの入力回数が少し減ることだけが、唯一の違いです。
voidメソッドも同じで、戻り値の型としてvoidを指定してもしなくても作成できます。次に示す2つの関数は等価です。
def a() as void:
print "This is a void function."
def b():
print "This is a void function."
Booでクラスを定義するには、classキーワードを使用します。コンストラクタの名前はconstructorです。例えば、次に示すクラスは初期化時に文字列を表示します。
class TestClass:
def constructor():
print "TestClass initialized."
test = TestClass()
TestClass initialized.
次に示すクラスPersonは、コンストラクタで名前を示す文字列と、年齢を示すint型を受け付けます。どちらの値もフィールドに割り当てられます。
class Person:
private _name as string
private _age as int
def constructor(name as string, age as int):
_name = name
_age = age
これらのフィールドにアクセスするには、対応するプロパティを作成する必要があります。ここではNameとAgeという2つのプロパティを作成し、それぞれのプロパティに値を設定するsetと取得するgetを定義します。
...
Name as string:
get:
return _name
set:
_name = value
Age as int:
get:
return _age
set:
_age = value
...
もちろん、簡単なプロパティを2つ定義するだけのわりには、面倒な方法です。Booには、この操作をもっと簡単にできる、ずっと便利な方法が用意されています。フィールドのプロパティを明示的に作成する代わりに、Booに自動的に作業させることができます。次の例では、Personクラスを少ない行数で再作成しています。
class Person:
[Property(Name)]
private _name as string
[Property(Age)]
private _age as int
def constructor(name as string, age as int):
_name = name
_age = age
見てわかるように、開発者にとってはるかに簡単な方法となります。クラスは大幅に短くなりますが、それでも十分に理解できます。ここで、Nameを読み取り専用のプロパティに設定することを考えます。Booでは、この設定も簡単にできる方法が用意されています。
[Getter(Name)]
private _name as string
インターフェースを作成するには、interfaceキーワードを使用します。メソッドのシグネチャで戻り値の型が指定されていない場合、voidとみなされます。
interface IBuyable:
def GetPrice() as double
def Buy()
クラスからの継承やインターフェースの実装を行うには、クラスやインターフェースの名前を括弧でくくるだけです。
class Pencil(IBuyable):
def GetPrice():
return 0.50
def Buy():
print "You bought a pencil!"
おわりに
ほかの.NET言語でも同じようなプログラムは作成できますが、Booはより簡単に使えて、開発者が入力すべき文字も少なくなります。例えば、プログラムをクラスに含める代わりに、命令をすぐに入力でき、複数の行でプロパティを定義する代わりに、簡単なプロパティを2行に収めることができます。Pythonと構文が似ていて、労力も減らせることから、Booは十分考慮に値する言語といえるでしょう。
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








