2009年7月27日月曜日

Mapは辞書オブジェクト

JavaのHashMapクラスにあたるものはPythonでは辞書オブジェクトといいます。
Map同様、キーと値のペアを定義できます。

例)Python

colors = {"red":"#FF0000", "green":"#F00FF00", "blue":"#0000FF"}

print colors["red"] # keyを指定して値を取得
print colors.keys() # キー一覧を取得

例)Java

HashMap colors = new HashMap();
colors.put("red", "#FF0000");
colors.put("green", "#00FF00");
colors.put("blue", "#0000FF");

System.out.println(colors.get("red"));
System.out.println(colors.keys());

2009年7月22日水曜日

配列サイズの取得は len()

Pythonでは配列のサイズ取得に組み込み関数のlen()を使用します。

例)Python

numbers = [1, 2, 3, 4, 5]
print len(numbers)

例)Java

int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers.length)

2009年7月18日土曜日

メソッドではなく関数

Javaではメソッドは必ずクラスに定義されている必要がありますが、Pythonはスクリプト言語であり、クラス定義は必須ではありません。
クラスに属さないメソッドにあたる処理単位を「関数」と呼び、関数はモジュールに属します。
モジュールについては別途記事にするつもりですが、簡単に言うと関数群が定義されたファイルのことです。
なお、関数の書式はメソッドとほぼ同じですが、クラスに属さないのでインデントがトップになり、メソッドの場合に第1引数に指定した自分自身のインスタンスを表す"self"が不要となります。

例)Python

def hello():
print "hello!"

hello()
上記をファイル名"hello.py"として保存し実行すると、4行目が実行されます。

> python hello.py
hello!

2009年7月13日月曜日

for文

PythonではJavaの拡張for文と同じような記述になります。とてもシンプルです。

例)Python

numbers = [10, 20, 30]

for num in numbers:
print num

例)Java
フツーのfor文

int[] numbers = {10, 20, 30};

for(int i = 0; numbers.length > i; i++) {
System.out.println(numbers[i]);
}
拡張for文

int[] numbers = {10, 20, 30};

for(int num : numbers) {
System.out.println(num);
}

2009年7月12日日曜日

if文

if文はJavaにおける「else if」に対して「elif」と記述します。また論理演算子が異なりJavaの"&&"には"and"、"||"には"or"が対応します。詳しくは論理演算子の投稿でまとめます。

例)Python

if 28 <= age and age <= 33:
print "around 30!"
elif 38 <= age and age <= 43:
print "around 40!"

例)Java

if(28 <= age && age <= 33) {
Sysem.out.println("around 30!");
}
else if(38 <= age && age <= 43) {
System.out.println("around 40!");
}

2009年7月9日木曜日

nullではなくNone

Pythonでは値が存在しないことを示すキーワードは"None"です。大文字小文字を区別します。これはJavaでいう"null"にあたります。
Pythonでは変数の型を意識しませんので、オブジェクトでも数字でも変数ならNoneを代入できます。

例)Python

person = None
person = 100
person = Person()

例)Java

Person person = null;
person = new Person();
person = 100; // <- 当然コンパイルエラー

2009年7月5日日曜日

メソッドの定義

Pythonのインスタンスメソッドの扱いはJavaと非常に似ていますが、宣言方法や作法がいくつか異なります。

例)Python
  • 宣言は"def"で行います。
  • メソッド名は全て小文字で記述し、単語の区切りにアンダースコアを使用するのが一般的なようです。
  • 戻り値の定義は必要ありません。
  • 第1引数は自分自身のインスタンスを示す"self"となります。

class Person:

__name = None

def get_name(self):
return self.__name

例)Java

public class Person {

private String name = null;

public String getName {
return this.name;
}
}

Javaと比較すると変数の宣言同様、戻り値の型定義をしないことに非常に違和感がありますね。この辺りがユルイというか、Javaの方が厳格だと言われる所以でしょう。

2009年7月2日木曜日

コメント

コメントの記述方法です。

例)Python
Pythonではブロックコメントの記述方法がありませんが、3重クォーテーションによる改行を含んだ文字列定義で代用をするのが一般的なようです。

# 1行コメント
str = "hogehoge" # これも1行コメント

'''
# ブロックコメントに代用
x = 1
y = 2
print x + y
'''

例)Java

// 1行コメント
String str = "hogehoge"; // これも1行コメント

/*
// ブロックコメント
int x = 1;
int y = 2;
System.out.println(x + y);
*/

2009年7月1日水曜日

コンストラクタは"__init__()"

Pythonにおいてもインスタンスの初期化を行う場合にJavaのコンストラクタにあたる"__init__()"メソッドがあります。

例)Python
第1引数の"self"はJavaでいうthisと同様の意味合いで、自分自身のインスタンスを示します。__init__()に限らずインスタンスメソッドにおいても第1引数はかならずこのselfになるので、イヤというほどお目にかかることになります。

class Person:
__name = None
__age = None

def __init__(self, name, age):
self.__name = name
self.__age = age

例)Java

public class Person {
private String name = null;
private short age = -1;

public Person(String name, short age) {
this.name = name;
this.age = age;
}
}