Hatena::Grouprubyist

たばさの RSSフィード

02/07(木) 2008

print文

| print文 - たばさの を含むブックマーク はてなブックマーク - print文 - たばさの

//date.io

i:= Date clone
i day print
// =>6 ('08/2/6)

/*
 comment is c,c++ style both;コメントはC,C++と同様。rubyのように#も使える
 ObjectとSlot (method, function, variableに相当?) の区切りにドットはいらない。*/

"\n" print
i:= Date now
i print
// => 2008-02-06 23:53:55 UTC (現在時刻を表示) 
Date clone now print
Date now print;
// これらでも表示は同じ
// ;semicolonは文の区切りにあってもいい <削除
// ;semicolonか改行が文の区切り。
// 最初の代入は := 、以降では = 

i asNumber print
// => 1202342193.359406 (秒での表示)

参考

日本語 http://f21.aaa.livedoor.jp/~kizz/prog/io/IoVM/_docs/IoVM_ja.html

英語、本家 http://www.iolanguage.com/scm/git/checkout/Io/docs/IoReference.html

for, loop, method

| for, loop, method - たばさの を含むブックマーク はてなブックマーク - for, loop, method - たばさの

c := Object clone
c fun := method(
  for(i,1,9,
      i print
      writeln("hello.")
  )
)

c fun
c fun

// =>1hello.
// =>2hello.
// =>...略
// =>9hello.
// =>1hello.
// =>2hello.
// =>...略
// =>9hello.

引数

| 引数 - たばさの を含むブックマーク はてなブックマーク - 引数 - たばさの

// 定義。 (引数1, 引数2, ... , 最後が本体)
sum := method(a, b, a+b)

b := sum(10,212)
"10+212=" print
b print

clone

| clone - たばさの を含むブックマーク はてなブックマーク - clone - たばさの

Smalltalk (all values are objects), Self (prototype-based), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), LISP (code is a runtime inspectable/modifiable tree) and Lua (small, embeddable).

http://en.wikibooks.org/wiki/Io_Programming/Beginner%27s_Guide/About

Ioは主に次のものに影響を受けている

Smalltalk:すべてがオブジェクト。Self:プロトタイプ・ベース。NewtonScript:差分継承(?)。Act1:actors,futures(?)*1Lisp:実行時検査/修正可能ツリー。Lua:小さく、組み込み可能。


クラスはない。「clone」でコピーを作る。

a:= Object clone
a sum :=method(a, b, a+b)

b := a clone
b mul := method(a, b, a*b)

a sum(2,3) print
"\n" print
b sum(2,3) print
"\n" print
b mul(2,3) print
"\n" print
a mul(2,3) print
"\n" print


// 5
// 5
// 6
//
//  Exception: Object does not respond to 'mul'
//  ---------
//  Object mul   

perform

| perform - たばさの を含むブックマーク はてなブックマーク - perform - たばさの

呼び出しはメソッド名を文字列としてこうも書ける

a := Object clone
a sum := method(a, b, a+b)
a perform("sum", 10, 212) print

system

| system - たばさの を含むブックマーク はてなブックマーク - system - たばさの

System system("ls")
// system command の実行

loop

| loop - たばさの を含むブックマーク はてなブックマーク - loop - たばさの

loop(1)
a:=list(1,2)
a foreach(c,a append(a) print)

名前間違った

| 名前間違った - たばさの を含むブックマーク はてなブックマーク - 名前間違った - たばさの

消せない

print埋め込み

| print埋め込み - たばさの を含むブックマーク はてなブックマーク - print埋め込み - たばさの

なにかあったようだ

埋め込みが増えてるようで。実装が変われば通らなくなるようなものかな?

それよりrubyhello, worldはなんだろうなー。


おっと nukoさん発見。

http://xx2zz.blog77.fc2.com/blog-entry-63.html#more

見かけたってことは最初じゃないのか

 元祖brainハッカーは誰だ

string ..

| string .. - たばさの を含むブックマーク はてなブックマーク - string .. - たばさの

ほかの言語のように改行は"..\n..."とエスケープするが、pythonのように"""mojiretsu"""とやると複数行の文字列を使える。連結にはLuaのように「..」を使う。数値も繋げられる。すべてはexpression(式)で、戻り値があるから。

Io> "There are " .. (8*10)+19 .. " bottles of beer on that very wall, over there."
==> There are 99 bottles of beer on that very wall, over there.

Io beginner's guide

Integer, real number

| Integer, real number - たばさの を含むブックマーク はてなブックマーク - Integer, real number - たばさの

整数と実数は同等に扱われる。16進数はCのように0XBEEFなどとあらわされるが、大きすぎるものは32ビットでの最大値に丸められる。バグという人もいるかもしれないが我々の判断するところではない。(原文)

Io> 0xDEAD
==> 57005
Io> 0xBEEF
==> 48879
Io> 0xDEADBEEF
==> 3.735929e+09
Io> 0xDEADBEEFFEEDFACE
==> 4.294967e+09

標準では複素数、無限などのサポートはない。

scope、setProto

| scope、setProto - たばさの を含むブックマーク はてなブックマーク - scope、setProto - たばさの

デフォルトですべてのスロットはローカル。別の言い方では「グローバル変数はない」


selfになければ親にあたるprototypeのスロットを順に探していく。コピーという感じではなかったな。

思ったようにするには

SavingsAccount init := method(self balance := 0)

などと、initメソッドを追加するようだ。

http://en.wikibooks.org/wiki/Io_Programming/Beginner%27s_Guide/Objects


実行途中でも親クラスにあたるprototypeを動的にsetProto()で変更できる。なんかすごい。(「変更」は違う?)

keyword, statement

| keyword, statement - たばさの を含むブックマーク はてなブックマーク - keyword, statement - たばさの

予約語、命令文はない。すべてはmessageからなる式。(expression

for,ifなどの制御構文も式。演算子(+,*,など)も単なるmessage。

assignは3種類。

a ::= 1 newSlot("a", 1)

a := 1 setSlot("a", 1)

a = 1 updateSlot("a", 1)

(最初のは良く分からない)

多重継承

| 多重継承 - たばさの を含むブックマーク はてなブックマーク - 多重継承 - たばさの

いくつでもprotoのlistに追加できる。

blockは、レキシカル・スコープを持つこと以外はmethodとおなじ。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20080207
カレンダー
<< 2008/02 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29
archive Error : RSSが取得できませんでした。