Introducing
Your new presentation assistant.
Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.
Trending searches
専攻は情報学科のようですが。
他、元宣教師という変わった経歴もあり、Rubyの発展に影響を与えているのかもしれません。自分が普通だと思っている人は、なかなか多様性の大切さがわからなかったりもしますしね。
最近は禁句らしいですが。
Rubyは黒魔術を得意とする言語です。
家電製品を例に考えてみましょう
Rubyが普及してきて、疑似コードの代わりにRubyを使う例が増えています。
もう説明のための仮の文法とかいりません。Rubyで十分ということです。
それだけ読みやすいと言われています。
Rubyはどうしたか
わかりやすくするために日本語使っていますが気にしないよう
しかしそれは、Rubyでプログラムを書くためではありません。
Rubyの特徴の一部は未来のプログラム言語が向かう方向を示しています。
私は今、Rubyを学んでいます。
プログラムを書くことよりも、読むことのほうが圧倒的に多いです。
書き直す前には必ずその周辺のコードは読み直さなくてはなりませんし。
その特徴ついて、解説していきます。
Rubyを学ぶことによってRuby以外の言語を含むプログラムのスキルが上がるでしょう。
書く<<読む
基本的な言語要素である関数宣言とループ構文を組み合わせることすら難しい。
Rubyは、書くときに考えることを増やすことにより、読むときに非常に読みやすくなる工夫が多く含まれています
宣言型プログラミング
見た目は宣言型なのでOK
宣言に見えますが、実際には関数を作るという命令を順次実行しているだけです。
実際は手続型なのでOK
これは難しい
インタプリタの実装者が頑張れば、ある程度は何とか。
動く疑似コード
実際には徹底して命令型
そのうえで、見た目を宣言型にした。
メジャー言語設計者としてはたぶん、史上最も文系な人です。
数学が苦手
これは、変数が初期化されていない時にのみ初期化する構文です。
これ以上ないというくらい仕様を端的に宣言しています。
別にいいんです。falseの可能性があるときはifで分岐すれば。この辺の感覚が自然言語に似ていますね。日本語などの文法は、論理的にすべての場合に正しくなることが保証されているわけではありません。しかし、話す人がわかりやすくなるように常に気を付けていれば、聞く人に解りやすいように話すことが可能です。
しかしこれは、値がfalseの可能性がある場合に破たんします。言語設計者の多くは、この段階であきらめると思います。論理的にあらゆる場合に適用できる構文ではないと使えないと。
この辺の文系感覚が、Rubyを読みやすくしているのだと思います。
例
+=と同じように||に=をくっつけた構文です。||は値がnilもしくはfalseの時はもう片方の値を返すので、初期化されずにnilが入っている場合のみ代入されます。
変数が初期化されていなければ代入を行い、すでに値が入っていれば何もしません。
ただ、人間にそう見えるというだけで、Rubyは別の解釈をしています。
Rubyでは、return文を書かないと、最後の値が戻り値として返されます。これを利用すると、非常に宣言的なメソッドを書くことができます。
論理的美しさより、文章としてのわかりやすさを重視した言語ができました。
String の連結は、左右が可換ではないのだから + ではなくて * だろうという話はいまさらだよねということでそのままなのを残念に思っていたりします。
「Stringの連結が * であるべきだ」という主張は私には理解できていませんし、そうするつもりもありません。
これが理解できないとまで言うのは、メジャーな言語開発者としては初めてでしょう。
仕事で使わされる言語として使いづらい面もありますが
最近の家電製品やコンピュータもそうですが分解ができないような仕組みになっています。多くの人が使わせるには、圧倒的にそのほうが便利です。
みんなで工夫すればどんどんよくなっていくオープンソースの言語としては、発展性があります。
しかし、昔の家電は中を空けていじれたそうです。このほうが、優秀な技術者は育ちやすい環境でしょう。
管理はしにくいですが、技術者も、言語そのものも、成長していきやすい環境ができます。
冗談交じりとはいえ、こう豪語するくらい自然なAPIができていますね。
それは、コレクションがあってシャッフルしたいと思ったら、shuffleと書いて、それで動かなきゃいけないんですよ。
Java
Python
あっはっは。シャッフルできるはずだと。できなければRubyのバグだと。
C#
C++
Ruby
Lisp