先月はPythonでのコーディングをたしなんだので、AS3と比較しながらPythonメモ。
インデント
Python
def hoge():
print "hoge"
AS3
function hoge():void{
trace("hoge");
}
Pythonと言えばインデント。コードブロックはインデントで表現する。コーディングの一貫性を狙っての事だと思うけど、Pythonみたいなシンプルな文法だから可能なんだろう。AS3なんてコンストラクタ書く時点でインデントが二つも付いて、あれよあれよとコードが右へ寄ってくからね。
変数定義
Python
myname = "kappalab"
AS3
var myname:String = "kappalab";
"var"や型指定がいらない。AS1みたいな感じかな。
関数定義
Python
def hoge(value="hoge",*arg):
for i in arg:
print i
print "hoge"
AS3
function hoge(value:String="hoge",...arg):void{
for each(var i:* in arg){
trace(i);
}
trace("hoge");
}
Pythonだと宣言は"def"を使う。こちらも型指定いらず。引数のデフォルト値の指定は同様。
クラス定義
Python
class Hoge (object):
def __init__(self):
self.name = "kappalab"
print self.foo()
def foo(self):
return "Hoge:foo"
AS3
package{
public class Hoge extends SuperHoge{
public var name:String;
public function Hoge():void{
name = "kappalab";
trace(foo());
}
public function foo():String{
return "Hoge:foo";
}
}
}
Pythonだとコンストラクタは"__init__"で定義する。でもって第一引数に"self"を渡す。また、インスタンスメソッドの第一引数にも必ず"self"を渡す。さらにインスタンス変数(プロパティと言うとAS3とちょっと意味合いが異なるみたい)及びインスタンスメソッドを参照するときも"self.name"とする。AS3の"this.name"とよく似ているが、AS3が"this"を省略可能なのに対してPythonは必須。
そして、変数は全てコンストラクタ内で定義。AS3みたいにあらかじめ定義は出来ない。
その他、カプセル化まわりで色々と特徴があるけどそれはまた今度。
ループ処理その1
Python
for i in [0,1,2,3]:
print i*2
AS3
for (var i:int = 0 ; i < 4; i++){
trace(i*2);
}
とりあえず配列とセットで使う。
ループ処理その2
Python
list = ["a","b","c"]
for i in list:
print i
AS3
var array:Array = ["a","b","c"];
for each(var p:* in array){
trace(p);
}
AS3のfor eachとほぼ同様。ループ処理その1よりこっちの方が比較としては的確かも。
ループ処理その3
Python
list = [i*2 for i in range(0,10)]
AS3
var array:Array = [];
for (var i:int = 0 ; i<10;i++){
array.push(i*2);
}
リスト内包処理。何かしらの処理結果を配列に格納するときにとても便利。ここら辺の機能がPythonって流石と思わせる。というか、こうしたループで文字列などのデータをゴニョゴニョ処理するのはPython、Perl、phpは基本的に得意なんだろうと思う。そしてAS3はつくづくその対局にいるのではないかと思ったりする。
最後に
ここに紹介した事以上にPythonは紹介すべき事が沢山あると思うけどとりあえず今のところは以上で。もし反響が良ければクラス周り、OOPとしての性質の違いに付いて比較したいと思います。
最後の最後に
ところでなぜPythonなのかというと、関西方面に引っ越ししたFlasherさんが、「Pythonいいよ!めちゃかわいいんですわ!yes!yes!!」と別れの間際に言ってた事と、AS3という言語を別の角度から見つめ直すにはPythonの様なシンプルなOOP言語が良いんじゃないかと思った事。
そして最終的にPythonをどこで使うかというと、http://onsight.la/のバックエンド。そんなわけでこれからはASerとPythonianのハイブリットを目指して頑張ります。あ、でもoFとかもやりたいなあ。