ActionScript3.0、2.0、PHP5、JavaScript それぞれのOOPの記述方法を比較してみました。基本的に各言語のサンプルは同じ振る舞いをするので、「ASは得意だけど他の言語まで覚えるのは大変そう」と腰を重くしている人は参考になるかもしれません。
■AS3■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
package
{
public class Person
{
public var name:String;
public var age:uint;
public var sex:String;
private var paramNum:uint;
public function Person(__name:String=null, __age:uint=0, __sex:String=null)
{
paramNum = arguments.length; //privateインスタンス変数にコンストラクタの引数の個数を記憶
name = __name;
age = __age;
sex = __sex;
}
public function showMessage():void
{
trace("コンストラクタに指定された引数の数:", paramNum, "\n",
"名前:", name, "\n",
"年齢:", age, "\n",
"性別:", sex);
}
static public function showClassInformation():void
{
trace("クラス名:Person\n",
"性質:人物を表します");
}
}
}
//以下のコードをタイムラインまたはメインクラスに記述
var p:Person = new Person("kakeru",27,"male");
p.showMessage();
Person.showClassInformation();
■AS2■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
class Person
{
public var name:String;
public var age:Number;
public var sex:String;
private var paramNum:Number;
public function Person(__name:String, __age:Number, __sex:String)
{
paramNum = arguments.length; //privateインスタンス変数にコンストラクタの引数の個数を記憶
name = __name;
age = __age;
sex = __sex;
}
public function showMessage():Void
{
trace("コンストラクタに指定された引数の数:"+ paramNum+ "\n"+
"名前:"+ name+"\n"+
"年齢:"+ age+"\n"+
"性別:"+ sex);
}
static public function showClassInformation():Void
{
trace("クラス名:Person\n"+
"性質:人物を表します");
}
}
//以下のコードをタイムラインまたはメインクラスに記述
var p:Person = new Person("kakeru",27,"male");
p.showMessage();
Person.showClassInformation();
■PHP5■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//このソースをまるまるコピペしてPHPファイルとして保存すれば動作するはずです。
<?php
class Person
{
public $name;
public $age;
public $sex;
private $paramNum;
function __construct($__name=null,$__age=0,$__sex=null)
{
$this->paramNum = func_num_args(); //privateインスタンス変数にコンストラクタの引数の個数を記憶
$this->name = $__name;
$this->age = $__age;
$this->sex = $__sex;
}
public function showMessage(){
echo "コンストラクタに指定された引数の数:", $this->paramNum, "<br>",
"名前:", $this->name, "<br>",
"年齢:", $this->age, "<br>",
"性別:", $this->sex, "<br>";
}
static public function showClassInformation(){
echo "クラス名:Person<br>",
"性質:人物を表します";
}
}
$p = new Person("kakeru",27,"male");
$p->showMessage();
Person::showClassInformation();
?>
■JS■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//body要素内にscript要素を配置してその中にソースをコピペすれば動作するはずです。
function Person(__name,__age,__sex)
{
var paramNum = arguments.length; //privateインスタンス変数にコンストラクタの引数の個数を記憶
this.name = __name;
this.age = __age;
this.sex = __sex;
this.showMessage = function()
{
document.write("コンストラクタに指定された引数の数:"+ paramNum+ "<br>"+
"名前:"+ this.name+ "<br>"+
"年齢:"+ this.age+ "<br>"+
"性別:"+ this.sex+ "<br>");
};
}
Person.showClassInformation = function()
{
document.write("クラス名:Person<br>"+
"性質:人物を表します");
};
var p = new Person("kakeru",27,"male");
p.showMessage();
Person.showClassInformation();
各言語ともこのような出力結果になるかと思います。
コンストラクタに指定された引数の数:3 名前:kakeru 年齢:27 性別:male クラス名:Person 性質:人物を表します
いかがでしたでしょうか?
各言語とも記述方法に大きな違いは無かったかと思います。(JavaScriptだけ他の言語と異なりクラスベースではなくプロトタイプベースオブジェクト指向言語なので若干特殊ですが。)
各言語の違いといえば以下のようなものでしょうか。
- AS2.0、3.0は変数に型指定ができる。
- AS2.0、3.0はthisキーワードを明示的に指定しなくてもインスタンスメンバーにアクセスできる。
- AS3.0、PHP5は関数の引数にデフォルト値を指定できる(指定しない場合は必ず引数を指定しないといけない)。
- PHP5はインスタンス・クラスメンバーへのアクセス方法がASやJSと異なり、アロー演算子やコロン(を二つ並べたもの)を使用する。
- JSではthisキーワード指定したものをパブリックメンバー、それ以外をプライベートメンバーとして扱われる。
他にもpackageや外部ファイル化のルールなど上げればきりがありませんが、普遍的な内容の違いはこのくらいでしょうか。
そんなことよりも、JavaScriptのクラスベース化を切望します(;ω;)



コメント(0)
コメントが存在しません。