2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[マニプロ]初めてのIo編

Last updated at Posted at 2020-04-01

はてなブログの記事をそのまま写しています

マニアックプログラミング略してマニプロの3つ目の記事です!
マニプロでは不定期で、数日かけて有名では無いプログラミング言語の基礎の基礎を習得して皆さんに使いやすさなどを書いていこうと思ってます。
注:ちょっと触ったくらいなので、誤った情報が混ざっている可能性があります

#雑談(飛ばして構いません)
前回の記事からはや2ヶ月。。。
今世界がコロナで大変なことなってますね。株が大暴落したのが非常に怖いです。しかも特定の国とかではなく全世界でなので、、、
ただ、ここ数日は3/19辺りと比べると回復はしてるっぽいですがまだまだ低いです。
あと、志村けんさんの訃報も驚きました。

#本編
3回目の言語はIoです!
入出力を思い出すような名前ですが、なんか入出力に特徴があるんかと思ったんですが特に無いようです(笑)

#そもそもIoとは
オブジェクト指向型言語で、Steve Dekorteという方が友人と共にプログラミング言語の仕組みを勉強するために作った小さな言語らしいです。

因みに公式サイトがあるんですが、このサイトの雰囲気がめっちゃ好みです(笑)
公式サイト

#Ioの特徴

###アクター
初め見たときナニソレオイシイノ状態だったんですが、調べたらなんとなく分かったような気がします。
アクターという処理を行うことで、親→子→その子・・・という風にオブジェクト(?)らしきものを沢山作り、それぞれにはメールボックスとアドレスがあります。そして、大量のメッセージ(命令)を一気に受け取ると溜まった分を子に送って処理させるんです。
つまり、並行処理に凄い向いている"仕組み"のことを言います。

#Ioを使ってみた
実行環境構築
ここのDownloading,Installingから実行環境を入れてください。手順は物凄く少ないのでやり易い。あと、実行する時はターミナルで$io ほにゃららら.io で実行出来ます。

###まずはHello World

Sample.io
"Hello World!" println

printlnが後ろにくると中々な違和感を感じますねw
あと、はてなブログはIoに対応してなかったのですが、Qiitaは対応してるんですね(笑)
すげー(小並感)

###1~5まで足す

Sample.io
ans := 0
for(i,1,5,ans=ans+i)
ans println

forに{}が存在しないだとっ!? 初めて見ましたw
これくらい簡単なプログラムならむしろJavaとかCとかよりも見易い?

###おみくじ

Sample.io
rand := 0.5

if(rand<=0.3,"凶" println,
    if(rand<=0.8,"吉" println,"大吉"println)
)

/*
(rand<=0.3) ifTrue("凶" println) ifFalse(
    (rand<=0.8) ifTrue("吉" println) ifFalse("大吉" println)
)
こういう書き方もあります。
*/

乱数作ろうと思ったんですが、Ioは小規模にするのがモットーらしいので元からライブラリが殆ど入っていない状態らしいです。
Git HubからIoのアドオン(ライブラリ)を入れる手順がRead.mdに書いてあったのでやったんですが、明らかにアドオンはインストールされてるはずなのに実行しても「そんなオブジェクトはないゾ」って言ってくるんですよね。。。(多分俺が悪い) なので仕方なくrandには0.5を入れておきました。

で、肝心の書き心地ですが{}が無い分何重にも重なったifが出てくるとかなり見にくい。しかも処理を()内に書くのが特徴的。
でも、下のコメントの方はifTrueとかifFalseとか書いてるので分かりやすいかも。複雑になるとごっちゃごちゃになっちゃうけど(笑)

###リストで色々

Sample.io
list := List clone append(10, 6, 15, 3 ,20) //list作成

list := list sort //ソートします
list println //list(3,6,10,15,20)

list remove(20) //20を消します(因みにリストに存在しない値を入れてもエラーとかは出ません)
list println

list := list(30, 10, 5, 20) select(%3==0) //3の倍数のみ抽出
list println

list := list map(i,i*2+1) //全ての要素を2倍して1足す
list println

めっちゃ色々出来るやん!!! cloneでlistを作成するとは驚きです((((;゚Д゚)))))))
あと、map,selectとかはかなり有能。foreach,filterが簡略化された感じですね。

#Ioを使ってみて
Ioの基礎だけやってみました。
想像してた以上のクオリティーでビックリしました(笑)
あと、{}が無いだけでこんなにもスッキリするのか、、

という事で今回はこれで終了! 最後に評価を書いておきます。
記事を読んで頂きありがとうございましたm(_ _)m

#評価
注:自分が感じた評価ですので、酷評しても怒らないでください
習得のしやすさ★★★★★☆☆☆☆☆(日本語の文献は無いので難しいが、tutorialは英語を読まなくても出来るので若干評価をあげました)

理解のしやすさ★★★★★★★★☆☆(C,Java・・などの有名言語とほぼ変わらないので、Io初見でも何をやりたいかくらいは分かる)

読みやすさ  ★★★★★★☆☆☆☆(スッキリ感と読みやすやは別で、{}が無いので見た目はスッキリしてるがどこに処理が書かれているかがちょっとわかりにくい)

書きやすさ  ★★★★★★★★☆☆("()"とか"{}"が最低限しか無いので、割と早く書けるかと)

実用性    ★★★☆☆☆☆☆☆☆(マニプロの評価の項目になぜこれを入れたのか過去の自分に問いかけたくなる。。ただ、この言語は環境構築も楽で見た目もスッキリしてて取っ付きやすいので初心者に「これがプログラミングだよ!楽しいでしょ?」って言うには丁度よさそうなので星3)

面白いか   ★★★★★★☆☆☆☆(独特の書き方に面白さを感じました)

またやるか  ★☆☆☆☆☆☆☆☆☆(初心者に紹介する時は使うかも。でも個人では使わないかな。。)

#参考にしたサイト
https://ja.wikipedia.org/wiki/Io_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?