Java/Python 導入ガイド:フィボナッチ数列

記事一覧入門編基礎編応用編中級編

Java プログラマーのための Python 導入ガイド〈初級/入門編〉《Jython2.5》
フィボナッチ数列

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03

■ 概要

Java™ Programming Language〔JPL〕の事例を使って、JavaJython との違いを学びます。

■ 関連記事

》作業中です《

フィボナッチ数列

フィボナッチ数列〔Fibonacci series〕の事例は、Python の公式文書 Tutorial でも紹介されています。

■ 事例:Java

変数は、計算の途中経過を保持するのに便利です。

class Fibonacci {
    public static void main(String[] args) {
        int lo = 1;
        int hi = 1;
        System.out.println(lo);
        while (hi < 50) {
            System.out.println(hi);
            hi = lo + hi;
            lo = hi - lo;
        }
    }
}
■ 事例:Jython

Jython では、変数の型を宣言する必要がありません。型は、変数ではなく「オブジェクト」の特性を示します。

def fibonacci():
    lo = 1
    hi = 1
    print(lo)
    while hi < 50:
        print(hi)
        hi = lo + hi
        lo = hi - lo

## ----------------------------------------
def fibonacci2():
    lo = hi = 1
    print(lo)
    while hi < 50:
        print(hi)
##        hi, lo = lo + hi, hi - lo
        lo, hi = hi, lo + hi

K&R に続く、数多くのプログラミング言語の入門書で「なぜか」これと同様の例が示されます。Java/Python 自身もC言語で記述されていることから、これらはある意味で「C言語のアプリケーション」とも言えます。C言語を生み出した「K&R への賛辞」という意味では、ここから始めることに意義があるのかもしれません。



Tips

》作業中です《

Last updated♪2009/07/18






@

■ 事例:Java
class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world");
    }
}

「世界一有名な Java プログラム」は「世界一短い Java プログラム」とも言えます。文字列 "Hello, world" の部分を無視すると、何かを出力するのに「最低限」必要な要素が盛り込まれています。

Jython 対話モード

同じことを Jython で記述すると、対話モードを起動して、

$ jython2.5.0
Jython 2.5.0 (Release_2_5_0:6476, Jun 16 2009, 13:33:26) 
[Java HotSpot(TM) Client VM (Apple Inc.)] on java1.5.0_13
Type "help", "copyright", "credits" or "license" for more information.

ここで、組み込み関数 print を利用すると、

>>> print("Hello, world")
Hello, world

または、対話モードならではの特徴を活かして、

>>> "Hello, world"
'Hello, world'

と文字列を入力するだけでも、同様の出力が得られます。

Jython スクリプト

コマンドラインからモジュールを起動すると、

$ jython2.5.0 hello.py 

if __name__ == '__main__':
    print("Hello, world")

if 文に続く条件式を満たすときだけ、ブロック内に記述されたコードの断片を実行します。

■ 事例:Jython 関数

モジュール内に関数 main を定義します。すると、

def main():
    print("Hello, world")

main()

関数呼び出し main() によって、同じ出力が得られます。

■ 事例:Jython メソッド

モジュール内にクラス HelloWorld とメソッド main を定義します。すると、

class HelloWorld:
    def main(self):
        print("Hello, world")

HelloWorld().main()

メソッド呼び出し main() によって、同じ出力が得られます。