Io

インストールと起動

基本機能のみ

ダウンロードページより VM のソース(IoVM-2003-12-12.tar.bz2) を get 。 bzip2 -d IoVM-2003-12-12.tar.bz2 で .tar に。 tar xvf IoVM-2003-12-12.tar で展開。 IoVM-2003-12-12 に移動して ./configure して make 。 IoVM に移動して、./io で起動。

デスクトップアプリ用パッケージ（基本機能も含まれます）

ソース (IoDesktop-2003-12-12.tar.bz2) を get 。 展開 IoDesktop-2003-12-12 に移動して、./configure して make 。 IoDesktop に移動して、./IoDesktop test.io でデモ。

サンプルスクリプト

ごく基本

3 + 4

3 + 4 * 5

"Hello, World!" print

階乗

Number factorial = method(if(self < 2, 1, n = self - 1; self * n factorial)) 10 factorial

委譲

Application = Object clone; Application preview = method("preview in Application

" print); Window = Object clone; Window printOut = method("print out in Window

" print); Button = Object clone; Button help = method("help in Button

" print); application = Application clone; window = Window clone; window parent = application; button = Button clone; button parent = window; button help; button printOut; button preview;

Self チュートリアルの BankAccount

BankAccount = Object clone BankAccount dollars = 200 BankAccount dollars ==> 200 BankAccount deposit = method(x, dollars = dollars + x) BankAccount deposit(50) ==> 250 BankAccount withdraw = method(x, dollars = 0 max(dollars - x)) BankAccount withdraw(100) ==> 150 BankAccount withdraw(200) ==> 0 account = BankAccount clone account dollar ==> 0 account print Object_0x1c71e0 ( proto = Object_0x147b00 # まだ proto の dollars を参照している ) account deposit(500) ==> 500 account print Object_0x1c71e0 ( dollars = 500 # 自らの dollars を新設してそこに数値を設定 proto = Object_0x147b00 ) BankAccount dollars ==> 0 # proto の dollars には影響なし StockAccount = BankAccount clone StockAccount numShares = 10 StockAccount pricePerShare = 30 StockAccount dollars = method(x, if(x, numShares = x / pricePerShare; dollars, numShares * pricePerShare)) StockAccount dollars # 引数がなければ株数、株単価から計算 ==> 300 StockAccount dollars(150) # 引数があれば、株単価から株数を算出し設定 StockAccount numShares ==> 5 # 株数値が変更されている stock = StockAccount clone stock dollars(600) stock numShares ==> 20

Smalltalk では slot という名前の引数なしメソッドも slot: という名前の引数ありメソッドも組めるが、

Self では slot: という名前の引数ありメソッドは作れても、slot という引数なしメソッドは作ることはできず、

Io では、slot という名前のメソッドを引数ありなしに関わらず作ることができない、

BankAccount = Object clone BankAccount dollars = 200 BankAccount dollars ==> 200 BankAccount getDollars = method(dollars) BankAccount setDollars = method(x, dollars = x) BankAccount deposit = method(x, setDollars(getDollars + x)) BankAccount deposit(50) ==> 250 BankAccount withdraw = method(x, setDollars(0 max(getDollars - x))) BankAccount withdraw(100) ==> 150 BankAccount withdraw(200) ==> 0 account = BankAccount clone account getDollars ==> 0 account print Object_0x25ac80 ( proto = Object_0x23e3e0 # まだ BankAccount の dollars を参照している ) account deposit(500) ==> 500 account print Object_0x25ac80 ( dollars = 500 # 自らの dollars を新設してそこに数値を設定 proto = Object_0x23e3e0 ) BankAccount getDollars ==> 0 # proto の dollars には影響なし StockAccount = BankAccount clone StockAccount numShares = 10 StockAccount getNumShares = method(numShares) StockAccount setNumShares = method(x, numShares = x) StockAccount pricePerShare = 30 StockAccount getPricePerShare = method(pricePerShare) StockAccount setPricePerShare = method(x, pricePerShare = x) StockAccount getDollars = method(getNumShares * getPricePerShare) StockAccount setDollars = method(x, setNumShares(x / getPricePerShare); getDollars) StockAccount getDollars # ゲッターを使用 ==> 300 StockAccount setDollars(150) # セッターを使用 StockAccount getNumShares ==> 5 # 株数値が変更されている stock = StockAccount clone stock setDollars(600) stock getNumShares ==> 20 stock deposit(60) # “=”をセッターに使うと StockAccount >> dollars（getDollars 相当）が破壊されてしまっていた ==> 660 stock getNumShares ==> 22 stock withdraw(120) ==> 540 stock getNumShares ==> 18

このページを編集 (10379 bytes)

以下の 8 ページから参照されています。