ことはじめ
最近話題の、Rubyというプログラミング言語をもちいて、プログラミング入門に挑戦してみたいと思います。
取り敢えず手始めに、これから参考にしたいサイトを貼り付けておきます。
- オブジェクト指向スクリプト言語 Ruby
- http://www.ruby-lang.org/ja/
- Rubyist Magazine - るびま
- http://jp.rubyist.net/magazine/
- 逆引きRuby - 逆引きRuby
- http://www.namaraii.com/rubytips/
- rubyco(るびこ)の日記
- http://d.hatena.ne.jp/rubyco/
簡単に検索して出てきたものを貼り付けてるので、実のところもっと良いサイトを沢山見逃してる気がします。
そのあたりは、今後見つけ次第記録していくつもりです。
がんばります。
プログラミングとは何か
そもそもプログラミングとは何ぞや?という話。
……はい、申し訳ないですがまずはそんなところからです。
わからないことは用語辞典みたいなサイトで調べまくりなスタンスです。
真っ先にあたってみるのは以下のようなサイト。
- IT用語辞典 e-Words
- http://e-words.jp/
- Wikipedia
- http://ja.wikipedia.org/
- Weblio|辞書<国語辞典・国語辞書・百科事典>
- http://www.weblio.jp/
ではさっそく。
プログラミング(Programming)とは、プログラムを作成することにより、コンピュータに指示を与える行為である。
ほとんどのプログラミングは、プログラミング言語を用いて処理を記述することで行われる。これをコーディングという。類義語としてスクリプティングがある。
プログラミングの目的は、人間の意図した処理をコンピュータに行わせることである。
ほとんどのプログラミングは、プログラミング言語とよばれる人工言語を記述することによって行われる。 プログラミングには、文字による言語を記述する方法ばかりではなく、視覚的な表現や図形的な記号を入力するビジュアルプログラミングという方法もある。
なるほど。
自分なりの解釈でいくと、
- プログラミングとは、プログラムを作成することでコンピュータに指示を与えること
- プログラムは、プログラミング言語という人工言語を記述することで作成する
- ちなみにプログラミング言語でもって処理を記述することをコーディングと呼ぶ
ということらしい。
そうなると、プログラミングがしたかったらプログラミング言語という人工言語の使い方を学ばなくちゃいけない、ということになるらしい。
このブログの趣旨としては、Rubyを学びつつプログラミングの仕方を覚えよう、ということなので、プログラミング言語はRubyで決まり。
でもせっかくなので、他にどんなプログラミング言語があるのか知りたいと思ったら、Wikipediaにこんなページがあった。
プログラミング言語一覧 - Wikipedia
えーと……うん。いっぱいあります。
プログラミング言語の分類とRuby
このページではいくつかの観点からプログラミング言語が分類されています。その中で、我らがRubyがどこに分類されるのかを見てみます。すると、文法による分類では“手続き型言語”に属し、さらに“スクリプト言語”であって“オブジェクト指向言語”でもあるそうです。うーん。
とりあえず簡単に見ていくと、“手続き型言語”については、
という記述があります。さらに、他の○○型言語と比較するとダントツに数が多いので、要は「フツーで自然な書き方」ってことなんじゃないかと勝手に思っておきます。
プログラミング言語としては一番有名な(と何故か思ってる)C言語もこれに含まれているし、学びやすそうな印象です。
次に、“スクリプト言語”について調べてみます。
スクリプト言語(-げんご)とは、アプリケーションソフトウェアやソフトウェアツールの動作内容を、台本(Script)のように記述するための、簡易的なプログラミング言語の総称である。
さらに転じて、比較的単純なプログラムを記述するための、簡易的なプログラミング言語全般をいう。動的型付け言語を、スクリプト言語と呼ぶ定義もある。ただし、厳密な定義ないし区別は存在しない。いずれの場合も、多くはインタープリタ方式を採用している。
ということです。「厳密な定義ないし区別は存在しない」というあたりが不安です。
簡易的な、なんていう記述もありますが、これは別に言語として簡単である、という感じでもなさそうです。なんだか気楽にプログラミングできそうな言語、というくらいにとらえておきます。
「インタープリタ方式」というのは「コンパイル方式」と対比しておくとよさそうです。
コンパイルというのは
人間がプログラミング言語を用いて作成したソフトウェアの設計図(ソースコード)を、コンピュータ上で実行可能な形式(オブジェクトコード)に変換すること。そのためのソフトウェアをコンパイラという。変換のみを一括して行い、生成したオブジェクトコードの実行は行わない。
で、インタープリタというのは
人間がプログラミング言語で記述したソフトウェアの設計図(ソースコード)を、コンピュータが実行できる形式(オブジェクトコード)に変換しながら、そのプログラムを実行するソフトウェア。インタプリタ型の言語はプログラムの実行時に変換を行なうため、その分だけコンパイラ型言語よりも遅い。
というもの。
要するに、コーディング作業によって作られたソースコードをそのまま実行できるのがインタープリタ方式で、一旦明示的に翻訳作業が必要なのがコンパイル方式、という理解でひとまずよさそうです。このあたりも、気楽にプログラミングができそうでいい感じです。
Rubyという言語についてもうちょっと詳しく
さらにRubyそのものに視点を絞って、どんなものなのか調べてみます。
まずは公式サイトから。
Rubyは、手軽なオブジェクト指向プログラミングを実現するための種々の機能を持つオブジェクト指向スクリプト言語です。本格的なオブジェクト指向言語であるSmalltalk、EiffelやC++などでは大げさに思われるような領域でのオブジェクト指向プログラミングを支援することを目的としています。もちろん通常の手続き型のプログラミングも可能です。
Rubyはテキスト処理関係の能力などに優れ、Perlと同じくらい強力です。さらにシンプルな文法と、例外処理やイテレータなどの機構によって、より分かりやすいプログラミングが出来ます。
おお、なんだか素晴らしそうな言語ですね。まぁ、公式サイトなんですから良いことが書いてあるのも当然だとは思いますがw
『簡単にいえばPerlのような手軽さで「楽しく」オブジェクト指向しようという言語です』ということなので、ぜひ楽しみながら学習したいです。
Rubyの特長
・ シンプルな文法
・ 普通のオブジェクト指向機能(クラス、メソッドコールなど)
・ 特殊なオブジェクト指向機能(Mixin、特異メソッドなど)
・ 演算子オーバーロード
・ 例外処理機能
・ イテレータとクロージャ
・ ガーベージコレクタ
・ ダイナミックローディング(アーキテクチャによる)
・ 移植性が高い。多くのUNIX上で動くだけでなく、DOSやWindows、Mac、BeOSなどの上でも動く
シンプルな文法、まで読んだ。あとは気にしないことにします。
次に、またまた用語辞典サイトから情報を拾ってきます。
Ruby(ルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプト言語であり、従来Perlなどのスクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。
ガベージコレクション、強力な正規表現処理、マルチスレッド、例外処理、イテレータ・クロージャ、Mixin、演算子オーバーロードなどの機能を持つ。Perlの代替となることができることが初期の段階から重視されている。Perlと同様にグルー言語としての使い方が可能で、Cプログラムやライブラリを呼び出す拡張モジュールを組み込むことができる。
日本語でおk、と言いたくなります。というかそもそも作者が日本の方なので、日本人には優しいはずなのですが……
この記事気になるのは、何故かPerlとの比較がされている、というところ。Perlというと、一般的(?)にはいわゆるCGIプログラムを作るときに使われる言語、みたいな印象だと思います。そのPerlの代替になるとのことなので、RubyもCGIプログラムに向いてたりするのでしょう。
Rubyでこんなのが作れます
……というわけでRubyによるプログラムで有名そうなものをピックアップしてみました。
- tDiary.org
- http://www.tdiary.org/
- RandomNote
- http://ninjinix.x0.com/rn/
- バグトラッキングシステム 影舞
- http://www.daifukuya.com/kagemai/
いずれはこれらのソースを読んだり、プログラムを利用したりしたいものです。
既存のソースを読むことは非常に良い学習になる、という話を聞いたこともあるので、勉強になる読みやすいソースなども知りたいところです(探してみます)。
それから、最近話題のRuby on RailsもRubyでCGIプログラムする際に使うもののようです。流行に乗って使ってみたいです。
それではまた明日。