「7つの言語 7つの世界」 Io 1日目(Jugemより移植)

Posted by johtani on Friday, October 7, 2011

目次

ちょっと間があいてしまったが、ようやくIoの1日目を終了。 なれない感じの言語なので苦労しました。 今回もセルフスタディの私の回答が最後の方に記載されてます。見たくない人は気をつけてください。 ツッコミ大募集です。コメント欄にどしどしコメントください。そこは違うだろ?こっちのほうがいいのでは?という感じで。

感想:

プロトタイプ言語であり、すべての言語はクローンだそうです。

○手始めに

  スロット、オブジェクトのクローンについて。   メッセージとその送信について。   あくまでもオブジェクトだけの世界。クローンであり、クラスのインスタンスではない。(まだつかめない。。。)
### ○オブジェクト、プロトタイプ、継承
  slotNamesで取れないけど、継承してる。クローンで元をコピーしてるだけか?   頭文字が大文字かどうかがtypeかどうかの違い。大文字=type(クラスもどき=)   オブジェクト=スロットの入れ物   オブジェクトのクローン=オブジェクトのチェーン?(Object => Vehicle => Car => ferrari)
  疑問点:    存在しないスロット名をgetSlot()で呼び出したら?=>nilが返る    存在しないスロットをメッセージとして送信したら?=>Exceptionが出る

○メソッド

  method()で定義   メソッドもオブジェクト=スロットに入れることができる(まだつかめない。。。)   メソッドをスロットから呼び出すと実行される。

○リストとマップ

  リスト、マップは簡単。幾つか(スタックやキュー)のメソッドも用意されてる。

○true、false、nil、singleton

  cloneメソッドを最定義することでsingletonの動作にする。(言われてみれば当たり前か)   Object cloneをオーバーライドすることもできるが、プロセス停止などしないとダメ。(恐るべし。。。)

○インタビュー

  SIMD(Single Instruction Multiple Data)http://ja.wikipedia.org/wiki/SIMD

やりながら感想:

  シンタックスが全然違うのでかなり戸惑い。   ただ、考え方はシンプル。slotとか。   まだ、予約語がわかってない(cloneとかprintとかslotNamesとか)ので。

★セルフスタディ

(探してみよう)

○Ioのいくつかの問題点の例   見つけられず。。。英語がダメダメ。。。    

○質問に答えてくれるIoコミュニティ

  ML:http://tech.groups.yahoo.com/group/iolanguage/   twitter:http://twitter.com/#!/iolanguage
**○Ioのイディオムに関するスタイルガイド**
  Io Note(英語)    [http://iota.flowsnake.org/](http://iota.flowsnake.org/)   Ioプログラミングガイド    [http://iolanguage.com/scm/io/docs/IoGuide.html](http://iolanguage.com/scm/io/docs/IoGuide.html)    [http://xole.net/docs/IoGuide_ja.html](http://xole.net/docs/IoGuide_ja.html)(日本語)   Ioスタイルガイド    [http://en.wikibooks.org/wiki/Io_Programming/Io_Style_Guide](http://en.wikibooks.org/wiki/Io_Programming/Io_Style_Guide)    [http://d.hatena.ne.jp/katzchang/20080819/p1](http://d.hatena.ne.jp/katzchang/20080819/p1)(日本語訳してくれてるブログ)

(確認してみよう)

○1 + 1を評価してから、1 + “one"を評価する。Ioは強く型付けされた言語か?

  ```

Io> 1 + 1 ==> 2 Io> 1 + “one”

Exception: argument 0 to method ‘+’ must be a Number, not a ‘Sequence’

message ‘+’ in ‘Command Line’ on line 1

ということで、型付けは強いです。
</div>

**○0は真か偽か?空文字列はどうか?nilは真か偽か?**
<div>

Io> 0 ==> 0 Io> true and 0 ==> true Io> true and "” ==> true Io> "” ==> Io> true and nil ==> false Io>

0、空文字列はtrue、nilはfalseでした。
</div>

**○プロトタイプに存在するスロットを確認するにはどうすればよいか?**

<div>

Io> Highlander := Object clone ==> Highlander_0x1a233a0: type = “Highlander”

Io> hoge := Highlander clone ==> Highlander_0x1a83630:

Io> hoge proto slotNames ==> list(type) Io> Highlander name := “arnold” ==> arnold Io> hoge slotNames ==> list() Io> hoge proto slotNames ==> list(type, name) Io> Highlander slotNames ==> list(type, name) Io> hoge name ==> arnold Io> hoge getSlot(“name”) ==> arnold

こんな感じ。slotNamesでスロット名を確認し、スロット内部についてはgetSlotで確認できます。
</div>
**○等号(=)、コロン等号(:=)および、コロンコロン等号(::=)の違いはなにか?どのようなときに使うか?**
<div>
<table class="list_view">
<thead>
<tr>
<th>演算子</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr class="spec">
<td>:::=</td>
<td>スロットへの代入+setterの追加</td>
</tr>
<tr class="specalt">
<td class="alt">:=</td>
<td class="alt">スロットへの代入</td>
</tr>
<tr class="spec">
<td>=</td>
<td>スロットへの代入(ただし、スロットが存在しない場合は例外が発生)</td>
</tr>
</tbody>
</table>
とまぁ、記載したが、実際に動かして確認しました。

Io> Highlander := Object clone ==> Highlander_0x223b800: type = “Highlander”

Io> hoge := Highlander clone ==> Highlander_0x21acd60:

Io> hoge slotNames ==> list() Io> hoge name ::= “arnold” ==> arnold Io> hoge slotNames ==> list(setName, name) Io> hoge sword := “long sword” ==> long sword Io> hoge slotNames ==> list(setName, name, sword) Io> hoge clothes = “armor”

Exception: Slot clothes not found. Must define slot using := operator before updating.

message ‘updateSlot’ in ‘Command Line’ on line 1

</div>

### (試してみよう)
**○ファイルからIoプログラムを実行せよ**
<div>
ファイル「great.io」を作成し、以下を入力。

Highlander := Object clone Highlander giveWarCry := “Woooooooo!!” println Highlander giveWarCry()

で、以下のコマンドを実行する。

$ io great.io Woooooooo!!

</div>


**○スロットの名前を指定して格納されているコードを実行せよ**
<div>

Io> Masason := Object clone ==> Masason_0x20ae7d0: type = “Masason”

Io> Masason recieveNiceTweet := method(“やりましょう” println) ==> method( “やりましょう” println ) Io> Masason getSlot(“recieveNiceTweet”) ==> method( “やりましょう” println ) Io> Masason getSlot(“recieveNiceTweet”) call やりましょう ==> やりましょう


callとgetSlotが鍵ですね。
</div>



1日目の途中で間があいてしまったのでシンタックスを忘れてしまう始末。。。
ただ、そんなに込み入った記述もないので、最初に勉強することは少ないかもしれないです。
まだメソッドをあとから追加とか、cloneしたあとにまたプロトタイプを変更して反映可能など、考え方になれないもところがありますが、良い頭の体操になってます。
間を置かずに3日目まで行かないと!!

comments powered by Disqus